들어가며: 왜 'Pool'을 사용해야 할까요?
웹 애플리케이션의 성능을 이야기할 때, **'Pool(풀)'**이라는 개념은 빼놓을 수 없습니다. 새로운 요청이 들어올 때마다 자원을 만들고, 사용이 끝나면 버리는 방식은 비효율적입니다. 마치 매번 물을 뜰 때마다 새 양동이를 만드는 것과 같죠.
**쓰레드 풀(Thread Pool)**과 **커넥션 풀(Connection Pool)**은 이 비효율을 해결하고 시스템 자원의 재활용을 통해 성능을 극대화하는 쌍둥이 기술입니다.
🧵 1. 쓰레드 풀 (Thread Pool): CPU 자원 관리의 마스터
🎯 쓰레드 풀은 무엇인가요?
쓰레드 풀은 시스템이 작업을 처리할 수 있도록 미리 일정 개수의 쓰레드(Thread)를 생성하여 보관해 두는 저장소입니다.
💡 왜 사용해야 할까요? (핵심 이유)
- 생성/소멸 오버헤드 제거: 쓰레드를 만드는 과정(OS 커널 호출)과 해제하는 과정은 생각보다 많은 비용을 소모합니다. 풀의 쓰레드를 재사용함으로써 이 비용을 완전히 없앨 수 있습니다.
- 자원 고갈 방지 (안정성): 무제한으로 쓰레드가 생성되면 메모리가 부족해지거나, Context Switching 비용이 과도하게 증가하여 오히려 전체 성능이 저하됩니다. 풀은 쓰레드 최대 개수를 제한하여 시스템 안정성을 지켜줍니다.
⚙️ 작동 흐름
- 작업이 도착하면 **작업 큐(Task Queue)**에 들어갑니다.
- 풀에 있는 Worker 쓰레드가 큐에서 작업을 꺼내 처리합니다.
- 작업을 마친 쓰레드는 종료되지 않고 다시 풀로 복귀하여 다음 작업을 기다립니다.
🔗 2. 커넥션 풀 (Connection Pool): DB 응답 속도의 비밀 병기
🎯 커넥션 풀은 무엇인가요?
커넥션 풀은 애플리케이션이 데이터베이스(DB)에 접속하기 위해 필요한 커넥션(Connection)을 미리 생성하여 관리하는 저장소입니다.
💡 왜 사용해야 할까요? (핵심 이유)
- 응답 시간 단축: 데이터베이스 커넥션을 맺는 작업(인증, 세션 생성 등)은 상당히 느린 작업에 속합니다. 풀의 커넥션을 가져다 재사용하면 DB 접근 속도가 획기적으로 빨라집니다.
- DB 부하 경감: 동시에 DB에 접속을 시도하는 요청 수를 제한하여, DB 서버에 과도한 부하가 걸리는 것을 막고 안정적인 서비스를 유지하게 돕습니다.
⚙️ 작동 흐름
- 애플리케이션이 DB 작업이 필요하면 풀에 "커넥션을 빌려줘(Checkout)" 요청합니다.
- 작업이 완료되면 "커넥션을 돌려줘(Check-in)" 요청을 통해 커넥션을 끊지 않고 다시 풀로 반납합니다.
- 커넥션이 모두 사용 중일 경우, 대기하거나 에러를 반환하는 등의 정책이 적용됩니다.
'면접복기' 카테고리의 다른 글
| (면접복기)자바 컴파일 과정 완벽 정리: .java → 실행까지 (0) | 2026.05.15 |
|---|---|
| (면접복기)자바 기본 타입(Primitive Type) 완벽 정리 (0) | 2026.05.15 |
| (면접복기)OCP를 준수하는 결제 시스템 확장하기: 전략패턴을 활용한 유연한 설계 (0) | 2026.01.27 |
| (면접복기)트랜잭션 격리 수준 (Transaction Isolation Levels) (0) | 2025.11.19 |