1 분 소요

본 포스트는 Inflearn의 김영한님 강의를 바탕으로 작성했습니다.

Servlet

  • 서블릿은 TCP/IP connection, Socket connection, HTTP message parsing, HTTP response message 생성 등, 핵심 비즈니스 로직을 제외한 부분을 대신 해준다.
  • 스프링 부트에서 servlet을 직접 등록해서 사용하려면 @ServletComponentScan 을 붙이면 된다.



WAS의 요청 구조

img1

  • 스프링 부트가 톰켓(WAS)를 띄워준다.
  • 톰켓은 서블릿 컨테이너에 서블릿을 등록하고 싱글톤으로 관리한다.
  • HTTP 요청마다 톰켓이 request, response 객체를 새로 생성하고 서블릿 객체에 넣어서 실행한다.



HttpServletRequest

개발자가 HTTP 메시지를 직접 파싱해서 사용할 수도 있겠지만 굉장히 불편하고 반복적인 작업이다. 서블릿은 HTTP 메시지를 대신 파싱해서 HttpServletRequest 객체에 담아서 준다.

기능

  • 임시 저장소 역할을 한다. request.setAttribute(name, value)로 저장, request.getAttribute(name)으로 조회
  • 세션 관리를 해준다. request.getSession(create: true)
  • 이 외에도 HTTP 메시지를 다 조회할 수 있다. startline, header, body



HTTP 요청 데이터

HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방식은 크게 3가지이다.

  • GET - 쿼리 파라미터
    • ex- /url?username=hello&age=20
    • 검색, 필터, 페이징 등에 많이 사용된다.
    • body를 사용하지 않기 때문에 content-type이 없다.
  • POST - HTML Form

img2

  • content-type: applicaiton/x-www.form-urlencoded
  • 메시지 바디에 쿼리 파라미터 형식으로 전달
  • GET 쿼리 파라미터 방식이랑 동일한 폼으로 들어오기 때문에 서버측에서는 동일한 방법으로 적용해서 조회할 수 있다. -> request.getParameter()
  • HTTP 메시지 바디를 사용하기 때문에 content-type을 지정해야 한다. (application/x-www-form-urlencoded)

  • HTTP message body에 데이터 넣어서 요청 (JSON)
    • HTTP API에 주로 사용된다. 거의 Json
    • Json 형식으로 데이터를 넘길때는 content-type을 application/json으로 설정해야 한다.
    • ObjectMapper를 사용해서 json을 파싱할 수 있다.

출처

  • https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1