- 발표는 서블릿과 서블릿 컨테이너가 HTTP 요청과 응답 과정에서 어떻게 협력하는지 이해하고, 향후 코드 유추 능력을 기르는 것을 목표로 합니다. 🎯
- 서블릿은 웹 서버 내에서 실행되며 HTTP 요청/응답을 처리하는 작은 자바 프로그램으로,
init,service,destroy세 가지 핵심 메서드를 가집니다. 💻 - 서블릿 컨테이너는 서블릿 엔진으로 불리며, 서블릿의 생명주기(init, service, destroy)를 관리하고 실행에 필요한 서비스를 제공하는 주체입니다. ⚙️
- 서블릿 컨테이너는 영화 감독에 비유될 수 있으며, 서블릿(배우)의
init(메모리 로드),service(요청 처리),destroy(메모리 해제) 생명주기를 관리합니다. 🎬 - 개발자가 직접 생성하지 않은
request객체와ResponseEntity.ok()같은 간단한 코드가 어떻게 HTTP 요청을 처리하고 200 OK 응답을 생성하는지 내부 메커니즘에 대한 질문을 던집니다. ❓ - HTTP 요청이 들어오면 서블릿 컨테이너가 이를 인지하고, 스프링 부트에서는 기본적으로 모든 요청을
DispatcherServlet으로 전달하며, 정적 리소스 등은 다른 서블릿이 처리합니다. 🌐 - 톰캣의
Mapper는host,Context(웹 애플리케이션),Context버전, 그리고Context내의 서블릿 순서로 요청 URI에 맞는 서블릿을 찾으며, 정확한 매칭, 경로 접두사, 확장자, 기본 서블릿 순으로 매핑 규칙을 적용합니다. 🗺️ - 톰캣은
Coyote라는 네트워크 커넥터가 HTTP 요청을 받아들이고,Catalina라는 서블릿 엔진이 해당 요청을 처리할Context(웹 애플리케이션)와 그 안의 적절한 서블릿을 찾아 요청을 전달하는 구조로 되어 있습니다. 🐾 Coyote가 최초 HTTP 요청을 받아request객체를 생성하고,Catalina는 이를 서블릿이 사용하기 편리하도록HttpServletRequest인터페이스의 구현체로 래핑하여 제공합니다. 🍪- 요청이 들어오면
Coyote가request를 생성하고,Catalina는 이request를 기반으로 서블릿을 찾은 후, 실제 서블릿의service메서드 호출 시Catalina가 래핑한HttpServletRequest객체를 전달합니다. ➡️ - 서블릿의
service메서드에 전달된 빈response객체는 Spring MVC를 통해 내용이 채워지고,HttpServletResponse의flushBuffer호출을 거쳐Catalina의OutputBuffer가Coyote의response를 통해 최종적으로 네트워크 응답을 커밋하고 전송합니다. 📤 - 최종적으로, HTTP 요청은
Coyote에서request객체로 시작하여Catalina가 서블릿을 찾아service메서드를 호출하고,response객체에 담긴 응답은flushBuffer와OutputBuffer를 거쳐Coyote를 통해 클라이언트로 전송됩니다. 🔄





