[Spring] Web Application (3)

이연우·2025년 7월 22일

TIL

목록 보기
17/100

🧵 Thread란?

  • 하나의 작업 흐름으로, 한 번에 한 줄씩 코드를 실행함
  • Java에서 main() 실행 시, main Thread가 실행됨
  • 동시 처리를 위해서는 추가 Thread가 필요

🚀 Servlet과 Thread의 관계

  • 클라이언트가 HTTP 요청을 보내면 →
    WAS가 Thread를 생성해 Servlet 객체를 호출

📌 Servlet 객체 호출 흐름
: 클라이언트 요청 → WAS → Thread 할당 → Servlet 호출 → 응답 반환

🔁 Single Thread 처리 방식 (단일 처리 방식)

  • 하나의 Thread가 요청을 순서대로 처리
  1. 클라이언트 요청 및 TCP/IP 연결
  2. Thread 할당 후 Servlet 호출
  3. 응답 후 Thread 반환

❗ 문제점:

  • 첫 요청이 지연되면 다른 요청도 모두 대기
  • 결과적으로 Timeout 오류 발생 가능성 ↑

🧶 Multi Thread란?

  • 하나의 프로세스 내에서 여러 개의 작업 흐름(Thread)을 동시에 수행할 수 있게 해주는 기술
  • 각 쓰레드는 독립적으로 실행되지만, 동일한 메모리 공간을 공유하며 협력

🧩 Multi Thread 처리 방식

  • WAS는 동시 요청에 대한 처리를 위해 Multi Thread를 지원
  1. 첫 번째 요청의 작업을 Single Thread가 수행 중
  2. 두 번째, 세 번째 요청이 들어오고 연결을 완료
  3. Thread를 사용하기 위해 작업이 끝날 때까지 대기
  4. 요청이 모두 사라질 때까지 (대기 → 작업 수행 → 스레드 반환)작업을 반복

> Multi Thread로 동시 요청에 대한 처리를 하는 방법
1. 요청마다 새로운 Thread 생성
장점:

  • 동시 요청 처리 가능
  • 요청 하나가 지연되어도 다른 요청에 영향 없음

단점:

  • Thread 생성 비용 큼
  • 무제한 생성 → 리소스 부족 → 서버 다운 위험
  • Context Switching 비용 발생

🧠 Context Switching

  • CPU가 여러 작업을 교대로 수행하면서 작업 상태를 저장하고 불러오는 과정

2. Thread Pool 방식

  • 미리 만들어진 Thread를 요청마다 빌려서 사용 후 반납

장점:

  • Thread 생성/종료 비용 절감
  • 응답 속도 ↑
  • 최대 Thread 수 제한 → 서버 과부하 방지

단점:

  • Thread가 모두 사용 중이면 요청은 대기 또는 거절
  • Thread 수가 너무 많으면 → 메모리, CPU 부족

📌 Tomcat 기본 설정: 최대 200개 Thread → 성능 테스트 통해 적정 수 조정 필요

0개의 댓글