상세 컨텐츠

본문 제목

[Spring/Java] Spring Boot 구동 원리 - Dispatcher Servlet

server

by 셉인 2024. 4. 14. 23:30

본문

728x90

[Spring/Java] Spring Boot 구동 원리 - Dispatcher Servlet 

스프링 부트(Spring Boot) 동작 구조

1) 자동 설정 (Auto-configuration): 스프링부트는 @SpringBootApplication 어노테이션이 포함된 메인 클래스를 실행할 때, 애플리케이션을 위한 자동 설정을 제공한다. 이는 @EnableAutoConfiguration 어노테이션을 통해 이루어지며, 스프링부트는 애플리케이션의 클래스패스, 기타 빈, 다양한 프로퍼티 설정들을 검사하여 필요한 빈들을 자동으로 설정한다. 예를 들어, 만약 클래스패스에 스프링 웹 MVC가 있다면, 자동으로 웹 애플리케이션을 구성하며, 내장된 톰캣 같은 서버를 실행할 준비를 한다.

 

2) 내장 서버 (Embedded Server): 스프링부트는 내장 톰캣, 제티, 언더토우 같은 웹 서버를 자동으로 설정하고 실행한다. 이로 인해 별도의 웹 서버를 설치하고 구성할 필요 없이 애플리케이션을 빠르게 실행하고 배포할 수 있다.

 

3) 의존성 관리 (Dependency Management): 스프링부트는 의존성 관리를 위해 스프링부트 스타터를 사용한다. 스타터는 개발자가 필요한 스프링 및 관련 기술의 의존성을 쉽게 관리할 수 있도록 미리 정의된 의존성 모음이다. 예를 들어, spring-boot-starter-web은 웹 애플리케이션 개발에 필요한 모든 의존성을 제공한다. (start.spring.io) 이를 사용하면, 기본적으로 내장 톰캣(Tomcat)을 사용하는 스프링 MVC 구조를 기반으로 동작한다. (톰캣 -> 서블릿 컨테이너 / WAS(Web Application Server) 역할 담당)

 

4) 스프링 애플리케이션 컨텍스트 (Spring Application Context): 스프링부트 애플리케이션은 스프링의 ApplicationContext를 생성하고 초기화한다. 이 컨텍스트는 애플리케이션의 모든 빈 정의와 구성을 포함하며, 빈의 생명주기를 관리한다.

 

5) 외부 설정 (Externalized Configuration): 스프링부트는 application.properties 또는 application.yml 파일을 통해 외부에서 설정을 쉽게 할 수 있게 해준다. 이 설정들을 통해 데이터베이스 연결, 보안 구성 등 다양한 애플리케이션 구성을 커스텀할 수 있다.

 

서블릿(Servlet)

웹 서버에서 실행되는 프로그램으로, 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 돌려주는 역할을 한다. 서블릿은 주로 HTTP 프로토콜을 사용하여 웹 페이지를 동적으로 생성하는데 사용된다.

서블릿의 특징

1) 플랫폼 독립성: 자바로 작성되기 때문에, 서블릿은 다양한 플랫폼에서 실행될 수 있다. 자바가 실행될 수 있는 어떤 서버에서도 서블릿을 호스팅할 수 있다.

 

2) 보안: 자바의 보안 관리 기능을 이용하여 보다 안전한 방식으로 웹 애플리케이션을 개발할 수 있다

 

3) 성능: 서블릿은 한 번 메모리에 로드되면 여러 요청에 대해 재사용될 수 있기 때문에 CGI(Common Gateway Interface) 프로그램보다 처리 성능이 좋다.

 

4) 상태 관리: HTTP는 상태를 유지하지 않는 프로토콜이지만, 서블릿은 쿠키, 세션 등의 메커니즘을 사용하여 사용자 상태 정보를 관리할 수 있다.

 

5) 멀티스레딩: 서블릿은 멀티스레드를 지원하여, 하나의 서블릿이 여러 클라이언트의 요청을 동시에 처리할 수 있다.

 

DispatcherServlet?

Spring MVC 웹 프레임워크의 중심에 위치하며, 웹 애플리케이션에서 들어오는 모든 요청을 처리하는 역할을 한다. Spring Boot에서는 이 과정을 자동화하여 개발자가 복잡한 설정을 직접 관리할 필요 없이 웹 애플리케이션을 손쉽게 구축할 수 있게 한다. 클라이언트의 요청을 받아서 서블릿 컨테이너에서 관리되는 DispatcherServlet이 요청을 처리하고 반환한다.

 

Spring Boot의 자동 구성

   - Spring BootDispatcherServlet을 자동으로 등록하고, 관련 설정(예: 웹 MVC, 메시지 컨버터)을 구성한다.
   - DispatcherServletAutoConfiguration클래스는 DispatcherServlet을 어플리케이션 컨텍스트에 등록하고 기본 서블릿 매핑(`/`)을 설정한다.


DispatcherServlet의 요청 처리 과정

1. 요청 수신
   - 모든 HTTP 요청은 DispatcherServlet에 의해 처음 받아들여진다.

2. 핸들러 매핑(Handler Mapping)
   - 요청 URL을 분석하여 해당하는 핸들러(컨트롤러 내 메소드)를 찾는다. 이는 HandlerMapping 구현체를 통해 이루어진다.

3. 핸들러 실행(Handler Execution)
   - 매핑된 핸들러가 호출되고, 비즈니스 로직이 실행된다. 이 과정에서 필요한 데이터는 모델 객체에 저장될 수 있다.

4. 뷰 해석(View Resolution)
   - 핸들러에서 반환된 뷰 이름을 기반으로, ViewResolver를 사용하여 실제 뷰 객체를 해석한다.

5. 뷰 렌더링(View Rendering)
   - 해석된 뷰를 사용하여 최종적으로 사용자에게 보여줄 HTML 페이지를 생성한다.

6. 응답 반환
   - 생성된 페이지를 HTTP 응답 본문에 실어 사용자에게 전송한다.

728x90

관련글 더보기

댓글 영역