Kotlin

Spring - Servlet(서블릿)이란?

빈코더 2024. 12. 24. 15:30
728x90

Servlet

Servlet이란?

Servlet은 자바 클래스로, 웹 서버(예: Tomcat)에서 동작하며 HTTP요청을 처리하고 응답을 생성하는 역할을 합니다.
클라이언트(웹 브라우저 등)와 서버 사이의 요청 및 응답 흐름을 관리합니다.

서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 시능을 수행한 후 웹 브라우저에 결과를 전송합니다.

쉽게 예를들면 로그인 시도를 할 때, 서버가 클라이언트에서 입력되는 요청(Request)을 확인하고 결과를 응답(Response)하는데
이러한 역할을 서블릿이 수행합니다.

Servlet의 역할

  1. 요청 처리
    • 클라이언트의 HTTP 요청을 수신
    • 요청 데이터를 분석(예: 폼 데이터, 쿼리 파라미터 등)
  2. 비즈니스 로직 수행
    • 데이터베이스 접근, 파일 처리, 계산 등을 수행
  3. 응답 생성
    • HTML, JSON, XML 등 동적인 콘텐츠를 생성하여 클라이언트로 전송
  4. 상태 관리
    • 세션과 쿠키를 사용하여 클라이언트 상태 관리

Servlet 동작 원리

  1. 요청-응답 흐름

    1. 클라이언트 요청 - 브라우저에서 URL 입력 또는 폼 제출
    2. 웹 서버(Web Container) - 요청을 수신하고, 해당 요청을 처리할 서블릿을 결정
    3. 서블릿 실행 - 요청 처리 및 비즈니스 로직 수행
    4. 응답 반환 - 클라이언트에게 HTML, JSON 등의 응답 반환
  2. Servlet의 생명 주기

    • Servlet은 Servlet 인터페이스에 정의된 세가지 주요 메서드를 통해 동작합니다.
    • 1 ) 초기화(Init)
      1. 서블릿이 최초 요청될 때 한 번만 호출
      2. 리소스 초기화 및 설정 작업 수행
      3. 메서드: public void init(ServletConfig config)
    • 2 ) 서비스(Service)
      1. 클라이언트의 요청을 처리하고 응답을 반환
      2. 메서드: public void service(ServletRequest request, ServletResponse response)
      3. 주로 doGet()과 doPost() 메서드로 요청 구분.
    • 3 ) 소멸(Destroy)
      1. 서버가 종료되거나 서블릿이 제거될 때 호출
      2. 자원 해제 및 정리 작업 수행
      3. 메서드: public void destroy()

    Servlet 예제 코드

    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.IOException;
    
    class HelloServlet: HttpServlet() {
      // 초기화(init)
     override fun init() {
         println("Servlet 초기화")
     }
    
     // GET 요청 처리 (doGet)
     override fun doGet(request: HttpServletRequest, response: HttpServletResponse) {
         response.contentType = "text/html"
         response.writer.println("<h1>Hello, Kotlin Servlet!</h1>")
     }
    
     // POST 요청 처리 (doPost)
     override fun doPost(request: HttpServletRequest, response: HttpServletResponse) {
         response.contentType = "text/html"
         response.writer.println("<h1>POST 요청 처리 완료!</h1>")
     }
    
     // 소멸(destroy)
     override fun destroy() {
         println("Servlet 종료!")
     }
    }
    • init(): 서블릿 초기화 시 실행
    • doGet(): GET 요청을 처리하고 HTML응답을 반환
    • destroy(): 서블릿 종료시 실행

Servlet Container

  1. 서블릿 생명주기 관리
    • 서블릿 객체 생성 및 초기화(init)
    • 요청 처리 (service -> doGet, doPost)
    • 서블릿 소멸 처리(destroy)
  2. 요청과 응답 관리
    • HTTP요청/응답 처리 - 요청을 서블릿으로 전달하고, 응답을 생성해 클라이언트로 반환
    • 요청 파라미터 추출 - GET 또는 POST 요청에서 전달되는 파라미터 처리
    • 세션 관리 - 쿠키 및 세션을 통해 사용자 상태 관리
  3. 멀티스레드 지원
    • 여러 클라이언트 요청을 동시에 처리(멀티스레드)하여 성능을 최적화
  4. 보안 관리
    • 인증 및 인가 - HTTP Basic 인증, SSL등 보안 기능 제공
    • 요청 필터(Filter)와 리스너(Listener)를 활용한 보안 정책 적용
  5. 자원 관리
    • 파일 업로드 처리 및 데이터베이스 연결 풀 관리
728x90