서블릿 시스템의 동작 방식
- 클라이언트 요청 (HTTP Request):
- 브라우저(또는 다른 클라이언트)가 서버에 HTTP 요청을 보낸다. (예: 웹 페이지 요청, 데이터 전송 등)
- 웹 서버 (Web Server) / 웹 애플리케이션 서버 (WAS) / 서블릿 컨테이너:
- 서버는 정적인 콘텐츠(HTML, CSS, 이미지 등) 요청을 직접 처리하고, 동적인 콘텐츠(JSP, Servlet) 요청은 WAS에 위임합니다. (WAS는 서블릿 컨테이너를 포함하고 있다.)
- 서블릿 컨테이너는 요청 URL을 분석하여 어떤 서블릿이 처리해야 할지 결정. (web.xml 또는 어노테이션 기반 매핑 정보 사용)
- 스레드 생성 (Thread Creation):
- 서블릿 컨테이너는 각 요청을 처리하기 위해 스레드 풀(thread pool)에서 스레드를 할당하거나, 새로운 스레드를 생성.
- 스레드를 사용하면 여러 요청을 동시에 처리할 수 있어, 서버의 응답성을 높일 수 있다.
- 서블릿 객체 생성 또는 재사용 (Servlet Object Creation or Reuse):
- 최초 요청: 해당 서블릿에 대한 첫 번째 요청인 경우, 서블릿 컨테이너는 서블릿 클래스의 인스턴스(객체)를 생성하고, init() 메서드를 호출하여 초기화한다.
- 이후 요청: 이미 생성된 서블릿 객체가 있으면, 해당 객체를 재사용한다. (일반적으로 서블릿 객체는 싱글톤 패턴으로 관리됨.)
- 싱글톤 패턴을 사용하므로, 동시성 문제에 주의해야함.
- HttpServletRequest, HttpServletResponse 객체 생성:
- 서블릿 컨테이너는 각 요청에 대해 HttpServletRequest 객체와 HttpServletResponse 객체를 생성.
- HttpServletRequest: 클라이언트의 요청 정보를 담고 있다. (헤더, 파라미터, 쿠키, 세션 등)
- HttpServletResponse: 클라이언트에 대한 응답을 생성하는 데 사용된다. (헤더 설정, 상태 코드 설정, 응답 본문 출력 등)
- 서블릿의 service() 메서드 호출 (또는 doGet(), doPost() 등):
- 서블릿 컨테이너는 생성된(또는 재사용된) 서블릿 객체의 service() 메서드를 호출하고, HttpServletRequest 객체와 HttpServletResponse 객체를 인자로 전달.
- service() 메서드는 요청 메서드(GET, POST 등)에 따라 doGet(), doPost(), doPut(), doDelete() 등의 적절한 메서드를 호출.
- HttpServlet을 상속받아 구현한 서블릿은 service 메소드를 재정의하기보다 doGet, doPost를 재정의.
- 요청 처리 및 응답 생성:
- doGet(), doPost() 등의 메서드 내에서 개발자가 작성한 비즈니스 로직이 실행됨.
- HttpServletRequest 객체를 통해 요청 정보를 읽어 들이고, HttpServletResponse 객체를 사용하여 응답을 생성. (HTML, JSON, XML 등)
- 응답 반환:
- 서블릿 컨테이너는 HttpServletResponse 객체에 설정된 내용(상태 코드, 헤더, 응답 본문)을 기반으로 HTTP 응답 메시지를 생성하여 클라이언트에 반환.
- 스레드 반환 (Thread Return):
- 요청 처리가 완료되면, 사용된 스레드는 스레드 풀에 반환됨.
'개발 > servlet' 카테고리의 다른 글
HttpSession 과 Cookie 인터페이스 정리 (0) | 2025.03.05 |
---|---|
ServletConfig 인터페이스 정리 (0) | 2025.03.05 |
ServletContext 인터페이스 정리 (0) | 2025.03.05 |
Servlet RequestDispatcher 정리 (0) | 2025.03.05 |
Servlet Request 객체와 Response의 주요 메서드 (0) | 2025.03.05 |