Spring 구조(1) - MVC 아키텍처 패턴, Front Controller

ASAC 웹 풀스택/Spring Boot
2024. 10. 8. 16:04
목차
  1. MVC 아키텍쳐 패턴 개요
  2. Front Controller  이전의 Servlet
  3. Front Controller 도입 후 Servlet
  4. 왜  Front Controller가 필요한가?
  5. Front Controller 상세 흐름
  6. DispatchServlet의 역할
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가 필요한가?

  1. Controller 호출의 중앙화
    • HandlerMapping(중앙관리) : URL 마다 Controller 들을 정돈 /  검색
    • HandlerAdaptor(중앙처리) : 앞서 찾은 Controller 호출을 담당
      • 무조건 (공통적으로) Model 과 View 이름을 반환
  2. View 생성의 중앙화
    • ViewResolver(중앙관리): View 이름마다 Template 파일들을 정돈 / 검색
    • View(중앙처리): 앞서 찾은 Template 에 Model을 합쳐 반환할 View 렌더링

Front Controller 상세 흐름

 

  1. EC2 서버에서 Tomcat 이 처음 구동될때 2개의 Container 가 생성된다.
    1. Servlet Container (ServletContext): Tomcat이 처음 구동 시, 가장 먼저 ServletContext 생성
      • 다음 ServletContextListener이 실행되어 아래 Spring Container (ApplicationContext) 생성
    2. Spring Container (ApplicatoinContext) : 실제로 2개의 계층으로 이루어져 있다.
      • Servlet WebApplicationContext: Servlet에서만 사용하는 빈 - @Controller 등
        • HandlerMapping
        • ViewResolver
        • @Controller 등
      • Root WebApplicatoinContext: 인프라, 비지니스 공통 Bean = @Service, @Repository 등
        • @Service
        • @Repository
        • @Compoent
        • @Configuration 등
  2. Tomcat 및 Container 들이 모두 생성된 뒤에 클라이언트 요청을 받을 수 있다.
  3. 클라이언트 요청에 따라 Tomcat 은 정적 페이지가 존재하는지 학인
  4. 정적 페이지가 존재하지 않는다면,  Servlet Container가 요청을 받아 Servlet 할당
    • 단일 DispatchServlet 생성: 원래는 URL 규칙에 따라 다양한 Servlet생성인데, Spring에서는 단일
  5. DispatchServler은 Front Controller 로써 역할을 충실히 해낸다.

 

DispatchServlet의 역할

  1. Controller 호출의 중앙화
    • HandlerMapping(중앙관리) : URL 에 따른 Controller Bean 검색
    • HandlerAdapter(중앙처리): 앞서 찾은 Controller Bean 포출에 대한 실행을 위힘
      • Controller Bean은 결과로 Model 과 View 이름을 반환
        • 구버전 Spring : ModelAndView
        • 최근 Spring : Model객체와 View 이름 반환 
  2. View 생성의 중앙화
    • ViewResolver(중앙관리): Controller가 반환한 View 이름에 맞는 Template 검색
    • View(중앙처리) : 앞서 찾은 Template 에 Model 객체를 합쳐 반환할 View 렌더링
      • Thymeleaf: 현재 Spring 표준 Server-side Template Engine
      • Client-side Template Engine: React, Vue 등
  3. 최종적으로 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
  1. MVC 아키텍쳐 패턴 개요
  2. Front Controller  이전의 Servlet
  3. Front Controller 도입 후 Servlet
  4. 왜  Front Controller가 필요한가?
  5. Front Controller 상세 흐름
  6. DispatchServlet의 역할
'ASAC 웹 풀스택/Spring Boot' 카테고리의 다른 글
  • Spring Best Practices(1) - JSON 관련 어노테이션
  • Spring 구조(2) - 3-Layerd 아키텍쳐 패턴
  • Spring Boot 특장점 및 동작(1) - Spring과 Spring Boot의 차이점
  • Spring Bean 원리(1) - 싱글톤, IoC, Bean 등록/사용
hapBday
hapBday
hapBday
개발자로 성장하기 위한 기록들
hapBday
전체
오늘
어제
  • 분류 전체보기 (203)
    • CS (12)
      • 컴퓨터네트워크 (11)
      • 운영체제 (0)
      • 분산 시스템 (0)
      • 데이터베이스 (1)
    • Spring (47)
      • Spring 핵심 원리 (13)
      • Spring MVC (15)
      • Spring DB (12)
      • Spring Security (6)
    • JPA (14)
    • 알고리즘 (30)
      • 프로그래머스 (6)
      • 백준 (20)
    • Design Pattern (0)
    • 언어 (5)
      • JAVA (5)
    • ASAC 웹 풀스택 (38)
      • Spring Boot (21)
      • React (0)
      • DevOps (8)
    • 트러블슈팅 (15)
    • DevOps (5)
      • Docker (5)
    • ETC (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

공지사항

  • 블로그 이전

인기 글

태그

  • currency control
  • s-lock
  • basicerrorcontroller
  • Session
  • Java
  • 오블완
  • 구현
  • Spring
  • docker workflow
  • 김영한
  • jwt
  • 프로그래머스
  • 3-layerd 아키텍쳐 패턴
  • MVC
  • aws lambda
  • spring security
  • docker
  • 티스토리챌린지
  • CORS
  • S3
  • x-lock
  • cookie
  • docker best practices
  • 인프런
  • multi-stage
  • CSRF
  • JPA
  • 트랜잭션
  • spring boot
  • 백준

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
hapBday
Spring 구조(1) - MVC 아키텍처 패턴, Front Controller
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.