Java

[Servlet] Servlet 과 HTTP 프로토콜 WAS와 Servlet 컨테이너의 관

grove1212 2025. 3. 18. 21:45

1. Servlet

웹 애플리케이션에서 HTTP 프로토콜을 이용해 요청을 처리하고 응답을 하는 자바 클래스 Server + application + let(작은) = 작은 애플리케이션 서버 웹서버와 소켓으로 통신한다.

  • Web server에 붙어서 뭔가를 처리해준다. WAS는 servlet을 지원해준다.

2. HTTP 프로토콜

2-1. HTTP 프로토콜

  • 클라이언트와 서버가 데이터를 주고받을 때 사용하는 통신규약이다. 거의 모든 형태로의 데이터 전송이 가능하다.

2-2. HTTP 메시지 구조

  • html, text, json, xml 등 거의 모든 형태로의 데이터로 전송이 가능하다.

3. WAS(Web Application Server) 의 역할

  • 통신에 필요한 부가적인 것들을 대신 처리해준다. Web에 붙어서 Client의 요청을 처리하고 그 결과를 반환하는데 도움을 주는 기술이다.
  • WAS로는 대표적으로 톰캣이 있다.
  • WAS의 기능 중에 Servlet Container가 있다.

4. 서블릿 동작 흐름

  • HTTP 요청이 오면
  • WAS내부의 servlet container에서 Request, Response 객체를 새로 만들어서 서블릿 객체 호출하고
  • 서블릿 객체에서 Request 객체에서 HTTP 요청 정보를 꺼내서 비즈니스 로직을 수행하고
  • 다시 Response 객체에 HTTP 응답 정보를 담아서
  • WAS의 servlet container가 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성해서 다시 클라이언트에 보내준다.
  • !! 물론 웹 브라우저와 WAS 사이에 웹 서버가 존재한다 !!

5. 실제로 사용하려면 어떻게 하나?

  • 서블릿 코드를 작성하고 컴파일할 때는 톰캣 없이도 할 수 있다. 하지만, 웹 애플리케이션으로 실행하려면 서블릿 컨테이너가 필요하다. 그래서 Tomcat을 다운받는다.
  • 서블릿을 컨테이너에 등록하려면 Deployment Descriptor(배포서술자 : web.xml)을 이용한다.

6. Servlet mapping

6-1. Servlet mapping 방법

  • client가 servlet에 접근할 때 원본 클래스명이 아닌 다른 명칭으로 접근할 수 있다.
  • 별칭 사용 설정 방법은 web.xml을 이용한 적용과 @annontation으로 두 가지 방법이 있다.

6-2. Servlet mapping 구조

  • 클라이언트가 서블릿의 url로 요청을 보내면, 톰캣이 이를 해석해 매핑된 서블릿으로 연결하는 구조이다.

  • mapping 경로 잘못되면 tomcat 실행 자체가 되지 않는다.
    • 정의되지 않은 경로이거나 중복된 경로를 사용하면 톰캣 서버 실행 오류가 발생한다.

6-3. web.xml 이용

  • xml 파일로 매핑 정보를 관리하면 한눈에 확인하고 관리할 수 있다는 장점이 있지만, 새로운 서블릿을 추가할 때마다 파일을 이동해 매핑하고 일일이 확인해야 하는 단점이 있다.
  • <servlet>과 <servlet-mapping>은 묶어서 함께 설정해야 한다.
  • 사용법
  • <servlet> <servlet-name>*mapping명칭<*/servlet-name> <servlet-class>*실제 클래스명*</servlet-class> </servlet> <servlet-mapping> <servlet-name>*mapping명칭*</servlet-name> <url-pattern>*사용자 접근명칭*</url-pattern> </servlet-mapping>

6-4. @annotation 이용

  • 어노테이션(Annotation)이란
    • 사전적 의미로는 ‘주석’을 뜻한다.
    • 실제로 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다.
    • 프로그램에 추가 정보를 제공해주는 메타데이터로 볼 수 있다.
    • (meta data : 데이터를 위한 데이터)
  • 서블릿을 새로 개발할 때 클래스 바로 윗쪽에 어노테이션만 추가하면 되므로 간편하다는 장점이 있다.
  • 하지만 별도의 문서 등으로 관리하지 않으면 시스템의 모든 서블릿 매핑 정보를 한눈에 볼 수 없다는 단점이 있다.
  • 사용법
  • @WebServlet(“/*mapping명칭*”) public class *Servlet명* extends HttpServlet { *(Servlet code)* }

7. Servlet의 LifeCycle과 구동

7-1. Servlet LifeCycle

7-2. Servlet 구동