1. 서블릿 개요
- 서블릿은 Java 기반의 웹 애플리케이션에서 클라이언트 요청을 처리하고 응답을 생성하는 역할을 수행하는 기술.
- HTTP 요청을 파싱하고, 필요한 데이터를 처리한 후, HTTP 응답을 생성하는 과정을 담당.
3. HTTP 요청 메시지 예시
POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
username=kim&age=20
Content-Type: application/x-www-form-urlencoded
방식으로 전송됨.
username=kim&age=20
형식의 URL 인코딩된 데이터가 포함됨.
4. 서버에서 처리해야 하는 업무 (웹 애플리케이션 서버 직접 구현 시)
- 서버에서 TCP/IP 연결을 대기하고, 소켓을 연결.
- HTTP 요청 메시지를 직접 파싱하여 데이터 추출.
POST
방식인지 확인하고, 요청된 URL(/save
)인지 판별.
Content-Type
을 확인한 후, 메시지 바디의 데이터를 추출하여 저장.
- 비즈니스 로직을 실행하고, 데이터베이스에 저장 요청.
- HTTP 응답 메시지를 생성하여 브라우저에 전달.
- TCP/IP를 통해 응답을 전송하고, 소켓을 종료.
5. 서블릿을 활용한 서버 처리
- 서블릿을 지원하는 WAS(Web Application Server) 가 위의 과정들을 자동으로 처리.
- 개발자는 핵심 비즈니스 로직만 작성하면 됨.
- 서블릿을 사용하면 HTTP 요청 파싱, 응답 메시지 생성, TCP/IP 연결 관리 등을 자동화 가능.
6. 서블릿 코드 예제
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response){
}
}
@WebServlet
애너테이션을 사용하여 URL 매핑 설정 가능.
HttpServletRequest
객체를 통해 HTTP 요청 정보를 편리하게 사용.
HttpServletResponse
객체를 통해 HTTP 응답 정보를 생성.
7. 서블릿 컨테이너의 역할
- WAS(Web Application Server) 내부에서 서블릿 컨테이너 가 동작.
- 서블릿 컨테이너는 다음과 같은 기능을 제공:
- 서블릿 객체의 생성, 초기화, 호출, 종료를 관리.
- 싱글톤(Singleton) 패턴을 사용하여 서블릿 객체를 하나만 유지.
- 요청이 올 때마다
Request
및 Response
객체를 새로 생성.
- 동시 요청을 위한 멀티스레드 처리 지원.
- 서블릿 객체의 생명주기를 관리하여 서버 종료 시 함께 종료.
- JSP(Java Server Pages)도 내부적으로 서블릿으로 변환하여 처리.
8. 싱글톤 패턴과 서블릿
9. WAS의 멀티스레드 처리
- WAS는 동시 요청을 멀티스레드 방식으로 처리.
- 개발자는 멀티스레드를 직접 관리할 필요 없이, 요청마다 별도의
Request
및 Response
객체를 사용하여 처리 가능.
- WAS가 자동으로 요청을 적절히 분배하여 성능을 향상.
10. 정리
- 서블릿을 사용하면 HTTP 요청 처리, 응답 생성 등의 과정을 자동화할 수 있음.
- 서블릿 컨테이너가 서블릿 객체를 관리하며, 싱글톤 패턴을 적용하여 효율적으로 동작.
- WAS는 멀티스레드를 지원하여 대량의 동시 요청을 처리할 수 있음.
- JSP 역시 내부적으로 서블릿으로 변환되어 실행됨.