1-2. 서블릿

shin·2025년 3월 9일

Spring MVC

목록 보기
4/25

1) HTML Form 데이터 전송


ex. POST 전송 - 저장

  • 클라이언트가 전송한 POST 폼을, 웹브라우저가 요청 HTTP 메시지로 만들어서 서버에 전송함


2) 서버에서 처리해야 하는 업무


* 웹 애플리케이션 서버를 직접 구현하는 경우


HTTP 메시지를 모두 풀어헤쳐봐야 함...

  1. 서버에서 TCP/IP 연결을 일단 대기하도록 해야함

  2. HTTP 메시지는 모두 text이기 때문에 파싱해서 읽어봐야 함

  • 파싱해서 Post 방식이고 /save URL인지 판단
  1. Content-Type 확인
  • 컨텐츠 타입에 따라서 HTTP 메시지 바디 내용을 파싱함
  1. 저장 프로세스 실행

  2. 비즈니스 로직 실행

    • 데이터베이스에 저장 요청
  3. HTTP 응답 메시지 생성 시작

  4. TCP/IP에 응답 전달

※ 해당 프로세스를 모두 똑같이 개발하는 것은 비효율적

  • 서블릿은 위 프로세스 중 '의미있는 비즈니스 로직(애플리케이션 로직)'을 제외하고 모든 일을 다 지원해줌



3) 서블릿


(1) 특징

  • urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행

    • 웹브라우저에서 서버로 요청이 왔을 때 해당 서블릿 코드에 있는 서비스 메서드가 실행이 됨
    • HttpServlet만 상속받으면 됨
    • 애플리케이션 로직만 service 메서드에 작성하면 됨
  • service 파라미터 2개 : HttpServletRequest, HttpServletResponse

    • HTTP 요청/응답 메시지를 직접 파싱하는 것은 어려움
    • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
      • ex. getAge와 같은 형태로 값을 가져오는 것이 가능해짐
    • HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
      • ex. response 객체에 원하는 값을 응답으로 write하면 됨
  • Servlet을 통해서 개발자는 HTTP 스펙을 매우 편리하게 사용

  1. 웹 브라우저에서 localhost:8080/hello라는 url로 WAS에 요청을 함
  2. WAS에서 요청 메시지를 기반으로 Request 객체를 새로 만들고, Request 객체를 파라미터로 넘기면서 helloServlet이라는 서블릿 객체를 실행함
  3. helloServlet 실행이 종료되고 return을 하면, WAS에서 만든 response 객체 정보로 HTTP 응답을 생성함
  4. 웹 브라우저에 응답 메시지가 전달됨

(2) HTTP 요청, 응답 흐름

HTTP 요청시

  • WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출
  • 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용
  • 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
  • WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성

(3) 서블릿 컨테이너

  • 서블릿 객체는 직접 생성하는 것이 아님
    • 개발자는 위에 있는 코드만 작성하면 됨
    • 코드로 작성한 helloServlet이라는 객체를 서블릿 컨테이너가 자동으로 생성해주고 호출해주고 종료해줌

  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함

  • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리

    • 따라서 서블릿 컨테이너(WAS)가 종료될 때 서블릿도 같이 종료됨

  • 서블릿 객체는 싱글톤으로 관리

    • 객체를 하나만 만들어놓고 공유해서 사용하는 방식

    • 요청과 응답은 유저마다 다르기 때문에 Request와 Response는 객체는 계속 생성되는 것이 맞음

      • 하지만 고객의 요청이 올때마다 계속 Servlet 객체를 생성하는 것은 비효율적
    • 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용

      • 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근
    • 공유 변수 사용 주의

      • 멤버 변수를 사용할 때 공유가 되지 않도록 주의해야함
    • 서블릿 컨테이너 종료시 함께 종료


  • JSP도 서블릿으로 변환 되어서 사용
  • 동시 요청을 위한 멀티 쓰레드 처리 지원


강의 출처 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

profile
Backend development

0개의 댓글