서블릿(Servlet)이란?

조아·2025년 2월 13일
0

1. 서블릿 개요

  • 서블릿은 Java 기반의 웹 애플리케이션에서 클라이언트 요청을 처리하고 응답을 생성하는 역할을 수행하는 기술.
  • HTTP 요청을 파싱하고, 필요한 데이터를 처리한 후, HTTP 응답을 생성하는 과정을 담당.

2. HTML Form과 HTTP 요청

  • HTML Form을 통해 클라이언트가 데이터를 입력하고 POST 방식으로 서버에 전송.
  • 예제:
    <form action="/save" method="post"> 
      <input type="text" name="username" /> 
      <input type="text" name="age" /> 
      <button type="submit">전송</button> 
    </form>
  • 위와 같이 POST 요청을 보내면 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) 내부에서 서블릿 컨테이너 가 동작.
  • 서블릿 컨테이너는 다음과 같은 기능을 제공:
    1. 서블릿 객체의 생성, 초기화, 호출, 종료를 관리.
    2. 싱글톤(Singleton) 패턴을 사용하여 서블릿 객체를 하나만 유지.
    3. 요청이 올 때마다 RequestResponse 객체를 새로 생성.
    4. 동시 요청을 위한 멀티스레드 처리 지원.
    5. 서블릿 객체의 생명주기를 관리하여 서버 종료 시 함께 종료.
    6. JSP(Java Server Pages)도 내부적으로 서블릿으로 변환하여 처리.

8. 싱글톤 패턴과 서블릿

  • 서블릿 객체는 싱글톤으로 관리됨.
  • RequestResponse 객체는 요청마다 새로 생성되지만, 서블릿 객체 자체는 재사용됨.
  • 멤버 변수 사용 시 동시 요청 시 공유될 수 있어 주의 필요.
  • 잘못된 멤버 변수 사용 예:
    public class HelloServlet extends HttpServlet {
        private String userName; // 위험: 모든 사용자가 공유할 가능성 있음!
    }
  • 동시 요청 처리 시 특정 사용자의 데이터가 다른 사용자에게 노출될 위험이 있음.

9. WAS의 멀티스레드 처리

  • WAS는 동시 요청을 멀티스레드 방식으로 처리.
  • 개발자는 멀티스레드를 직접 관리할 필요 없이, 요청마다 별도의 RequestResponse 객체를 사용하여 처리 가능.
  • WAS가 자동으로 요청을 적절히 분배하여 성능을 향상.

10. 정리

  • 서블릿을 사용하면 HTTP 요청 처리, 응답 생성 등의 과정을 자동화할 수 있음.
  • 서블릿 컨테이너가 서블릿 객체를 관리하며, 싱글톤 패턴을 적용하여 효율적으로 동작.
  • WAS는 멀티스레드를 지원하여 대량의 동시 요청을 처리할 수 있음.
  • JSP 역시 내부적으로 서블릿으로 변환되어 실행됨.
profile
프론트엔드 개발자

0개의 댓글