Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

서블릿 컨테이너 이해하기 #30

Open
suna-ji opened this issue Dec 28, 2024 · 0 comments
Open

서블릿 컨테이너 이해하기 #30

suna-ji opened this issue Dec 28, 2024 · 0 comments
Assignees
Labels
백엔드 질문 리스트의 직무 구분을 위한 라벨

Comments

@suna-ji
Copy link
Member

suna-ji commented Dec 28, 2024

📝 서블릿 컨테이너 이해하기

📚 주제

서블릿 컨테이너의 역할과 동작 원리를 이해하고, 스프링 프레임워크와의 관계를 알아봅시다. 🙇‍♀️


🎯 스터디 목표

  • 서블릿 컨테이너의 정의와 주요 기능를 이해한다.
  • 클라이언트 요청이 서블릿 컨테이너를 거쳐 처리되는 흐름을 이해한다.
  • 서블릿 컨테이너 기반의 비동기 요청 처리 방식을 이해한다.

📖 핵심 내용

1. 서블릿이란? ⭐️⭐️⭐️

Serv(Service) + let(작은 것을 의미하는 접미사) : 작은 서비스 컴포넌트

서블릿은 Java 기반의 웹 애플리케이션을 개발하기 위해 사용되는 서버 측 컴포넌트 입니다.
클라이언트의 요청을 처리하고, 동적인 응답을 생성하여 반환합니다.

주요 메소드

  • init() : 서블릿 초기화 작업 수행
  • service() : 요청에 따라 작업 수행
  • destroy() : 서블릿이 소멸되기 전 정리 작업 수행

2. 서블릿 컨테이너란? ⭐️

서블릿 컨테이너는 Java Servlet을 실행하고, 클라이언트 요청을 처리하며 서블릿의 생명주기를 관리하는 역할을 하는 서버 환경입니다.

주요 기능

  • HTTP 요청/응답 관리
  • 서블릿 매핑 및 관리
    • 요청 URL과 서블릿 매핑 설정을 기반으로 적합한 서블릿을 호출
  • 서블릿 생명주기 관리
    • 서블릿의 초기화, 실행, 소멸 과정을 관리
  • 멀티스레드 지원
    • 클라이언트 요청마다 별도의 스레드를 생성하여 병렬로 처리
  • JSP 처리
    • JSP를 서블릿으로 변환하고 실행
  • 비동기 처리 지원
    • 비동기 요청 처리와 블록킹 I/O 감소를 통해 서버 자원 효율성을 향상

대표적인 서블릿 컨테이너

  • Apache Tomcat
  • Jetty

3. 서블릿 컨테이너의 동작 원리 ⭐️

클라이언트 요청 -> 웹 서버 -> 요청 매핑 -> 서블릿 호출 -> 응답 생성

  1. 클라이언트 요청
  2. 웹 서버에 요청 도착
    Apache, Nginx와 같은 웹 서버가 요청을 서블릿 컨테이너에 전달합니다.
  3. 요청 매핑
    서블릿 컨테이너는 요청 URL과 서블릿 매핑 설정을 확인하여 적합한 서블릿을 찾습니다.
  4. 서블릿 호출
    서블릿 컨테이넌는 적합한 서블릿 객체를 생성 또는 재사용 후 sevice() 메서드를 호출합니다.
  5. 응답 생성
    서블릿은 요청을 처리한 결과를 HTTP 응답으로 작성하고 클라이언트에게 반환합니다.

4. 서블릿 컨테이너 기반 비동기 요청 처리 방식

서블릿 컨테이너는 기본적으로 요청당 하나의 스레드를 할당!

  1. 비동기 처리 시작
    서블릿에서 HttpServletRequest.startAsync()를 호출하여 비동기 처리를 시작합니다.
  2. 별도의 스레드에서 작업 수행
    비동기 컨텍스트 AsyncContext를 통해 요청 처리를 다른 스레드로 넘깁니다.
  3. 응답 완료
    작업이 완료되면 AsyncContext.complete()를 호출하여 클라이언트에게 응답을 반환합니다.

5. 스프링 프레임워크와 서블릿 컨테이너의 관계

서블릿 컨테이너는 Dispatcher Servlet을 통해 스프링 애플리케이션이 요청과 응답을 처리할 수 있는 환경을 제공합니다.
스크린샷 2025-01-12 오후 4 40 05

🙋‍♀️ Q&A

  • Q. 서블릿은 자바 환경에 한정된 개념인가요?

  • A. 네, 서블릿은 Jakarta EE 사양에 따라 정의된 Java 기반 서버 측 컴포넌로 Java 환경에 한정됩니다. 다른 언어에서의 유사한 개념으로는 Python의 WSGI, Node.js의 미들웨어 등이 존재합니다.

  • Q. Tomcat은 웹 서버인가요? 서블릿 컨테이너인가요?

  • A. Tomcat은 서블릿 컨테이너로 설계되었지만, 웹 서버의 기능도 포함하고 있습니다. 하지만 고성능의 정적 콘텐츠 제공을 위해서는 Nginx나 Apache HTTP Server와 함께 사용하는 것이 일반적입니다.


💡 참고 자료:
스프링 DispatcherServlet
Servlet Container and Spring Framework

@suna-ji suna-ji added the 백엔드 질문 리스트의 직무 구분을 위한 라벨 label Dec 28, 2024
@suna-ji suna-ji self-assigned this Dec 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
백엔드 질문 리스트의 직무 구분을 위한 라벨
Projects
None yet
Development

No branches or pull requests

1 participant