Welcome! Everything is fine.

[TIL] 멀티 스레드 - 스레드와 스레드 풀 이해하기 본문

TIL

[TIL] 멀티 스레드 - 스레드와 스레드 풀 이해하기

개발곰발 2025. 9. 11.
728x90
인프런 <스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술> 강의를 보고 정리한 내용입니다.

멀티 스레드?

  • 스레드(Thread) : 애플리케이션 코드가 순차적으로 실행되는 흐름
  • 자바 애플리케이션 실행 시, main 스레드가 처음 시작
  • 한 스레드는 한 번에 하나의 코드 라인만 수행
  • 여러 작업을 동시에 처리해야 할 경우, 추가 스레드 생성 필요
  • 예: 웹 서버에서 여러 요청을 동시에 처리하려면 멀티 스레드가 필수

요청마다 스레드를 만들면...

웹 서버가 요청마다 새 스레드를 만들면 어떨까?

장점

  • 동시 요청 처리 가능
  • 하나의 요청이 지연되더라도 나머지는 정상 동작
  • 서버 리소스 허용 범위 내에서 처리량 확장 가능

단점

  • 스레드 생성 비용 높음 → 요청 폭주 시 응답 지연
  • 컨텍스트 스위칭(Context Switching) 비용 발생
  • OS가 CPU를 한 스레드에서 다른 스레드로 전환할 때 발생
  • 스레드 생성이 무제한 → 리소스 한계 초과 시 서버 다운 위험

스레드 풀(Thread Pool)로 해결하기

요청마다 스레드를 만들 때 생기는 문제를 해결하기 위해 스레드 풀을 사용할 수 있다.

스레드 풀은 필요한 스레드를 보관하고 관리하는 곳이다.

스레드 풀에 생성 가능한 스레드의 최대치를 관리한다. 예를 들어 톰캣은 최대 200개가 기본 설정이며, 변경 가능하다.

동작 방식

  1. 필요한 스레드를 미리 생성해 스레드 풀에 보관한다.
  2. 요청이 들어오면 풀에서 스레드를 꺼내 사용한다.
  3. 사용 완료 후 다시 풀에 반납한다.

장점

  • 스레드 생성/소멸 비용(CPU) 절감 → 응답 속도 향상
  • 최대 스레드 수 제한으로 요청 폭주에도 안정적 처리 가능

단점

  • 스레드 풀이 너무 클 경우 → 메모리 낭비

실무 팁

  • WAS 튜닝 핵심 : 최대 스레드(max thread) 수
    • 너무 낮으면 → 동시 요청 많을 때 지연 발생
    • 너무 높으면 → CPU/메모리 한계 초과, 서버 다운
  • 장애 대응
    • 클라우드 환경 : 서버 수 늘리고 튜닝
    • 온프레미스 : 최대 스레드 수 최적화 필요

적정 스레드 수

  • 애플리케이션 로직, CPU/메모리, IO 리소스 상황에 따라 다름   실제 서비스와 유사한 성능 테스트 필수
  • 성능 테스트 도구 : Apache AB, JMeter, nGrinder

WAS와 멀티 스레드

멀티 스레드는 복잡하고 신경써야 하는 부분이 많은데,

WAS가 있기 때문에 개발자는 멀티 스레드 관련 코드를 신경쓰지 않아도 된다.

 

  • WAS가 멀티 스레드 처리를 담당 → 개발자는 싱글 스레드처럼 코딩 가능
  • 단, 싱글톤 객체(서블릿, 스프링 빈) 사용 시 주의
    • 공유 변수/멤버 변수는 동시 접근 문제 발생 가능 → 스레드 안전 필요

추가 개념

  • 스레드 안전(Thread Safety) : 여러 스레드가 동시에 접근해도 데이터 일관성 유지
  • 동시성 문제(Concurrency Issue) : race condition, deadlock
  • 자바 스레드 풀 활용 예시 : ExecutorService, ThreadPoolExecutor