[TIL] HttpServlet. 서블릿 컨테이너

SlowAnd·2023년 12월 27일
0

Today I Learned

목록 보기
7/17
post-thumbnail

서블릿

(기존 문제)웹 애플리케이션 서버 직접 구현 - 중복 코드 문제

HTTP 메세지를 확인하기 위한 긴 과정이 있다.

다음과 같은 Post 전송이 왔으면,

아래의 절차(웹 애플리케이션 서버 직접 구현)가 있어야 Post 메세지를 확인할 수 있다.

메세지가 올때마다 중복되는 절차들을 누가 대신 담당해줬으면 좋겠다.

(해결) 서블릿! - 중복 코드 책임을 가져가다.

서블릿은 HTTP 메시지를 읽고 보낼때, 의미있는 비즈니스 로직에 집중할 수있도록
불필요한 로직들을 대신 수행해주는 책임을 가지고 있다.

다음은 서블릿을 지원하는 WAS 사용하는 경우.

서블릿 호출 코드


그리고 애플리케이션에서 @ServletComponentScan을 추가해서 서블릿이 작동되게 설정한다.

  • urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행
  • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
  • HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
  • 개발자는 HTTP 스펙을 매우 편리하게 사용

(잠깐 서블렛은 request, response객체를 둘을 동시에 미리 주입 받고 있다.)

서블릿 흐름 구조(요청,응답)

(잠깐 Tomcat(WAS)안에 Servlet 컨테이너가 있다.)

HTTP 요청시
• WAS는 Request, Response 객체를 매번 새로 만들어서 서블릿 객체 호출
• 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용
• 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
• WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성


서블릿을 지원하는 WAS안에는 서블릿 컨테이너가 있다.
서블릿 컨테이너가 서블릿 객체를 자동으로 생성한다.
그리고 WAS가 종료될때 Servlet도 같이 종료시킨다.
당연하지만, 서블릿컨테이너가 서블릿의 생명주기를 관리하고 있다.

서블릿 컨테이너 특징

  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함

  • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리

  • 서블릿 객체는 싱글톤으로 관리
    - 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율
    - 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
    - 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근
    - 공유 변수 사용 주의
    - 서블릿 컨테이너 종료시 함께 종료

  • JSP도 서블릿으로 변환 되어서 사용

  • 동시 요청을 위한 멀티 쓰레드 처리 지원

Bean 컨테이너 vs Servlet 컨테이너

빈 컨테이너 (Bean Container)

정의
스프링 프레임워크의 핵심 부분으로, 객체(빈)의 생성, 생명주기, 구성 및 관리를 담당합니다.
특징
의존성 주입(Dependency Injection)을 통해 객체 간의 결합도를 낮추고, 유연하고 확장 가능한 애플리케이션 구조를 지원합니다.
빈의 생명주기 관리(생성, 사용, 소멸)를 담당합니다.
주로 스프링 프레임워크 내에서 사용됩니다.

서블릿 컨테이너 (Servlet Container)

정의
Java 서블릿을 관리하고 실행하는 환경을 제공하는 서버의 일부입니다.
특징
HTTP 요청과 응답을 관리하며, 웹 페이지를 사용자에게 전달하는 역할을 합니다.
서블릿 생명주기 관리(로딩, 초기화, 서비스, 소멸)를 담당합니다.
예: Apache Tomcat, Jetty 등.

공통점

컨테이너 기반 관리: 둘 다 특정 컴포넌트의 생성과 생명주기를 관리하는 '컨테이너' 기반의 접근 방식을 사용합니다.
자바 기반: Java 언어와 환경을 기반으로 작동합니다.
애플리케이션 구성 요소 관리: 애플리케이션의 구성 요소를 인스턴스화하고 관리하는 기능을 제공합니다.

차이점

관리하는 컴포넌트의 종류:
빈 컨테이너는 애플리케이션 내의 모든 빈(객체)를 관리합니다.
서블릿 컨테이너는 서블릿과 같은 웹 컴포넌트의 실행을 관리합니다.
주 사용 목적:
빈 컨테이너는 주로 의존성 주입 및 빈 관리를 위해 사용됩니다.
서블릿 컨테이너는 HTTP 요청을 처리하고 웹 페이지를 제공하는 데 사용됩니다.
사용 환경:
빈 컨테이너는 스프링 프레임워크와 같은 애플리케이션 프레임워크 내에서 사용됩니다.
서블릿 컨테이너는 웹 서버나 애플리케이션 서버 내에서 웹 애플리케이션의 실행 환경을 제공합니다.
이러한 차이점과 공통점을 통해 빈 컨테이너와 서블릿 컨테이너가 Java 웹 애플리케이션 개발에서 어떻게 서로 보완적인 역할을 하는지 이해할 수 있습니다.

0개의 댓글