웹/애플리케이션 개발뿐 아니라 저수준 시스템 프로그래밍에서도 성능은 늘 중요한 주제입니다.
그중에서도 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. 버퍼의 주요 목적
- I/O 호출 횟수 감소
- 작은 단위의 I/O 대신 덩어리(block) 단위로 전송
- 시스템 콜(System Call)과 물리적 I/O를 줄여 병목을 완화
- 속도 차이 조정
- 빠른 주체(CPU)와 느린 주체(디스크/네트워크) 간 속도 불일치 해소
- 생산자-소비자 모델처럼, 생산자는 버퍼에 쓰고 소비자는 버퍼에서 읽음
- 비동기 처리 지원
- I/O 완료를 기다리지 않고 즉시 다음 작업으로 전환
- CPU 유휴 시간을 최소화하여 처리량(throughput) 증가
- 버스트 트래픽 완화
- 순간적으로 몰리는 대량 데이터(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 |