Network

버퍼(Buffer)와 I/O 최적화

경딩 2025. 4. 21. 17:23

웹/애플리케이션 개발뿐 아니라 저수준 시스템 프로그래밍에서도 성능은 늘 중요한 주제입니다.

그중에서도 I/O(Input/Output) 작업과 버퍼(Buffer)의 역할은 성능 병목을 해소하는 핵심 키워드입니다.

 
 

1. I/O란?

I/O는 컴퓨터의 내부 장치(CPU·메모리)와 외부 장치(디스크·네트워크) 사이에서 데이터를 주고받는 모든 작업을 말합니다.

  • 디스크 I/O: 파일 읽기/쓰기, 데이터베이스 액세스
  • 네트워크 I/O: HTTP 요청/응답, API 호출
  • 사용자 I/O: 키보드/마우스 입력, 터미널 출력

디바이스마다 속도가 다르고, 외부 장치는 내부 메모리보다 훨씬 느리기 때문에 I/O는 큰 병목을 일으킬 수 있습니다.


2. 버퍼(Buffer)란?

**버퍼(Buffer)**는 **임시 저장소(Queue 형태)**로, I/O 작업을 효율적으로 처리하기 위해 데이터를 한곳에 모아두는 메모리 영역입니다.

BufferedReader, BufferedWriter 등의 API가 대표적인 예시입니다.


3. 버퍼의 주요 목적

  1. I/O 호출 횟수 감소
    • 작은 단위의 I/O 대신 덩어리(block) 단위로 전송
    • 시스템 콜(System Call)과 물리적 I/O를 줄여 병목을 완화
  2. 속도 차이 조정
    • 빠른 주체(CPU)와 느린 주체(디스크/네트워크) 간 속도 불일치 해소
    • 생산자-소비자 모델처럼, 생산자는 버퍼에 쓰고 소비자는 버퍼에서 읽음
  3. 비동기 처리 지원
    • I/O 완료를 기다리지 않고 즉시 다음 작업으로 전환
    • CPU 유휴 시간을 최소화하여 처리량(throughput) 증가
  4. 버스트 트래픽 완화
    • 순간적으로 몰리는 대량 데이터(burst)를 버퍼가 흡수
    • 안정적인 처리량 유지

4. I/O를 줄였을 때 얻는 장점

장점설명

Latency 감소 디스크/네트워크 접근 지연 시간 획기적 단축
Throughput 증가 Blocking I/O를 줄여 CPU가 더 많은 연산 수행
리소스 효율화 시스템 콜 및 컨텍스트 스위칭 감소
비용 절감 클라우드 환경에서 I/O 호출에 따른 비용 절감

5. 간단한 코드 예시

try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
    String data = "Hello, Buffer!";
    writer.write(data);
    // writer.flush(); // 필요시 명시적 호출
}
  • BufferedWriter는 내부 버퍼에 데이터를 모았다가, 적절한 시점(버퍼가 가득 찰 때 또는 flush() 호출 시)에 디스크에 한 번에 씁니다.

마무리

  • 버퍼는 I/O 병목을 해소하고, 비동기·흐름 제어를 지원해 시스템 전반의 성능과 안정성을 높이는 중요한 패턴입니다.

'Network' 카테고리의 다른 글

네트워크 예외 - 종료  (0) 2025.05.12
HTTP 메서드란? 멱등성  (0) 2025.04.01
HTTP/ HTTPS , SSL 가속기  (0) 2025.03.19
L4 , L7 로드밸런서  (0) 2025.02.12
TCP/IP 네트워크 이해하기 (4) - TCP  (0) 2025.01.27