
1. 서버 시작
main메서드에서SpringApplication.run()호출
- 스프링 애플리케이션을 시작하면서
ApplicationContext를 초기화하고 애플리케이션 설정을 처리
ApplicationContext는 IOC 컨테이너로,@SpringBootApplication어노테이션에 포함된@ComponentScan이 클래스의 패키지와 하위 패키지를 스캔하여 컴포넌트를 찾아 빈을 등록
- 빈을 등록하면서 빈 인스턴스를 생성하고 의존성을 주입
- 그 후
WebApplicationContext에서DispatcherServlet을 초기화하고 등록을 마치면 HTTP 요청 처리를 위한 준비 완료
2. 요청 처리
1. 클라이언트에서 톰캣 서버로 요청 전달
- 사용자가 웹 브라우저를 통해 요청을 보낸다.
- 톰캣 서버는 클라이언트로부터 받은 HTTP 요청을
HttpServletRequest객체로 변환하고, 응답을 위한HttpServletResponse객체를 준비한다.
2. DispatcherServlet으로 요청 전달
- 톰캣은
web.xml또는SpringBoot설정에 정의된 서블릿 매핑을 참조하여,HttpServletRequest와HttpServletResponse객체를DispatcherServlet으로 전달한다.
3. HandlerMapping을 통한 핸들러 검색
DispatcherServlet은 전달받은HttpServletRequest객체를 사용하여HandlerMapping을 통해 적합한 핸들러를 찾는다.
- 이 과정에서 요청 URL, HTTP 메서드(GET, POST 등), 요청 매핑 정보 등을 기준으로 핸들러가 결정된다.
- 여기서 말하는 핸들러는 컨트롤러의 메서드를 의미한다.
4. HandlerAdapter를 통한 핸들러 호출
DispatcherServlet은 요청에 해당하는 핸들러를 찾은 후,HandlerAdapter를 사용하여 해당 메서드를 호출한다.
- 이때
HandlerAdapter는HttpServletRequest에 있는 요청 파라미터를 컨트롤러 메서드의 파라미터에 자동으로 바인딩하는 역할을 한다.
5. 서비스(비즈니스 로직) 처리
- 컨트롤러에서 호출한
@Service(비즈니스 로직)는@Repository를 호출하여 데이터베이스 작업을 처리하고, 필요한 경우DTO객체를 사용하여 데이터를 전달한다.
6. Repository 호출
- 서비스는
Repository객체를 호출하여 데이터베이스에서 필요한 데이터를 조회하거나 수정한다.
Repository는JdbcTemplate,JPA,MyBatis등을 사용하여 SQL 쿼리를 실행하거나 엔터티 객체를 데이터베이스와 매핑하여 데이터 접근을 처리한다.
7. DTO 객체 생성
Repository에서 반환된 데이터는DTO객체로 매핑되거나, 서비스에서 필요한 형태로 가공되어DTO객체에 담긴다.
8. 컨트롤러로 결과 반환
- 서비스에서 처리한 결과나
DTO객체를 컨트롤러로 반환한다.
- 컨트롤러는 받은 데이터를
Model객체를 통해 뷰로 전달한다.
9. ViewResolver를 통한 뷰 선택 및 생성
DispatcherServlet은 컨트롤러에서 반환된ModelAndView객체 또는 뷰 이름(String)을 기반으로ViewResolver를 호출한다.
ViewResolver는 접두사(경로)와 접미사(템플릿 확장자)를 결합하여 실제 뷰 파일을 선택한다.
- 선택된 뷰 파일은 해당 템플릿 엔진(
JSP,Mustache등)에 의해 렌더링되어HTML을 생성하고, 그 결과를DispatcherServlet에 반환한다.
10. 톰캣 서버로 응답 반환
- 반환된
HTML은HttpServletResponse객체에 내용을 작성하여 톰캣 서버로 응답을 반환한다.
11. 클라이언트에게 응답
- 최종적으로 톰캣은 생성된 응답을 클라이언트에 전달하여 웹 페이지가 브라우저에 표시된다.
Share article