[스프링 부트] 5. Spring MVC

lhs's avatar
Nov 17, 2024
[스프링 부트] 5. Spring MVC
notion image

1. 서버 시작

  • main 메서드에서 SpringApplication.run() 호출
  • 스프링 애플리케이션을 시작하면서 ApplicationContext를 초기화하고 애플리케이션 설정을 처리
  • ApplicationContext는 IOC 컨테이너로, @SpringBootApplication 어노테이션에 포함된 @ComponentScan이 클래스의 패키지와 하위 패키지를 스캔하여 컴포넌트를 찾아 빈을 등록
  • 빈을 등록하면서 빈 인스턴스를 생성하고 의존성을 주입
  • 그 후 WebApplicationContext에서 DispatcherServlet을 초기화하고 등록을 마치면 HTTP 요청 처리를 위한 준비 완료

2. 요청 처리

1. 클라이언트에서 톰캣 서버로 요청 전달

  • 사용자가 웹 브라우저를 통해 요청을 보낸다.
  • 톰캣 서버는 클라이언트로부터 받은 HTTP 요청을 HttpServletRequest 객체로 변환하고, 응답을 위한 HttpServletResponse 객체를 준비한다.

2. DispatcherServlet으로 요청 전달

  • 톰캣은 web.xml 또는 SpringBoot 설정에 정의된 서블릿 매핑을 참조하여, HttpServletRequestHttpServletResponse 객체를 DispatcherServlet으로 전달한다.

3. HandlerMapping을 통한 핸들러 검색

  • DispatcherServlet은 전달받은 HttpServletRequest 객체를 사용하여 HandlerMapping을 통해 적합한 핸들러를 찾는다.
  • 이 과정에서 요청 URL, HTTP 메서드(GET, POST 등), 요청 매핑 정보 등을 기준으로 핸들러가 결정된다.
  • 여기서 말하는 핸들러는 컨트롤러의 메서드를 의미한다.

4. HandlerAdapter를 통한 핸들러 호출

  • DispatcherServlet은 요청에 해당하는 핸들러를 찾은 후, HandlerAdapter를 사용하여 해당 메서드를 호출한다.
  • 이때 HandlerAdapterHttpServletRequest에 있는 요청 파라미터를 컨트롤러 메서드의 파라미터에 자동으로 바인딩하는 역할을 한다.

5. 서비스(비즈니스 로직) 처리

  • 컨트롤러에서 호출한 @Service(비즈니스 로직)는 @Repository를 호출하여 데이터베이스 작업을 처리하고, 필요한 경우 DTO 객체를 사용하여 데이터를 전달한다.

6. Repository 호출

  • 서비스는 Repository 객체를 호출하여 데이터베이스에서 필요한 데이터를 조회하거나 수정한다.
  • RepositoryJdbcTemplate, JPA, MyBatis 등을 사용하여 SQL 쿼리를 실행하거나 엔터티 객체를 데이터베이스와 매핑하여 데이터 접근을 처리한다.

7. DTO 객체 생성

  • Repository에서 반환된 데이터는 DTO 객체로 매핑되거나, 서비스에서 필요한 형태로 가공되어 DTO 객체에 담긴다.

8. 컨트롤러로 결과 반환

  • 서비스에서 처리한 결과나 DTO 객체를 컨트롤러로 반환한다.
  • 컨트롤러는 받은 데이터를 Model 객체를 통해 뷰로 전달한다.

9. ViewResolver를 통한 뷰 선택 및 생성

  • DispatcherServlet은 컨트롤러에서 반환된 ModelAndView 객체 또는 뷰 이름(String)을 기반으로 ViewResolver를 호출한다.
  • ViewResolver는 접두사(경로)와 접미사(템플릿 확장자)를 결합하여 실제 뷰 파일을 선택한다.
  • 선택된 뷰 파일은 해당 템플릿 엔진(JSP, Mustache 등)에 의해 렌더링되어 HTML을 생성하고, 그 결과를 DispatcherServlet에 반환한다.

10. 톰캣 서버로 응답 반환

  • 반환된 HTMLHttpServletResponse 객체에 내용을 작성하여 톰캣 서버로 응답을 반환한다.

11. 클라이언트에게 응답

  • 최종적으로 톰캣은 생성된 응답을 클라이언트에 전달하여 웹 페이지가 브라우저에 표시된다.
Share article

LHS's Study Space