본문 바로가기

CS

[CS] Servlet: 개념, 동작 순서, 그리고 Container

 

 


 

 

 

Servlet

정의 :

Java 언어로 작성된 서버 측 프로그램으로, 클라이언트의 요청(주로 HTTP 요청, Request)을 받아 처리한 후, 그에 대한 응답(Response)를 처리하는 역할을 합니다.

  • 웹 서버와 클라이언트(브라우저) 사이의 중개자 역할을 하며, 동적인 웹 페이지를 생성할 수 있게 해줍니다.
  • 웹 어플리케이션 개발의 핵심 기술중 하나입니다.

 

 

특징 :

  • Java EE (Jakarta EE) 표준 API 중 하나
  • `javax.servlet` 혹은 `jakarta.servlet` 패키지 사용
  • HTML, JSON, XML 등 다양한 형식의 응답 생성 가능
  • 서블릿 클래스는 `HttpServlet` 클래스를 상속받아 구현

 

 

역할 :

  • HTTP POST 요청으로 HTML Form 데이터를 전송하는 상황 예시
    ex) 회원가입 : `POST + localhost:8080/api/users`
  • HTTP Request Message 예시
POST /api/users HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded

userId=아이디&pssword=비밀번호

 

  • HTTP Response Message 예시
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

<html>
	<body>
		...
	</body>
</html>

 

  • 서버에서 처리해야 하는 작업 (다음 7단계)

  1. 서버와 TCP/IP 연결
  2. HTTP Request Message 필요한 형태로 변환하여 읽기
    • HTTP Method 및 URL 분석
    • HTTP Header 분석
    • HTTP Message Body 읽기 및 변환
  3. 분석한 결과를 통해 프로세스 실행
  4. 비지니스 로직 실행
  5. HTTP Response Message 생성
    • HTTP Start Line 생성
    • Header 생성
    • HTTP Message Body에 응답 데이터를 요청한 형식에 맞춰 응답
    • 처리가 불가하다면 예외처리
  6. 응답 전달
  7. 연결 종료

 

  • Servlet을 지원하는 WAS(Web Application Server)를 사용한다면? 
    • 위의 7단계 중 비지니스 로직에만 집중하면 됩니다.

 

 


 

 

 

Servlet 동작 순서

1. 클라이언트 요청 (HTTP Reqeust)

  • 사용자가 웹 브라우저에서 URL을 입력하거나 폼을 전송하면 웹 서버로 HTTP 요청이 전송됩니다.

2. WAS 객체 생성

  • WAS는 HTTP 요청 메세지를 기반으로 새로운 Request, Response 객체 생성

3. 요청 전달

  • 웹 서버는 요청 URL에 해당하는 Servlet이 있는지 확인하고, 해당 Servlet을 관리하는 Servlet Container로 요청을 전달합니다.

4. Servlet 생성 또는 재사용 (Example Servlet 생성)

  • 서블릿이 처음 요청될 경우:
    1. 컨테이너는 서블릿 클래스를 메모리에 로드
    2. 객체를 한 번만 생성한 뒤 init() 메서드 호출
    3. 이후 요청마다 동일 인스턴스를 사용합니다.
  • 재사용 시: 생성되어 있는 서블릿 객체 사용

5. 비즈니스 로직 처리 

 

 

6. 응답 생성

  • 서블릿은 동적인 내용을 생성하고, HttpServletResponse 객체를 통해 응답을 보냄 (HTML, JSON 등)

7. 응답 반환

  • 응답은 웹 서버를 통해 클라이언트(브라우저)에 전달됩니다.

8. 종료(`destroy()` 호출)

  • 서버가 종료되거나 서블릿이 더 이상 사용되지 않을 경우, 컨테이너는 `destroy()` 메서드를 호출하여 리소스 정리

 

 

개발자가 하는 일

  1. Request 객체에 담겨져있는 HTTP 요청 정보를 꺼내서 사용합니다.
    • 요청 정보(URL, Method, Message Body)를 통해 필요한 기능(비지니스 로직)을 수행합니다.
  2. 생선된 Response 객체에 HTTP 응답 정보를 입력합니다.

 

 


 

 

 

Servlet Container

정의 :

Servlet을 관리하고 실행하는 역할을 하는 소프트웨어입니다. Tomcat이 대표적인 서블릿 컨테이너입니다.

 

 

역할 :

기능 설명
서블릿 생명주기 관리 `init()`, `service()`, `destroy()` 관리
요청/응답 처리 HTTP 요청과 응답 객체 생성 (HttpServletRequest, HttpServletResponse)
멀티스레딩 지원 클라이언트 요청마다 별도의 스레드로 처리
보안 처리 인증, 권한 부여 등 지원
로깅 및 예외 처리 에러 로그, 예외 처리 기능 내장
  • Servlet 객체를 `싱글톤`으로 관리합니다.

 

 

Servlet의 생명주기 :

  • Servlet은 서블릿 컨테이너가 생성 및 관리합니다.
  • WAS(서블릿 컨테이너 포함)가 종료될 때 Servlet도 함께 종료됩니다.

 

 

Servlet 객체 생성시점 :

  • 개발자가 직접 인스턴스화 하여 사용하는것이 아닌, 코드만 작성하면 서블릿 컨테이너가 생성합니다.

 

 

 

서블릿 예시 코드 :

@WebServlet(name="ExampleServlet", urlPatterns = "/example")
public class ExampleServlet extends HttpServlet { // HttpServlet을 상속받아 구현한다.
	
	@Override
	protected void service(
		HttpServletRequest request,  // HTTP 요청 정보를 쉽게 사용할 수 있게 만드는 Servlet
		HttpServletResponse response // HTTP 응답 정보를 쉽게 제공할 수 있게 만드는 Servlet
	) {
		// application logic
	}

}
@WebServlet(name="Example2Servlet", urlPatterns = "/example2")
// 위와 같은 코드

@WebServlet(name="Example3Servlet", urlPatterns = "/example3")
// 위와 같은 코드

@WebServlet(name="Example4Servlet", urlPatterns = "/example4")
// 위와 같은 코드