Notice
Recent Posts
Recent Comments
Link
Welcome! Everything is fine.
[TIL] 멀티 스레드 - 스레드와 스레드 풀 이해하기 본문
728x90
인프런 <스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술> 강의를 보고 정리한 내용입니다.
멀티 스레드?
- 스레드(Thread) : 애플리케이션 코드가 순차적으로 실행되는 흐름
- 자바 애플리케이션 실행 시, main 스레드가 처음 시작
- 한 스레드는 한 번에 하나의 코드 라인만 수행
- 여러 작업을 동시에 처리해야 할 경우, 추가 스레드 생성 필요
- 예: 웹 서버에서 여러 요청을 동시에 처리하려면 멀티 스레드가 필수
요청마다 스레드를 만들면...
웹 서버가 요청마다 새 스레드를 만들면 어떨까?
장점
- 동시 요청 처리 가능
- 하나의 요청이 지연되더라도 나머지는 정상 동작
- 서버 리소스 허용 범위 내에서 처리량 확장 가능
단점
- 스레드 생성 비용 높음 → 요청 폭주 시 응답 지연
- 컨텍스트 스위칭(Context Switching) 비용 발생
- OS가 CPU를 한 스레드에서 다른 스레드로 전환할 때 발생
- 스레드 생성이 무제한 → 리소스 한계 초과 시 서버 다운 위험
스레드 풀(Thread Pool)로 해결하기
요청마다 스레드를 만들 때 생기는 문제를 해결하기 위해 스레드 풀을 사용할 수 있다.
스레드 풀은 필요한 스레드를 보관하고 관리하는 곳이다.
스레드 풀에 생성 가능한 스레드의 최대치를 관리한다. 예를 들어 톰캣은 최대 200개가 기본 설정이며, 변경 가능하다.
동작 방식
- 필요한 스레드를 미리 생성해 스레드 풀에 보관한다.
- 요청이 들어오면 풀에서 스레드를 꺼내 사용한다.
- 사용 완료 후 다시 풀에 반납한다.
장점
- 스레드 생성/소멸 비용(CPU) 절감 → 응답 속도 향상
- 최대 스레드 수 제한으로 요청 폭주에도 안정적 처리 가능
단점
- 스레드 풀이 너무 클 경우 → 메모리 낭비
실무 팁
- WAS 튜닝 핵심 : 최대 스레드(max thread) 수
- 너무 낮으면 → 동시 요청 많을 때 지연 발생
- 너무 높으면 → CPU/메모리 한계 초과, 서버 다운
- 장애 대응
- 클라우드 환경 : 서버 수 늘리고 튜닝
- 온프레미스 : 최대 스레드 수 최적화 필요
적정 스레드 수
- 애플리케이션 로직, CPU/메모리, IO 리소스 상황에 따라 다름 → 실제 서비스와 유사한 성능 테스트 필수
- 성능 테스트 도구 : Apache AB, JMeter, nGrinder
WAS와 멀티 스레드
멀티 스레드는 복잡하고 신경써야 하는 부분이 많은데,
WAS가 있기 때문에 개발자는 멀티 스레드 관련 코드를 신경쓰지 않아도 된다.
- WAS가 멀티 스레드 처리를 담당 → 개발자는 싱글 스레드처럼 코딩 가능
- 단, 싱글톤 객체(서블릿, 스프링 빈) 사용 시 주의
- 공유 변수/멤버 변수는 동시 접근 문제 발생 가능 → 스레드 안전 필요
추가 개념
- 스레드 안전(Thread Safety) : 여러 스레드가 동시에 접근해도 데이터 일관성 유지
- 동시성 문제(Concurrency Issue) : race condition, deadlock
- 자바 스레드 풀 활용 예시 : ExecutorService, ThreadPoolExecutor
'TIL' 카테고리의 다른 글
| [CS] 디자인 패턴 종류와 간단한 개념 정리 (0) | 2025.10.22 |
|---|---|
| [STUDY] '향로' 와 함께하는 추석 완강 챌린지 회고 🌕🏃🏻 (0) | 2025.10.14 |
| 캐싱(caching)이란? / Redis(Remote Dictionary Server)란? / 데이터 캐싱 전략 정리 (0) | 2025.04.17 |
| QueryDSL 사용하기(with JPA) (0) | 2025.03.22 |
| [AWS] 🪣S3 시작하기 - bucket 만들기, bucket policy 설정, 정적 웹 사이트 호스팅, EC2에 S3 권한 주기 (0) | 2025.03.21 |