백엔드/CS

[CS] Thread Pool 한 번에 이해하기

miniberry 2026. 4. 2. 20:25

백엔드 개발을 하다 보면 “Thread Pool”이라는 개념을 정말 자주 접하게 된다.
특히 Spring 기반 서버를 사용한다면, 우리가 직접 다루지 않아도 내부적으로 항상 사용되고 있다.

그런데 단순히

“Thread를 미리 만들어두고 재사용하는 것”

정도로 이해하면 절반만 이해한 것이다.

이 글에서는 Thread → Pool → Thread Pool로 이어지는 흐름을 CS 관점에서 제대로 정리해보려고 한다.


1. Thread란 무엇인가?

✔ 정의

Thread는 프로세스 내에서 실행되는 최소 단위의 작업 흐름이다.


✔ Thread의 구조

  • 프로세스 내에서 여러 Thread가 존재 가능
  • 공유 영역
    • Heap
    • Data
    • Code
  • 독립 영역
    • Stack (각 Thread마다 존재)

✔ 왜 Thread를 사용할까?

  • 동시에 여러 작업 처리 (Concurrency)
  • 서버 요청 병렬 처리
  • 사용자 응답성 향상

2. Thread의 문제점

Thread는 많이 쓸수록 좋은 것이 아니다.

 1) 생성 비용

  • Thread 생성 시 OS 리소스 사용
  • Stack 메모리 할당 필요

 2) Context Switching 비용

  • CPU가 Thread를 전환할 때 발생
  • 레지스터 저장/복원 필요

 3) 동기화 문제

  • 공유 자원 → Race Condition
  • Lock 사용 → 성능 저하

핵심

Thread는 “가벼운 프로세스”가 아니라
비용이 있는 자원이다


2. Pool이란 무엇인가?

✔ 정의

Pool은 미리 생성한 자원을 재사용하는 구조이다.


✔ 대표 예시

  • DB Connection Pool
  • Object Pool
  • Thread Pool

✔ 왜 Pool을 사용할까?

문제해결
생성 비용 큼 미리 생성
반복 생성/삭제 재사용
자원 관리 어려움 중앙 관리

핵심 아이디어

“비싼 자원은 만들어두고 돌려쓰자”


3. Thread Pool이 등장한 이유

 1) 문제 상황

서버에서 요청마다 Thread를 생성한다고 가정해보자

요청 1 → Thread 생성
요청 2 → Thread 생성
요청 1000 → Thread 1000개 생성
 

 2) 발생하는 문제

  • 메모리 사용량 급증
  • Context Switching 증가
  • CPU 오버헤드
  • 시스템 불안정

결론

Thread를 “무한 생성”하는 구조는 절대 안정적인 서버 구조가 아니다


4. Thread Pool이란?

✔ 정의

Thread Pool은 미리 생성된 Thread 집합을 관리하면서 작업(Task)을 분배하는 구조이다.


✔ 동작 방식

  1. Thread를 미리 생성
  2. 요청(Task)은 Queue에 저장
  3. Thread가 Queue에서 Task를 가져와 실행

✔ 구조

[Client 요청] Task Queue [Thread Pool](Worker Threads)
 

5. Thread Pool의 장점

 1) 성능 향상

  • Thread 생성/삭제 비용 제거
  • 재사용으로 빠른 처리

 2) 자원 관리

  • Thread 개수 제한 가능
  • 시스템 안정성 확보

 3) 부하 제어

  • Queue를 통해 요청 조절
  • 과부하 방지

핵심

Thread Pool은 단순한 최적화가 아니라 시스템 안정성을 위한 구조


6. Thread Pool의 Trade-off

 1) Thread 개수 설정 문제

  • 너무 많으면 → Context Switching 증가
  • 너무 적으면 → 처리 지연

실제 서비스에서 가장 중요한 튜닝 포인트


 2) Queue 폭발 문제

  • 요청이 너무 많으면 Queue에 계속 쌓임
  • 메모리 증가

 3) Deadlock 가능성

  • Thread 부족 + Blocking 작업
    → 전체 시스템 멈춤 가능

7. Java/Spring에서의 Thread Pool

Spring을 사용하면 우리가 직접 생성하지 않아도내부적으로 Thread Pool이 동작한다


✔ 대표 종류

  • Fixed Thread Pool → 고정된 개수
  • Cached Thread Pool → 필요 시 생성/삭제
  • Single Thread → 순차 처리
  • Scheduled Thread Pool → 주기적 실행

실제 서버에서는
ExecutorService 기반 Thread Pool이 핵심


8. 핵심 정리

Thread = 실행 단위
Pool = 자원 재사용 전략
Thread Pool = 비싼 Thread를 효율적으로 관리하는 시스템