Back-End/Spring

[Spring MVC][서블릿/Servlet] - 1. HttpServletRequest

얄루몬 2022. 3. 4. 10:40

💻본 포스팅은 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 김영한'님의 강의를 듣고 작성되었습니다.

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

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

www.inflearn.com


[HTTP 스펙]

[HttpServletRequest]

  • HTTP 요청 메시지 스펙을 편리하게 사용할 수 있도록 조회할 수 있게 해주는 것이 HttpServletRequest이다. 
  • HTTP 요청 메시지를 개발자가 직접 파싱해서 사용해도 되지만, 매우 불편할 것이다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다.
  • 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다

[HttpServletRequest의 역할 ]

  • 부가적인 기능으로 아래와 같은 기능을 제공한다.
  • 임시 저장소 기능
    • 해당 HTTP 요청이 시작부터 끝날 때 까지 유지되는 임시 저장소 기능을 한다.
    • 저장: request.setAttribute(name, value)
    • 조회: request.getAttribute(name)
  • 세션 관리 기능
    • request.getSession(create: true)

[HTTP 요청 데이터]

  • HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법은 아래와 같이 3가지이다.
  • GET - 쿼리파라미터
    • /url?username=hello&age=20
    • 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
    • 예) 검색, 필터, 페이징등에서 많이 사용하는 방식
  • POST - HTML Form
    • content-type: application/x-www-form-urlencoded
    • 메시지 바디에 쿼리 파리미터 형식으로 전달
    • username=hello&age=20 예) 회원 가입, 상품 주문, HTML Form 사용
    • 이 경우 POST만 지원한다. 다른 스프링 부트에서 PUT이나 PATCH를 지원하지만 이는 설정을 해주어서 그 덕분이라 한다.
  • HTTP message body에 데이터를 직접 담아 요청
    • 이는 주로 HTTP API에서 사용하며 JSON, XML, TEXT등을 보낼 때 쓰고 요즘은 JSON이 거의 표준이라고 부를만큼 가장 많이 쓴다.
    • POST, PUT, PATCH
[참고]
  • GET과 HTML Form 요청 데이터의 경우엔 쿼리 파라미터를 사용하기 때문에 둘을 묶어서 요청 파라미터라고 부른다.
  • GET URL 쿼리 파라미터 형식으로 클라이언트에서 서버로 데이터를 전달할 때는 HTTP 메시지 바디를 사용하기 때문에 content-type이 없다.
  • POST HTML Form 형식으로 데이터를 전달하면 HTTP 메시지 바디에 해당 데이터를 포함해서 보내기 때문에 바디에 포함된 데이터가 어떤 형식인지 content-type을 꼭 지정해주어야 한다. 이렇게 폼으로 데이터를 전송하는 형식을 application/x-www-form-urlencoded라 한다.
  • Json 형식의 데이터를 받을 때는 이를 객체로 만들어 보여줘야 하기 때문에 ObjectMapper를 사용해야 한다.

 

[JSON 파싱해서 사용가능 자바 객체로 변환하기 위한 방법]

Jackson, Gson 같은 JSON 변환 라이브러리를 추가해서 사용하면 이를 변환해 사용할 수 있다.

이때 Spring MVC를 선택하면 기본으로 Jackson 라이브러리(ObjectMapper)를 함께 제공한다.