[Spring] Front-controller pattern과 Dispatcher servlet

2024. 7. 30. 14:18· Spring Boot
목차
  1. ✅ Front-controller 패턴이란
  2. 🔥 Front-controller  디자인 패턴의 UML 다이어그램
  3. 🔥 Front-Controller의 장점
  4. ✅ Dispatcher-servlet
  5. ✅  참고 자료 & 링크
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

✅ Front-controller 패턴이란

Front-controller 디자인 패턴은 application으로 들어오는 모든 요청이 하나의 핸들러(single handler)에 의해 다뤄지며,

request를 처리할 적절한 핸들러로 보낸다(dispatched).

또한 front-controller는 dispatching mechanism(보내는 매커니즘)을 사용하기 위해 다른 helper들을 활용할 수 있다.

 

🔥 Front-controller  디자인 패턴의 UML 다이어그램

출처: https://www.geeksforgeeks.org/front-controller-design-pattern/

1. Controller

Controller는 시스템에 들어오는 모든 request(요청)이 제일 처음으로 만나는 지점이다.

Controller는 사용자의 authentication(인가)와 authorization(인증)을 처리하기 위해 helper 해당 작업을 위임할 수 있다.

 

2. View

View는 client에게 정보를 보여주는 역할을 한다.

view는 model로부터 정보를 받으며, helper는 화면에 정보를 띄우기 위해 model을 캡슐화하는 등의

 

3. Dispatcher

Dispatcher는 view management(view 관리)와 navigation에 역할을 가지고 있다.

user에게 다음에 어떤 view를 보여줄 것인지, 해당 자원(Resource)를 제어하기 위한 매커니즘 제공 등을 담당한다.

 

4. Helper

Helper는 view를 도와주거나, controller가 처리하는데에 도움을 준다.

따라서 helper는 다양한 역할을 하는데, view에 필요한 데이터를 저장하기, 중간에 사용되는 model 저장하기 등의 역할을 하기도 하며, 이러한 경우 helper를 value bean이라고 부르기도 한다.

 

 

🔥 Front-Controller의 장점

1. 한 곳에서 모든 처리가 가능하다.

요청이 들어올 때마다 Servlet을 찾아서 매핑해주는 과정이 

Front-controller는 Web application의 모든 request들을 처리한다.

이는 controller가 분산되는 것을 막는 중앙 처리식이며, 사용자 추적 및 보안과 같은 어플리케이션의 전반적인 정책을 시행하는데에 유용하다.

 

2. Servlet에 대한 의존성에서 벗어날 수 있다.

Dispatcher-servlet이 등장하기 이전에는 HTTP 요청을 처리할 Servlet을 생성해야했기 때문에, 자연스래 개발자의 코드에 Servlet이라는 기술에 종속된다는 문제점을 가지고 있었다.

Dispatcher-servlet이 등장하면서 Servlet 구현의 책임을 가져갔기 때문에, 우리가 Spring boot를 통해 개발을 할 때에 Servlet에 대해 신경을 쓰지 않아도 되게 되었다.

 

 


✅ Dispatcher-servlet

Servlet과 Servlet container의 동작 방식을 되짚어보자.

Client로부터 Request(요청)가 들어오면 Servlet container가 요청을 처리할 servlet을 찾아 요청을 처리한 후, Response(응답)을 다시 Client에게 전달한다.

(자세한 내용은 이 포스팅을 통해 알아볼 수 있다.)

 

Spring MVC에서 Dispatcher servlet이 등장하기 전까지는, web.xml에 서블릿과 URL 매핑 정보를 모두 등록해줘야했다.

또한 Servlet을 호출할 때마다 한글 인코딩 처리와 같은 공통으로 처리해야하는 로직을 중복 작성해야 한다는 단점이 있었다.

 

servlet을 개별적으로 다루어 공통된 로직을 여러 번 작성하지 말고, 앞에 서블릿을 하나 두어 공통된 로직을 처리하게 하면 어떨까?

그리고 탄생한 것이 바로 Dispatcher-servlet이다.

 

Dispatcher-servlet 덕분에 web.xml에 대한 의존을 엄청나게 낮출 수 있었으며, front-controller 역할을 하여 공통적인 로직을 Dispatcher-servlet에서 처리할 수 있게 됨으로서 중복 코드들도 깔끔하게 사라졌다.

또한 HttpServlet 클래스에 대한 의존성 문제도 해결되어 @Controller, @RestController와 같은 어노테이션들도 사용할 수 있게 된 것이다.

 

(Dispatcher servlet의 동작 원리에 대해 더 자세히 알고 싶다면 밑의 포스트를 참고하시길 바란다!)

https://m42-orion.tistory.com/156


✅  참고 자료 & 링크

- Front Controller Design Pattern

https://www.geeksforgeeks.org/front-controller-design-pattern/

- Servlet과 Dispatcher servlet에 대해 알아보자

https://7357.tistory.com/180

- Dispatcher servler이 대체 뭐하는 녀석이죠?

https://souljit2.tistory.com/73

- DispatcherServlet(디스패처 서블릿, Front Controller)

https://okimaru.tistory.com/343

 

728x90
  1. ✅ Front-controller 패턴이란
  2. 🔥 Front-controller  디자인 패턴의 UML 다이어그램
  3. 🔥 Front-Controller의 장점
  4. ✅ Dispatcher-servlet
  5. ✅  참고 자료 & 링크
'Spring Boot' 카테고리의 다른 글
  • [Spring] @Transactional의 동작 방식 & 중첩이 일어났을 때 어떻게 될까?
  • [Spring] Dispatcher servlet과 servlet container (작성 중)
  • WAS와 Web server의 차이점
  • [Spring] DispatcherServlet이란?
HEY__
HEY__
안녕하세요 :) 공부하며 배운 것들을 기록하기 위한 블로그입니다. 도움이 되시길 바라며 혹시 잘못된 점이 있다면 댓글 부탁드립니다! :D
250x250
HEY__
while(true) { continue; }
HEY__
전체
오늘
어제
  • 분류 전체보기 (164)
    • Spring Boot (45)
      • 스프링 입문 강의 (18)
    • AWS (8)
    • 프로젝트 (6)
    • Network (21)
    • Operating System (8)
    • Database (4)
    • ETC (2)
    • Java (3)
    • C++ (7)
    • Python (1)
    • 도서 📚 (3)
      • Effective Java (3)
    • Coding test (50)
      • Baekjoon (30)
      • Leet Code (18)
      • Programmers (2)
    • Algorithm (C++) (5)

블로그 메뉴

  • 태그
  • Github
  • 글쓰기
  • 블로그관리

공지사항

인기 글

태그

  • Baekjoon
  • aws
  • STL
  • CPP
  • Cloudfront
  • programmers
  • coding test
  • Algorithm
  • Network
  • Servlet Container
  • OS
  • slack
  • kotlin
  • leetcode
  • Java
  • dispatcher servlet
  • Spring
  • spring boot
  • HTTP
  • C++

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
HEY__
[Spring] Front-controller pattern과 Dispatcher servlet
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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