Servlet
Servlet은 HTTP 프로토콜 기반 요청 및 응답을 처리하는데 사용된다.
JAVA에서 Servlet은 HttpServlet 클래스를 상속받아 구현되며, 웹 애플리케이션 개발의 핵심 기술 중 하나이다.
Servlet의 역할
서버에서 요청에 대한 동작 과정은 다음과 같다.
- 서버와 TCP/IP 연결
- HTTP Request Message 필요한 형태로 변환하여 읽기
- HTTP Method 및 URL 분석
- HTTP Header 분석
- HTTP Message Body 읽기 및 변환
- 분석한 결과를 통해 프로세스 실행
- 비지니스 로직 실행
- HTTP Response Message 생성
- HTTP Start Line 생성
- Header 생성
- HTTP Message Body에 응답 데이터를 요청한 형식에 맞춰 응답
- 처리가 불가하다면 예외처리
- 응답 전달
- 연결 종료
만일 Servlet을 사용하지 않으면 개발자는 2번부터 6번까지의 처리를 직접해야한다.
하지만 Servlet을 지원하는 WAS를 사용한다면 개발자는 비즈니스 로직에만 집중하면 된다.
Servlet이 요청과 응답의 전반적이 부분을 처리해준다.
Servlet 예제 동작 순서
Servlet 예시 코드
@WebServlet(name="ExampleServlet", urlPatterns = "/exmaple")
public class ExampleServlet extends HttpServlet { // HttpServlet을 상속받아 구현한다.
@Override
protected void service(
HttpServletRequest request, // HTTP 요청 정보를 쉽게 사용할 수 있게 만드는 Servlet
HttpServletResponse response // HTTP 응답 정보를 쉽게 제공할 수 있게 만드는 Servlet
) {
// application logic
}
}
이러한 Servlet 있을 때 클라이언트가 URL로 /exmple을 호출하면 위 Servlet 코드의 service( ) 메서드가 실행된다.
이때 Servlet의 동작 순서에 대해 알아보자
Servlet 동작 순서
- WAS는 HTTP 요청 메시지를 기반으로 새로운 Request, Response 객체 생성
- WAS는 만들어진 Request, Response 객체를 서블릿 컨테이너에 넘겨주며 ExampleServlet 객체 호출
- ExampleServlet에 비즈니스 로직 처리
- 응답에 필요한 정보를 개발자가 입력
- WAS는 Response 객체 정보(개발자가 입력한 정보)로 HTTP 응답 메시지 생성
Servlet Container
Servlet Container는 서블릿을 초기화, 생성, 관리, 호출 종료하는 역할을 수행한다.
Servlet을 지원하는 WAS 내부에는 서블릿 컨테이너가 있다.
Servlet의 생명주기
Servlet은 서블릿 컨테이너가 생성 및 관리한다. WAS(서블릿 컨테이너 포함)가 종료될 때 Servlet도 함께 종료된다.
Servlet 객체 생성 시점
개발자가 직접 인스턴스화 하여 사용하는 것이 아닌, 코드만 작성하면 서블릿 컨테이너가 생성한다.
Servlet Container가 하는 일
- 서블릿을 초기화, 생성, 관리, 호출, 종료하는 역할을 수행한다.
- Servlet 객체를 싱글톤으로 관리한다.
- 동시 요청에 대한 처리를 위해 Multi Thread를 지원한다.
💡 싱글톤이란 객체를 하나만 생성하여 생성된 인스턴스를 공유해서 사용하는 것을 의미한다.
인스턴스가 여러 개 생성되지 않도록 하여 자원의 낭비를 방지하고, 인스턴스를 공유함으로써 상태를 일관되게 유지하기 위함이다.
하지만, 공유 변수 사용을 주의해야 한다.
'Web' 카테고리의 다른 글
WAS의 Thread와 MultiThread 이해 (0) | 2024.11.26 |
---|---|
Web Server와 WAS (0) | 2024.11.26 |
Restful API (1) | 2024.11.26 |
HTTP의 이해 (1) | 2024.11.26 |