framework/spring

Servlet Container와 Servlet Context

wooweee 2024. 8. 16. 21:39
728x90
  • 목표
    • Contaienr와 Contex의 개념 확립

  • 알면 좋은 점
    • Contaienr와 Context는 Servlet과 Spring에서 정말 자주 사용되는 용어로 둘의 차이점을 알아두면 학습 및 개발 이해도를 높일 수 있다.

  • 사전 지식
    • Container와 Context는 큰 결은 비슷하지만 Servlet과 Spring에서 세부적인 역할의 차이가 있다.
    • 큰 의미를 파악 후 각 역할별 차이점을 파악하는 방향으로 접근이 필요
    • 컨테이너 종류 : web Container, Servlet Container, Spring Container 등
    • Web Container 와 Servlet Container
      • Web Container가 Servlet Container를 포함하는 더 큰 범주
      • Servlet Container: Servlet의 생명주기만 관리
        Web Container: Servlet Container의 기능을 포함한 Serlvet, Jsp, 필터, 리스너 등 다양한 구성 요소 관리
      • 예) Apache Tomcat : 서블릿 컨테이너이자 웹 컨테이너(1개의 컨테이너만 가진다) : 서블릿과 JSP 실행을 지원하며 웹 애플리케이션의 모든 구성 요소를 관리하기 때문

 


 

1. Container & Context

  • Conainer
    • 웹 어플리케이션을 실행하기 위한 런타임 환경을 제공하는 소프트웨어
    • 웹 서버와 애플리케이션 사이의 통신을 관리하고 웹 애플리케이션의 생명 주기를 관리
  • Context
    • 컨테이너가 내에서 실행 중인 애플리케이션의 환경 설정이나 상태 정보를 제공하는 객체 혹은 인터페이스
    • 컨텍스트는 애플리케이션의 설정과 리소스에 대한 접근을 지원 -> 컨테이너가 다양한 기능을 진행하는데 필요 정보를 제공

  • 한 줄 정리
    • Container : 애플리케이션의 실행 환경을 제공하고 생명 주기 및 요청/응답 처리 등 다양한 관리 작업을 수행
    • Context : 테이너 내에서 애플리케이션의 설정, 리소스 접근, 전역 데이터 공유 등의 기능을 제공하는 객체나 인터페이스

 

2. Servlet Container와 Servlet Context 란

  • Servlet Container
    • web.xml을 읽어서 ServletContext를 초기화
    • HttpServletRequest, HttpServletResponse 객체를 생성하여 서블릿이 동작하도록 통신
    • 서블릿을 담고 관리하는 컨테이너로 서블릿의 생명주기를 관리
    • 서블릿 컨테이너 통신 과정

출처 : https://velog.io/@kkuldangi3/Servlet

 

  • Servlet Context
    • 서블릿과 서블릿 컨테이너와 서블릿이 통신하기 위해 사용하는 메소드를 지원하는 인터페이스를 의미
    • 웹 애플리케이션의 이름, 경로 및 초기화 파라미터를 포함한 웹 애플리케이션에 대한 정보를 포함
    • 웹 애플리케이션의 모든 서블릿 및 JSP에 대한 공유 저장소로 사용
    • 예) web.xml 으로 서블릿을 매핑하는 메소드를 지원하는 역할 = <servlet-mapping> 동작 수행
    • 하나의 project 당 하나의 servletContext가 존재 (ps. WAS 하나에 port 번호를 달리하여 여러 project 생성 가능)
    • ServletContext 오브젝트는 ServletConfig 오브젝트 내에 포함되며, 서블릿이 초기화 될 때 웹 서버가 서블릿을 제공
  • 정리
    • ServletContext는 Servlet Cotainer에 의해 생성 및 파괴되고 프로젝트 하나 당 1개의 servlet Context가 존재한다. 마지막으로 모든 Serlvet은 ServletContext를 상속 받고 각 서블릿 마다 ServletConfig가 존재해서 개별적인 저장소를 가진다.
    • 관련 이미지

출처 : https://pabeba.tistory.com/153

 

  • Servlet Container와 Servlet Context 전체 동작 과정
    1. web.xml 파일 읽기
      • 서블릿 컨테이너(Apache Tomcat)는 웹 애플리케이션이 배포될 때 web.xml 파일 읽음
      • 이 파일에 서블릿 컨테이너(웹 컨테이너)의 기능인 필터 정의, 매핑, 초기화 파라미터, 리스너 설정이 포함됨
    2. servlet Context 객체 초기화
      • servlet Container는 web.xml 내용을 바탕으로 Servlet Context 객체를 초기화
      • 초기화 파라미터를 설정하고 애플리케이션 전역 속성을 관리
    3. 생성된 Servlet Context는 web.xml 에 정의된 초기화 파라미터를 읽음(모든 서블릿이 공유) 각 서블릿의 매핑 정보를 가지고 있어서 요청에 대한 서블릿 연결을 역할 수행

 

  • 최종 정리 이미지

출처 : woo-weee

 

  • 이미지를 그리다가 생각난 현 주제와 관련 없지만 알면 좋은 것 (정적 처리, 동적처리, ServletConfig)
더보기

- 그림에서 빠진 부분으로 Container 안에 request와 response를 생성하고 servlet에게 전달

   - servlet으로 전달될 때 과정은 servletContext에서 servlet과 매핑하는 메서드로 연결됨은 이제 알 것이다.

 

- 톰캣은 사실 WebServer와 WAS를 하나로 가지고 있는 특이한 형태이지만 보편적으로 정적, 동적 처리를 분리하기 위해서 web Server와 WAS가 각각 존재

 

- 정적 처리와 동적 처리 : 컴파일된 파일(예: 자바파일)을 이용해야되는지 유무

   - 정적 처리는 MVC 패턴을 거칠 필요가 없어 Web server에서 파일을 client 측으로 전송하면 된다.

  - 동적처리를 하기 위하서 컴파일된 자바소스를 읽어야하는데 이를 처리하는 것이 WAS이고 WAS가 처리를 다 한 후 정적 파일로 변환하여 WEB server에 파일을 전송하여 client에게 전송

 

- ServletConfig 와 servlet

Servlet 객체는 Servlet Container에서 new 연산자를 통해서 생성함.

하지만 Servlet의 초기화는 SerletConfig가 진행한다. -> 그래서 각 서블릿 마다 자신의 servlet Config를 가짐

그리고 servletConfig 내부에 servletContext가 동일하게 들어있어서 Servlet Cotnext의 초기 변수를 servlet들이 공유 할 수 있다.

 

- 스프링에서는 Servlet을 JSP를 제외하면 dispatcher Serlvet만 이용

 


 

참고 자료 : https://pabeba.tistory.com/153  https://velog.io/@kkuldangi3/Servlet
서블릿 컨텍스를 어떻게 공유하고 사용하는지 설명 존재 :https://dololak.tistory.com/475

 

 

다음 포스팅 : Spring에서의 container와 context는 다음 포스팅에 작성