
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