Spring MVC 기반 애플리케이션에서 서블릿 컨테이너를 사용하는 ==스레드 관리는 매우 중요하다==
이는 Java 웹 애플리케이션이 동기적인 방식으로 HTTP 요청을 처리한다.
Servlet이란?
Java 기반의 웹 애플리케이션을 개발하기 위한 기술 중 하나로, 서버 측에서 클라이언트의 요청을 처리하고, 그에 대한 응답을 생성하는 Java 프로그램이다.
- Servlet은 독립적으로 만들어 지지 않고 서블릿 컨테이너(Tomcat, Jetty 등)에서 실행된다.
서블릿 컨테이너는 HTTP 요청 처리, 서블릿 관리, 스레드 관리 등 웹 애플리케이션 서버의 다양한 기능을 수행한다.
- 서블릿 컨테이너는 서블릿의 생명주기를 관리하고 HTTP 요청을 처리하는 환경을 제공한다.
정리 하면 Servlet이란 ==**HTTP 요청을 처리하는 핵심 컴포넌트이다.==
서블릿 컨테이너 동작 방식 설명
- 먼저 Spring boot는 내장 Tomcat 서버를 가지고 있다.
- 이를 통해 별도의 톰캣 설치나 설정 없이 애플리케이션을 빠르게 구동할 수 있다.
- Spring Boot 애플리케이션을 빌드하면 내장 톰캣 서버가 포함되어 실행 가능한 JAR 파일로 패키징된다.

예를 들어서 서블릿 컨테이너에서 HttpServlet을 생성하고, 이를 상속한 HelloServlet을 통해 비즈니스 로직을 처리 한다.
- 서블릿 컨테이너는 애플리케이션이 시작될 때
HelloServlet
과 같은 서블릿 인스턴스를 한 번만 생성한다.
- 이 서블릿 인스턴스는 여러 요청에 대해 재사용한다.
내장 톰켓 서버는 요청에 따라 스레드 풀에서 Thread를 할당 해주는데 여기서 할당 받은 Thread는 서블릿 컨테이너에서 생성된 HelloServlet의 인스턴스에서 작업한다.
- 따라서 스레드들이 동시에 하나의 서블릿 인스턴스에서 작업을 수행하므로, 공유 자원(예: 인스턴스 변수)을 사용할 때는 동시성 문제가 발생할 수 있다.