🚣활동/NHN Academy

[Servlet & JSP]

말동말동현 2025. 3. 15. 22:50

Servlet

  • Java를 사용하여 동적 웹 콘텐츠를 생성하는 서버 측 프로그램
  • 쉽게 말해, Java로 만든 CGI 프로그램 같은 것
  • Servlet 인터페이스를 정의
    • 즉 Servlet 인터페이스를 구현 -> Java로 구현한 CGI프로그램

 

CGI의 단점 해결

  • 요청마다 새로운 프로세스가 생성 (CGI) -> 멀티 스레드로 해결
  • 스레드는 누가 생성하고 관리하나 -> 컨테이너의 등장

Servlet Architecture

Servlet Container

  • 웹 컨테이너(web container, 또는 서블릿 컨테이너)는 웹 서버의 컴포넌트 중 하나로 자바 서블릿과 상호작용한다.
  • 웹 컨테이너는 서블릿의 생명주기를 관리하고, URL과 특정 서블릿을 맵핑 하며 URL 요청이 올바른 접근 권한을 갖도록 보장한다.
  • 웹 컨테이너는 서블릿, Java Server Page(JSP) 파일, 그리고 서버-사이드 코드가 포함된 다른 타입의 파일들에 대한 요청을 다룬다.
  • 웹 컨테이너는 서블릿 객체를 생성하고, 서블릿을 로드와 언 로드하며, 요청과 응답 객체를 생성하고 관리하고, 다른 서블릿 관리 작업을 수행한다.
  • 웹 컨테이너는 웹 컴포넌트 Java EE 아키텍처 제약을 구현하고, 보안, 병행성(concurrency), 생명주기 관리, 트랜잭션, 배포 등 다른 서비스를 포함하는 웹 컴포넌트의 실행 환경을 명세한다.

 

 

 

정리

Servlet

  • Java를 사용하여 동적 웹 콘텐츠를 생성하는 서버 측 프로그램
  • CGI 단점 해결 → Servlet Container 도입

Servlet Container

  • Servlet의 생명주기를 관리하고, URL과 특정 서블릿을 맵핑 하며 URL 요청 처리
  • Java EE 아키텍처에 속함

Java EE

  • Java 언어로 엔터프라이즈 애플리케이션을 개발하고 운영할 수 있도록 지원해 주는 플랫폼
  • 현재는 Eclipse 재단으로 운영이 넘어가서 Jakarta EE 로 변경됨

WAS

  • Web Application Server
  • = Servlet Container

tomcat

  • apache 재단에서 만든 WAS 중의 하나
  • Servlet Container의 reference 구현
  • 사실상, Servlet Container = WAS = tomcat

 

웹서버와 WAS의 차이

웹서버

  • 주로 정적 컨텐츠(HTML, CSS, 이미지 등)를 처리합니다
  • 클라이언트의 HTTP 요청을 받아 정적 파일을 응답으로 제공합니다
  • 대표적인 예: Apache, Nginx, IIS 등
  • 비즈니스 로직을 직접 처리하지 않습니다

WAS(웹 애플리케이션 서버)

  • 동적 컨텐츠를 처리하는 미들웨어입니다
  • 웹서버로부터 받은 요청 중 애플리케이션 로직이 필요한 요청을 처리합니다
  • 데이터베이스 연동, 트랜잭션 처리 등 비즈니스 로직을 수행합니다
  • 대표적인 예: Tomcat, JBoss, WebLogic, WebSphere 등
  • 서블릿 컨테이너, JSP 엔진 등을 포함합니다

간단한 비유

웹서버는 손님(클라이언트)에게 메뉴판(정적 컨텐츠)을 제공하는 식당의 홀 직원이라면, WAS는 주방에서 실제 요리(동적 컨텐츠)를 만드는 요리사라고 볼 수 있습니다.

실제 사용 방식

많은 시스템에서는 웹서버와 WAS를 함께 사용합니다. 웹서버가 먼저 요청을 받아 정적 컨텐츠는 직접 처리하고, 동적 처리가 필요한 요청만 WAS로 전달하는 구조를 가집니다.

 

 

웹서버와 WAS 연동

Proxy

  • 자원을 요청하는 클라이언트자원을 제공하는 서버 사이에서 중재자 역할을 하는 서버 프로그램

 

Forward Proxy

  • 사용자의 요청을 실제 서버가 직접 받는 것이 아닌 중간에서 Forward proxy server가 대신 요청받아 실제 서버와 연결하여 그 결과를 클라이언트에 전달
  • 캐싱을 통한 성능 향상

 

 

Reverse Proxy

  • 보안상의 이유로 DMZ 존에 웹서버를 두고 Reverse Proxy로 설정하고 WAS는 내부망에 위치시킴

 

 

 

Servlet Lifecycle

 

 

 

  • init() 메서드
    • Servlet Container가 Servlet을 생성한 후 초기화 작업을 수행하기 위해 호출
    • 클라이언트의 요청을 처리하기 전에 준비할 작업이 있는 경우 여기에서 처리
      • ex.) 데이터베이스 접속, 외부 스토리지 연결, property 로딩 등
  • service() 메서드는 굳이 override 할 필요 없음
  • GET, POST, PUT, DELETE 각각의 http method 에 대해
    • 구현이 필요한 doXXX() 메서드 override 해서 구현
  • destroy() 메서드
    • Servlet Container가 종료되거나 해당 서블릿을 비활성화시킬 때 호출
    • 서비스 수행을 위해 확보되었던 자원 해제, 데이터 저장등의 마무리 작업 시 여기에서 처리
      • ex.) 데이터베이스 연결 종료

 

 

load-on-startup

 
  • Servlet 의 문제점

    • Servlet은 브라우저의 최초 요청시 init() 메서드(초기화) 과정을 통해서 메모리에 로드되어 기능을 수행합니다.
      • 이는 최초 요청에 대해서 실행시간이 길어질 수 있는 단점이 있습니다.
      • 지연 초기화 ( lazy initialization )

    load-on-startup 특징

    • 0보다 크면 tomcat container가 미리 servlet을 초기화 합니다.
    • 숫자의 순서에 의해서 초기화 됩니다.

 

 

ServletContext

ServletContext 란?

  • Servlet Container 실행 환경
  • Servlet과 Servlet Container 간에 연동을 위해 사용
  • 웹 애플리케이션마다 하나의 ServletContext 생성
  • 하나의 웹 애플리케이션에 포함된 Servlet 들은 동일한 ServletContext 공유
  • Servlet끼리 자원을 공유하는 데 활용
  • Servlet Container 실행 시 생성되고 Servlet Container 종료 시 소멸