스프링 부트의 동작방식

Jeong Gyejin·2023년 2월 23일
0

스프링 프레임워크

목록 보기
3/17

스프링부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣을 사용하는 스프링 MVC구조를 기반으로 동작합니다.

스프링 부트의 동작 구조

1.서블릿 컨테이너

  • 서블릿은 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술로 이를 관리하는 곳이 서블릿 컨테이너입니다.
  • 서블릿 컨테이너는 서블릿 인스턴스를 생성하고 관리하는 역할을 수행하는 주체로서 톰캣은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너 입니다.

서블릿 컨테이너의 특징

  • 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리합니다.
  • 서블릿 객체는 싱글톤 패턴으로 관리됩니다.
  • 멀티 스레딩을 지원합니다.

2. DispatcherServlet

스프링에서는 DispatcherServlet이 서블릿의 역할을 수행합니다.

  • 일반적으로 스프링은 톰캣을 임베드해 사용합니다.

  • 서블릿 컨테이너와 DispatcherServlet은 자동으로 설정된 web.xml의 설정값을 공유합니다.

    DispatcherServlet 동작원리

  • HttpServletRequest 요청이 들어오면 DispatcherServlet은 핸들러 매핑을 통해 URI에 매핑된 컨트롤러를 탐색합니다.
  • 핸들러 어댑터를 이용하여 컨트롤러를 호출합니다.
  • 핸들러 어댑터에 컨트롤러의 응답이 돌아오게 되면 ModelAndView로 응답을 가공해 반환합니다.
  • 뷰 형식으로 리턴하는 컨틀롤러를 사용할 경우에는 뷰 리졸버를 통해 뷰를 받아서 리턴합니다.

3. 핸들러 매핑

요청 정보를 기준으로 어떤 컨트롤러를 사용할지 선정하는 인터페이스입니다. 핸들러 매핑 인터페이스는 여러 구현체를 가집니다.

핸들러 매핑의 대표적인 구현체

  • BeanNameUrlHandlerMapping
    • 빈 이름을 URL로 사용하는 매핑 전략입니다.
    • 빈을 정의할 때 슬래시가 들어가면 매핑 대상이 됩니다.
    • Ex) @Bean("/hello")
  • ControllerClassNameHanlerMapping
    • URL과 일치하는 클래스 이름응ㄹ 갖는 빈을 컨트롤러로 사용하는 전략입니다.
    • 이름 중 Controller를 제외하고 앞부분에 작성된 suffix를 소문자로 매핑합니다.
  • SimpleUrlHandlerMapping
    • URL 패턴에 매핑된 컨트롤러를 사용하는 전략입니다.
  • DefaultAnnotationHandlerMapping
    • 어노테이션으로 URL과 컨트롤러를 매핑하는 방법입니다.

4. 뷰 리졸버

뷰의 랜더링 역할을 담당하는 뷰 객체를 반환합니다.

만약 뷰가 없는 REST 형식의 @ResponseBody를 사용하게 된다면 뷰리졸버를 호출하지 않고 MessageConverter를 거쳐 JSON 형식으로 변환하여 응답합니다.

profile
항상 더 나은 개발자가 되기 위해서 끊임없이 공부하고 학습하면서 성장하는 사람이 되겠습니다.

0개의 댓글