728x90
MVC 아키텍쳐 패턴 개요
Front Controller: URL 에 알맞은 Controller 찾아서 (HandlerMapping) 호출
- Controller는 ViewTemplate 명칭 및 Model을 반환
- 웹 페이지(HTML) 반환 시: ViewResolver 를 통한 ViewTemplate + Model -> View 생성 및 반환
- 데이터(JSON)반환 시: HttpMessageConverter 를 통해 -> JSON 변환 및 반환
Front Controller 이전의 Servlet
Java EE 시절
Servlet은 요청 URL 마다 할당 되어 개발
Java는 거대 웹 어플리케이션 프로젝트를 위해 Java EE 라는 Java 웹 표준 기술을 만들었었다.
Java의 웹 표준 중 Java 기반 CGI 프로그램 표준인 Servlet + JSP 등장
당시 Java EE 표준 상에서 Servlet 은 URL 할당 되어 개발되었다.
- GET /hello → HelloGetServlet
- POST /hello → HelloPostServlet
- DELETE /world → WorldDeleteServlet
Front Controller 도입 후 Servlet
Spring 시절
단일 Servlet(DispatcherServlet) 이 요청 URL마다 컨트롤러 호출
Spring 에서는 Servlet을 URL마다 정의하지 않고, 단일 Servlet만을 사용
- GET /hello → DispatcherSerlvet → HelloGetController
- POST /hello → DispatcherSerlvet → HelloPostController
- DELETE /world → DispatcherSerlvet → WorldDeleteController
왜 Front Controller가 필요한가?
- Controller 호출의 중앙화
- HandlerMapping(중앙관리) : URL 마다 Controller 들을 정돈 / 검색
- HandlerAdaptor(중앙처리) : 앞서 찾은 Controller 호출을 담당
- 무조건 (공통적으로) Model 과 View 이름을 반환
- View 생성의 중앙화
- ViewResolver(중앙관리): View 이름마다 Template 파일들을 정돈 / 검색
- View(중앙처리): 앞서 찾은 Template 에 Model을 합쳐 반환할 View 렌더링
Front Controller 상세 흐름
- EC2 서버에서 Tomcat 이 처음 구동될때 2개의 Container 가 생성된다.
- Servlet Container (ServletContext): Tomcat이 처음 구동 시, 가장 먼저 ServletContext 생성
- 다음 ServletContextListener이 실행되어 아래 Spring Container (ApplicationContext) 생성
- Spring Container (ApplicatoinContext) : 실제로 2개의 계층으로 이루어져 있다.
- Servlet WebApplicationContext: Servlet에서만 사용하는 빈 - @Controller 등
- HandlerMapping
- ViewResolver
- @Controller 등
- Root WebApplicatoinContext: 인프라, 비지니스 공통 Bean = @Service, @Repository 등
- @Service
- @Repository
- @Compoent
- @Configuration 등
- Servlet WebApplicationContext: Servlet에서만 사용하는 빈 - @Controller 등
- Servlet Container (ServletContext): Tomcat이 처음 구동 시, 가장 먼저 ServletContext 생성
- Tomcat 및 Container 들이 모두 생성된 뒤에 클라이언트 요청을 받을 수 있다.
- 클라이언트 요청에 따라 Tomcat 은 정적 페이지가 존재하는지 학인
- 정적 페이지가 존재하지 않는다면, Servlet Container가 요청을 받아 Servlet 할당
- 단일 DispatchServlet 생성: 원래는 URL 규칙에 따라 다양한 Servlet생성인데, Spring에서는 단일
- DispatchServler은 Front Controller 로써 역할을 충실히 해낸다.
DispatchServlet의 역할
- Controller 호출의 중앙화
- HandlerMapping(중앙관리) : URL 에 따른 Controller Bean 검색
- HandlerAdapter(중앙처리): 앞서 찾은 Controller Bean 포출에 대한 실행을 위힘
- Controller Bean은 결과로 Model 과 View 이름을 반환
- 구버전 Spring : ModelAndView
- 최근 Spring : Model객체와 View 이름 반환
- Controller Bean은 결과로 Model 과 View 이름을 반환
- View 생성의 중앙화
- ViewResolver(중앙관리): Controller가 반환한 View 이름에 맞는 Template 검색
- View(중앙처리) : 앞서 찾은 Template 에 Model 객체를 합쳐 반환할 View 렌더링
- Thymeleaf: 현재 Spring 표준 Server-side Template Engine
- Client-side Template Engine: React, Vue 등
- 최종적으로 View 가 클라이언트에게 반환
728x90
'ASAC 웹 풀스택 > Spring Boot' 카테고리의 다른 글
Spring Best Practices(1) - JSON 관련 어노테이션 (0) | 2024.10.11 |
---|---|
Spring 구조(2) - 3-Layerd 아키텍쳐 패턴 (0) | 2024.10.08 |
Spring Boot 특장점 및 동작(1) - Spring과 Spring Boot의 차이점 (0) | 2024.10.08 |
Spring Bean 원리(1) - 싱글톤, IoC, Bean 등록/사용 (3) | 2024.10.08 |
Spring MVC 원리(3) - @Controller, MessageConverter (0) | 2024.10.08 |