언어 및 도구들 공부/Spring

Spring의 dispatcherServlet?

Dr.Mlem 2024. 12. 18. 11:58
Q1.

dispatcherServlet이라는 것에 대해서는 따로 내가 건드린 적이 없는데, 저것은 Spring에서 무엇을 하는 것이며, 코드를 작성하는 데에 있어서 별도로 설정해줘야 하는 것이 있는 것인가?

 

 

 

A1.

ChatGPT의 말:

좋은 질문입니다! DispatcherServlet은 Spring MVC의 핵심 구성 요소로, 클라이언트의 HTTP 요청을 처리하는 데 중요한 역할을 합니다. 아래에서 DispatcherServlet이 하는 일, 동작 방식, 그리고 별도로 설정이 필요한지에 대해 설명드리겠습니다.


1. DispatcherServlet이란 무엇인가?

DispatcherServlet은 Spring MVC의 프론트 컨트롤러(Front Controller)로, 모든 클라이언트 요청을 중앙에서 처리하는 역할을 합니다. 요청이 들어오면 이 요청을 적절한 핸들러(Controller 메서드)로 전달하고, 작업 결과를 View 또는 HTTP 응답으로 변환하여 클라이언트에 반환합니다.

Spring MVC의 기본 흐름은 다음과 같습니다:

  1. 클라이언트가 요청을 보냅니다 (예: http://localhost:8080/example).
  2. DispatcherServlet이 요청을 가로챕니다.
  3. 요청 URL과 매핑된 컨트롤러 메서드를 찾고 실행합니다.
  4. 컨트롤러 메서드가 처리한 결과(View 이름 또는 데이터)를 DispatcherServlet에 반환합니다.
  5. DispatcherServlet은 결과를 ViewResolver나 HttpMessageConverter를 통해 변환하여 클라이언트에 응답합니다.

2. DispatcherServlet의 역할 요약

  • 요청을 받고 적절한 컨트롤러로 라우팅.
  • 요청 파라미터를 바인딩하여 메서드 파라미터로 전달.
  • 예외 처리 및 전역 핸들링 지원.
  • 응답 데이터를 JSON, XML 또는 View로 변환.

3. 내가 DispatcherServlet을 따로 설정하지 않았는데, 어떻게 동작하나요?

Spring Boot를 사용하는 경우, DispatcherServlet은 자동으로 설정됩니다. Spring Boot Starter Web을 프로젝트에 추가하면 다음 작업이 자동으로 이루어집니다:

  1. Spring Boot가 기본적으로 DispatcherServlet을 설정합니다.
  2. URL 패턴이 /*로 설정되어 모든 요청을 DispatcherServlet이 처리합니다.
  3. 추가적인 설정 없이도 컨트롤러 메서드와 요청이 매핑되고 동작합니다.

DispatcherServlet의 자동 설정 예시

Spring Boot에서는 @SpringBootApplication 애노테이션이 포함된 클래스에서 DispatcherServlet을 자동으로 등록합니다. 여러분이 직접 설정하지 않아도 Spring Boot가 내부적으로 DispatcherServlet을 Bean으로 생성하고 필요한 설정을 초기화합니다.


4. DispatcherServlet을 직접 설정해야 할 경우

Spring Boot 없이 Spring Framework만 사용하는 경우, DispatcherServlet을 명시적으로 설정해야 합니다. 이는 XML 설정 또는 Java 기반 설정을 통해 이루어집니다.

Java 기반 설정

 
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public DispatcherServlet dispatcherServlet() {
        return new DispatcherServlet();
    }

    @Bean
    public ServletRegistrationBean<DispatcherServlet> dispatcherServletRegistration() {
        ServletRegistrationBean<DispatcherServlet> registration = 
            new ServletRegistrationBean<>(dispatcherServlet(), "/");
        registration.setLoadOnStartup(1);
        return registration;
    }
}​

XML 기반 설정

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

5. 별도로 설정해야 하는 경우

Spring Boot를 사용할 때는 대부분 DispatcherServlet의 기본 설정을 수정할 필요가 없습니다. 그러나 다음과 같은 경우에는 추가 설정이 필요할 수 있습니다:

(1) DispatcherServlet의 URL 패턴 변경

기본적으로 Spring Boot에서는 DispatcherServlet이 모든 요청(/*)을 처리합니다. 특정 경로에서만 작동하게 하려면 application.properties에서 설정을 변경할 수 있습니다.

//application.properties
spring.mvc.servlet.path=/api

위 설정은 /api/*로 시작하는 요청만 DispatcherServlet이 처리하도록 만듭니다.

(2) 요청/응답 처리 로직 확장

  • 전역 예외 처리 (@ControllerAdvice).
  • 전처리/후처리 로직 추가 (Interceptor).
  • DispatcherServlet의 초기화 파라미터 변경.

6. DispatcherServlet의 동작 흐름

Spring MVC의 전체 동작 흐름에서 DispatcherServlet이 수행하는 단계를 이해하면 더 명확합니다:

  1. 클라이언트 요청 수신: DispatcherServlet이 HTTP 요청을 받습니다.
  2. HandlerMapping 호출: 요청 URL과 매핑된 핸들러(Controller 메서드)를 찾습니다.
  3. HandlerAdapter 호출: 핸들러를 실행할 적절한 어댑터를 선택합니다.
  4. Controller 메서드 실행: 요청을 처리하고 결과(Model, View 또는 JSON)를 반환합니다.
  5. ViewResolver 호출: View 이름을 실제 View로 변환합니다.
  6. 응답 반환: 클라이언트에 최종 결과를 전달합니다.

결론

  • DispatcherServlet은 Spring MVC에서 요청-응답 처리를 관리하는 핵심 역할을 합니다.
  • Spring Boot를 사용하는 경우, 별도로 설정하지 않아도 자동으로 구성되므로 따로 신경 쓸 필요가 없습니다.
  • 특별한 요구사항(예: URL 패턴 변경, 초기화 옵션 수정)이 있다면 설정 파일이나 Java 설정을 통해 수정할 수 있습니다.

추가적인 궁금증이 있거나 예시가 필요하시면 언제든 말씀해주세요! 😊

 

 

 

일단 그런게 있구나~ 하는 정도로만...