728x90
/* 서블릿 컨테이너와 스프링 컨테이너 WEB 요청이 들어올 때*/
- 서블릿 컨테이너와 디스패처 서블릿 (DispatcherServlet)
- HTTP 요청이 들어오면 서블릿 컨테이너(예: Tomcat)가 이를 받아들이고, 스프링 MVC의 엔트리 포인트인 DispatcherServlet으로 요청을 전달합니다. DispatcherServlet은 스프링의 핵심 컴포넌트로, 모든 요청을 받고 필요한 처리를 이어가는 역할을 합니다.
- 스프링 컨테이너와 빈 관리
- DispatcherServlet이 요청을 받으면, 요청을 처리할 **핸들러 매핑 (Handler Mapping)**을 찾아 알맞은 컨트롤러 (Controller) 빈을 결정합니다. 이 과정에서 스프링 컨테이너에 미리 정의된 빈 (Bean)들이 활용됩니다. 빈은 스프링 애플리케이션 컨텍스트(ApplicationContext)에서 관리되며, 의존성 주입을 통해 필요한 객체들이 자동으로 연결됩니다.
- 컨트롤러 호출 및 서비스 로직 처리
- 핸들러 매핑을 통해 결정된 컨트롤러 메서드가 호출되고, 비즈니스 로직을 처리하는 서비스 계층(Service Layer)을 호출하여 요청에 맞는 작업을 수행합니다. 여기서 데이터베이스 조회나 비즈니스 로직이 실행됩니다.
- 뷰 리졸버와 응답 생성
- 컨트롤러에서 요청 처리가 완료되면, 뷰 리졸버(View Resolver)가 동작하여 어떤 뷰(View)로 응답할지 결정합니다. 예를 들어, JSP 또는 Thymeleaf와 같은 뷰 템플릿을 이용해 사용자에게 보여줄 HTML 페이지를 렌더링하거나, JSON 형태의 응답을 반환할 수 있습니다.
- 응답 반환
- 마지막으로 DispatcherServlet은 생성된 응답을 서블릿 컨테이너로 전달하고, 서블릿 컨테이너는 이를 HTTP 응답으로 클라이언트에게 반환합니다.
/* WAS*/
WAS는 웹 애플리케이션을 실행하기 위한 서버 소프트웨어입니다. WAS는 단순한 HTTP 서버(정적 파일 제공에 주로 사용되는 웹 서버)와는 달리, 동적인 서버 측 애플리케이션을 실행하고 요청을 처리하는 데 중점을 둡니다. 주로 다음과 같은 기능을 제공합니다.
- 서블릿 관리: WAS는 서블릿을 관리하고, 생명주기를 제어합니다. 이를 통해 서블릿을 실행하고 필요한 메모리와 자원을 할당합니다.
- 웹 컨테이너: WAS 내부에는 웹 컨테이너가 포함되어 있어, 서블릿과 JSP(Java Server Pages)를 실행할 수 있습니다.
- 세션 관리: WAS는 HTTP의 비상태적 특성을 보완하기 위해 세션을 관리하여 로그인 정보나 사용자 상태를 유지합니다.
- 트랜잭션 관리: 데이터베이스와 연동되는 애플리케이션에서 트랜잭션을 관리하여 데이터의 일관성을 유지합니다.
/* WAS와 서블릿과의 관계*/
서블릿은 자바 웹 애플리케이션에서 요청을 받아 비즈니스 로직을 수행하고, 결과를 클라이언트에게 응답하는 서버 측 프로그램입니다. 서블릿은 WAS 안에서 실행되고, WAS가 서블릿의 모든 실행 환경을 제공합니다.
서블릿과 WAS의 관계를 단계별로 살펴보면 다음과 같습니다:
- 요청 수신과 서블릿 매핑
클라이언트가 HTTP 요청을 보내면 WAS는 이를 수신하고 요청 URL에 따라 적절한 서블릿으로 매핑합니다. 이 과정에서 URL 패턴 (@WebServlet 어노테이션 사용)을 통해 어떤 서블릿이 요청을 처리할지 결정됩니다. - 서블릿 인스턴스 생성과 생명주기 관리
WAS는 필요한 경우 서블릿 인스턴스를 생성하고, 서블릿의 생명주기를 관리합니다. WAS는 서블릿이 처음 호출될 때 초기화 메서드인 init()을 호출하고, 이후 요청이 들어올 때마다 service() 메서드를 호출하여 클라이언트의 요청을 처리하도록 합니다. 더 이상 서블릿이 필요하지 않으면 destroy() 메서드를 호출하여 자원을 해제합니다. - 서비스 메서드를 통한 요청 처리
WAS는 서블릿의 service() 메서드를 호출하여 요청을 처리합니다. service() 메서드는 요청의 HTTP 메서드(GET, POST 등)에 따라 doGet(), doPost() 등의 메서드를 실행하여 비즈니스 로직을 수행하고 응답을 생성합니다. - 응답 반환
서블릿이 요청을 처리한 후 WAS는 생성된 응답을 클라이언트에게 반환합니다. 이 과정에서 HTTP 상태 코드, 헤더, 본문 등을 포함한 최종 응답이 WAS를 통해 클라이언트에게 전달됩니다.
/* 결론*/
WAS와 DispatcherServlet, 스프링 컨테이너의 요청 처리 과정
- WAS가 요청을 받고 DispatcherServlet의 service() 메서드를 호출
클라이언트 요청이 WAS에 들어오면, WAS는 해당 요청을 처리하기 위해 DispatcherServlet의 service() 메서드를 호출합니다. DispatcherServlet은 스프링 MVC의 중앙 처리 엔진으로, 요청을 받은 후 이를 스프링 컨테이너와 상호작용하여 처리하게 됩니다. - DispatcherServlet이 요청을 컨트롤러에 매핑
DispatcherServlet은 스프링 컨테이너에서 미리 설정된 핸들러 매핑 정보를 사용하여, 요청을 처리할 컨트롤러 빈을 찾습니다. 요청 URL, HTTP 메서드 등과 같은 정보를 기준으로, 알맞은 컨트롤러 메서드를 매핑합니다. - 컨트롤러 빈을 통해 비즈니스 로직 수행
DispatcherServlet은 요청을 처리할 컨트롤러 메서드를 호출하여 비즈니스 로직을 수행합니다. 이 과정에서 컨트롤러는 필요한 경우 서비스 빈을 호출하여 복잡한 비즈니스 로직을 수행하고, 데이터베이스와 상호작용하는 등의 작업을 진행합니다. 이 모든 빈(컨트롤러, 서비스 등)은 스프링 컨테이너에 의해 관리됩니다. - 처리 결과를 바탕으로 응답 생성
컨트롤러가 처리 결과를 반환하면, DispatcherServlet은 이를 기반으로 뷰(View)를 렌더링하거나 JSON 등의 응답을 생성합니다. 이 과정에서 **뷰 리졸버(View Resolver)**를 통해 알맞은 응답 형식을 결정하고 렌더링합니다. - WAS가 최종 응답을 클라이언트로 반환
최종적으로 DispatcherServlet이 응답을 완료하면, WAS는 이 응답을 받아 클라이언트에게 반환합니다.
728x90
'백엔드' 카테고리의 다른 글
[Spring Boot] 순환 참조 (Circular Reference) (0) | 2024.04.17 |
---|---|
[Java] 리액티브 프로그래밍 - RxJava (0) | 2024.04.08 |
[Docker] 도커란 무엇인가 (0) | 2024.03.25 |
[Spring Boot] RESTAPI - 예외처리 (1) | 2024.01.11 |
[Spring Boot] JsonIgnore, JsonIgnoreProperty, JsonFilter (2) | 2024.01.04 |