728x90
오버헤드(Overhead)란?
**오버헤드(Overhead)**는 어떤 작업을 수행할 때 추가적으로 발생하는 비용(자원, 시간, 메모리 등)을 의미해.
즉, 실제 작업을 수행하는 데 직접적인 기여를 하지 않지만, 부가적으로 필요한 것들이야.
1. 오버헤드의 종류
✅ 성능(연산) 오버헤드
- 프로그램이나 시스템이 어떤 작업을 수행하는 데 필요한 추가적인 연산 비용
- 예시:
- 가상화 환경에서 CPU가 가상 머신을 관리하는 데 드는 연산 비용
- DB에서 쿼리 실행 시 인덱스를 유지하거나 캐시를 관리하는 데 드는 연산
✅ 메모리 오버헤드
- 프로그램이 실행될 때 추가적으로 소비하는 메모리
- 예시:
- Python에서 동적 메모리 할당 시 발생하는 추가적인 메모리 사용량
- DB에서 트랜잭션을 관리하기 위한 로그 저장 공간
✅ 네트워크 오버헤드
- 데이터를 전송할 때 필요한 추가적인 비용(패킷 헤더, 암호화, 압축 등)
- 예시:
- HTTP 요청에서 헤더 크기가 커서 불필요한 데이터가 오가는 경우
- 데이터 암호화로 인해 전송 속도가 느려지는 경우
✅ 관리 오버헤드
- 시스템을 운영·관리하기 위해 추가적으로 필요한 비용
- 예시:
- 데이터베이스 인덱스를 유지하는 비용
- GC(Garbage Collection, 가비지 컬렉션) 수행으로 인해 프로그램이 잠시 멈추는 현상
2. 오버헤드 예제
✅ DB 트랜잭션의 오버헤드
데이터베이스에서 트랜잭션을 관리하기 위해 추가적인 비용이 발생함.
- 트랜잭션 로그 기록 → 데이터 변경 사항을 저장하는 과정에서 디스크 I/O 증가
- 락(Lock) 관리 → 동시성 제어를 위해 발생하는 성능 저하
✅ 프로그래밍에서의 오버헤드
동적 메모리 할당 시 추가적인 메모리 사용이 발생함.
import time
# 리스트(배열) 사용 (낮은 오버헤드)
arr = [i for i in range(1000000)]
# 동적 리스트 할당 (높은 오버헤드)
linked_list = []
for i in range(1000000):
linked_list.append(i)
# 메모리 사용량 비교
time.sleep(5) # 실행 후 메모리 모니터링
- 리스트는 연속된 메모리를 사용하지만, 연결 리스트는 추가적인 포인터 메모리를 필요로 함 → 연결 리스트는 오버헤드가 크다.
728x90
3. 오버헤드를 줄이는 방법
- 불필요한 연산 최소화
- 예: 반복문 최적화, 캐시 사용
- 효율적인 데이터 구조 선택
- 예: 리스트 대신 배열 사용, B-Tree 인덱스 활용
- 네트워크 최적화
- 예: 압축 사용, 불필요한 요청 최소화
- 메모리 관리 최적화
- 예: 가비지 컬렉션 튜닝, 객체 재사용
결론
- 오버헤드는 추가적으로 발생하는 비용(시간, 메모리, 연산, 네트워크 등)
- 최적화를 통해 오버헤드를 줄이면 성능을 개선할 수 있음
728x90
'DAP 자격증' 카테고리의 다른 글
[DAP자격증] 과목5 - 옵티마이저(Optimizer)란? (1) | 2025.03.27 |
---|---|
[DAP자격증] 과목5 - SQL 통계정보 보는법 (Parse, Execute, Fetch) (1) | 2025.03.27 |
[DAP자격증] 5과목 - B-Tree 인덱스 vs. Bitmap 인덱스 (0) | 2025.03.27 |
[DAP자격증] 문제 풀기 (조인에 관하여) (0) | 2025.03.27 |
[DAP자격증] 5과목 - Latch(래치)와 경합(Contention)에 관하여 (0) | 2025.03.27 |