[개념] 스프링 구조 용어 정리 (Servlet Conatainer, DispatcherServlet)

2022. 10. 17. 20:09· Info/개념 정리
728x90

[개념] Spring Framwork 기본 동작 순서 및 구조

 

[개념] Spring Framwork 기본 동작 순서 및 구조

[개념] Spring은 무엇인가? [개념] Spring은 무엇인가? Spring이란 무엇인가? '자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크' 라고 가장 잘 알려져있다. Java/Kotlin

soohykeee.tistory.com

 

앞서 작성한 포스트에서 잘모르겠는 용어들이 있어서 정리하는 시간을 가졌다.
우선적으로 DIspatcherServlet에 대해 알아보기 위해 정리를 하다가, Servlet Container 또한 알고있어야 이해가 가는 부분이 있어 두 부분을 동시에 정리했다.

 

 


 

 

서블릿 컨테이너(Servlet Container) 란?

서블릿컨테이너를 알기 전 웹서버에 대한 이해가 먼저 필요하다.
따라서 웹서버에 대해 간단히 설명을 먼저 하면,

웹서버 (Web Server) : 웹페이지를 사용자에게 전송하는 서버

 - 웹서버는 데이터를 전송하기 위해 HTTP Protocol 을 사용한다.

 - 일반적인 상황에서 사용자는 브라우저에 URL을 입력합니다, 그리고 사용자는 웹페이지를 얻게 된다.
 - 웹서버가 하는 일은 웹페이지를 사용자에게 전송하는 것이다.

 

Servlet Container는 Servlet들의 생성, 실행, 파괴를 담당하고, 쉽게 말하면 Servlet을 위한 상자(Container) 이다.
  • 서버에 만들어진 서블릿이 스스로 작동하는 것이 아니라, 서블릿을 관리 해주는 것이 필요한데, 이러한 역할을 하는 것이 바로 서블릿 컨테이너이다.
  • 서블릿 컨테이너는 Client의 Request를 받아주고 Response할 수 있게, 웹 서버와 소켓을 만들어 통신한다.
  • 서블릿 컨테이너는 HTTP 요청을 받아 웹페이지를 동적으로 생성하는 역할을 한다. 
  • 대표적인 서블릿 컨테이너가 바로 톰캣이다. 스프링에는 톰캣이 내장되어 있다.

 

 

서블릿 컨테이너의 역할은 무엇인가?

  • 웹서버와의 통신 지원
     : 서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해주어, 소켓을 만들고 listen, accept 등을 API로 제공하여 복잡한 과정을 생략할 수 있게 해준다.

  • 서블릿 생명주기(Life Cycle) 관리
    - 서블릿 클래스를 로딩하여 인스턴스화
    - 초기화 메소드를 호출
    - 요청이 들어오면 적절한 서블릿 메소드를 호출합니다.
    - 서블릿 소멸 시 Garbage Collection(가비지 컬렉션)을 진행

  • 멀티쓰레드 지원 및 관리
    - 서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성
    - HTTP 서비스 메소드를 실행하고 나면, 쓰레드는 자동으로 소멸
    - 원래는 쓰레드를 관리해야 하지만 서버가 다중 쓰레드를 생성 및 운영해주니 쓰레드의 안정성에 대해서 걱정하지 않아도 된다.

  • 선언적인 보안 관리
    - 서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현해 놓지 않아도 됩니다.
    - 일반적으로 보안관리는 XML 배포 서술자에 다가 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를
    - 수정하여 다시 컴파일 하지 않아도 보안관리가 가능합니다.

 

 


 

 

*디스패쳐 서블릿(DispatcherServlet) 이란?

Dispatcher Servlet에서 Dispatch의 의미는 급파하다, 파견 등의 의미로, 해석해보면 받은 요청을 어딘가로 빨리빨리 보내는 서블릿이라는 뜻이다. 스프링에서는 FrontController 패턴과 RequestDispacher 기능을 묶어서 제공하는데 이를 디스패쳐 서블릿이라고 한다. 직접 코드를 짜지 않아도 스프링에 기본 탑재되어 있다.

우선 FrontController를 살펴보면, Front Controller는 웹 어플리케이션으로 들어오는 모든 요청을 수신하고 각 요청에 맞는 controller로 요청을 넘기는 역할을 한다. 만약 Front Controller가 존재하지 않는다면, 각 요청에 맞는 각각의 servlet을 구성해야 하는 번거로움이 생긴다. 그렇게 되면 servlet의 수가 많아지게 되고, 많아지게 되면 효율성이 떨어지게 된다.

Front Controller 의 장점

  1. 공통 코드의 중복을 최소화
  2. 개발 및 유지보수 용이
  3. servlet으로부터의 탈출 (controller는 servlet을 사용할 필요가 없어졌다)

디스패쳐 서블릿과 함께 자동생성되는 객체(IoC)가 있는데 그 중에 필터가 있다. 기본적으로 필요한 필터가 제공되나 내가 직접 등록할 수도 있다. DispatcherServlet이 모든 요청을 받고 세부 경로는 각 Controller에게 뿌려주는 프론트 컨트롤러의 역할을 함으로써, web.xml에 서블릿을 일일히 등록할 필요가 없어졌다. Controller의 매핑은 DispatcherServlet이 담당하기 때문이다.

 

 

 

 


 

 

참고
https://velog.io/@han_been/%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88Servlet-Container-%EB%9E%80
https://www.lifencoding.com/web/27?p=1
https://www.saichoiblog.com/spring-boot-principle-of-operation/
https://velog.io/@seculoper235/2.-DispatcherServlet-%EC%9D%B4%EB%9E%80

 

 


 

 

728x90
저작자표시 (새창열림)
'Info/개념 정리' 카테고리의 다른 글
  • [개념] JSON은 무엇인가?
  • [개념] AJAX는 무엇인가?
  • [개념] Spring Framwork 기본 동작 순서 및 구조
  • [개념] Spring은 무엇인가?
soohykeee
soohykeee
Computer Science. 2017~2023 / Java, Spring, Backend
soohykeee
Coding_
soohykeee
전체
오늘
어제
  • 분류 전체보기
    • 회고
    • Info
      • 개념 정리
      • 정보
    • Study
      • Pet-Clinic-Project
      • Concept
    • Inflearn
      • 스프링 핵심 원리_기본편
      • Git
    • 코드로 배우는 스프링 부트 웹 프로젝트
      • Guestbook
      • MovieReview
      • Security & API

블로그 메뉴

  • 홈
  • 방명록
  • Github

인기 글

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.1
soohykeee
[개념] 스프링 구조 용어 정리 (Servlet Conatainer, DispatcherServlet)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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