본문 바로가기
DAP 자격증

[DAP자격증] 과목5 - 오버헤드(Overhead)란?

by IronAreum 2025. 3. 27.
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. 오버헤드를 줄이는 방법

  1. 불필요한 연산 최소화
    • 예: 반복문 최적화, 캐시 사용
  2. 효율적인 데이터 구조 선택
    • 예: 리스트 대신 배열 사용, B-Tree 인덱스 활용
  3. 네트워크 최적화
    • 예: 압축 사용, 불필요한 요청 최소화
  4. 메모리 관리 최적화
    • 예: 가비지 컬렉션 튜닝, 객체 재사용

결론

  • 오버헤드는 추가적으로 발생하는 비용(시간, 메모리, 연산, 네트워크 등)
  • 최적화를 통해 오버헤드를 줄이면 성능을 개선할 수 있음
728x90