주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 7장 I/O 병목, 어떻게 해결하지
백엔드 서비스는 CPU보다 I/O 때문에 느려지는 경우가 많다.
DB, 파일, 네트워크, 외부 API 모두 I/O 자원이다.
I/O 병목이 보이는 신호
- CPU는 남는데 응답 시간이 느리다
- 스레드가 많이 쌓인다
- connection pool 대기가 늘어난다
- 외부 호출이나 DB 호출 시간이 길다
왜 중요한가
I/O 병목은 애플리케이션 코드 최적화만으로는 해결되지 않는 경우가 많다.
- DB 쿼리 지연
- 디스크 flush 지연
- 네트워크 지연
- 외부 API 응답 지연
같은 원인을 분리해야 한다.
해결 방향
1. 병렬화
독립적인 I/O는 병렬 실행으로 줄일 수 있다.
다만 무한정 병렬화하면 오히려 downstream 부하만 키운다.
2. 캐시
반복 조회는 캐시가 가장 강력할 수 있다.
3. 배치와 스트리밍 구분
대량 데이터를 한 번에 읽지 말고 청크/스트림으로 처리하는 것이 낫다.
4. 비동기/큐 분리
응답 경로에서 바로 처리할 필요 없는 I/O는 비동기로 넘길 수 있다.
정리
I/O 병목은 “느린 코드” 문제가 아니라,
대기 시간이 어디서 발생하는지와 자원 경계를 어떻게 나눌지의 문제다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
댓글
아직 댓글이 없습니다