본문 바로가기
Spring/spring mvc

Http요청 데이터

by 킹차니 2021. 6. 25.
김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C

 

 

 

Http request로 클라이언트에서 서버로 데이터를 전달하는 방법은 딱 3가지입니다

 

1. GET - 쿼리 파라미터

/url?username=hello&age=20
메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달

) 검색, 필터, 페이징등에서 많이 사용하는 방식

 

2. POST - HTML Form

 content-type: application/x-www-form-urlencoded
 메시지 바디에 쿼리 파리미터 형식으로 전달 username=hello&age=20

 ) 회원 가입, 상품 주문, HTML Form 사용

 

3. HTTP message body

 HTTP API에서 주로 사용. JSON, XML, TEXT

 데이터 형식은 주로 JSON 사용

  POST, PUT, PATCH

 

 

 

 

 

하나씩 자세히 알아보겠습니다.

 

📩 1. GET - 쿼리 파라미터

다음 데이터를 클라이언트에서 서버로 전송해보겠습니다.

전달 데이터 : username=hello, age=20

메시지 바디 없이, URL쿼리 파라미터를 사용해서 데이터를 전달합니다. ) 검색, 필터, 페이징등에서 많이 사용하는 방식

쿼리 파라미터는 URL에 다음과 같이 ?를 시작으로 보낼 수 있습니다. 추가 파라미터는 &로 구분하면 됩니다.

http://localhost:8080/request-param?username=hello&age=20

 

서버에서는 HttpServletRequest 가 제공하는 다음 메서드를 통해 쿼리 파라미터를 편리하게 조회할 수 있습니다.

request.getParameter() 메소드를 사용하면 쿼리스트링을 뽑을 수 있습니다.

 

결과:

 

 


 

 

📩 2. POST - HTML Form

이번에는 HTML의 Form을 사용해서 클라이언트에서 서버로 데이터를 전송해보겠습니다.

주로 회원 가입, 상품 주문 등에서 사용하는 방식입니다.

 

특징 :

 content-type: application/x-www-form-urlencoded
 메시지 바디에 쿼리 파리미터 형식으로 데이터를 전달. username=hello&age=20

 

 

POSTHTML Form을 전송하면 웹 브라우저는 다음 형식으로 HTTP 메시지를 만듭니다. (웹 브라우저 개발자 모드 확인)

요청 URL: http://localhost:8080/request-param
content-type: application/x-www-form-urlencoded
message body: username=hello&age=20

 

 

application/x-www-form-urlencoded 형식은 앞서 GET에서 살펴본 쿼리 파라미터 형식과 같습니다. 따라서 쿼리 파라미터 조회 메서드를 그대로 사용하면 됩니다.
클라이언트(웹 브라우저) 입장에서는 두 방식에 차이가 있지만, 서버 입장에서는 둘의 형식이 동일하므로,

request.getParameter() 로 편리하게 구분없이 조회할 수 있습니다.

정리하면 request.getParameter()는 GET URL 쿼리 파라미터 형식도 지원하고, POST HTML Form 형식도 둘 다 지원합니다.

 

참고 
content-type은 HTTP 메시지 바디의 데이터 형식을 지정. 
GET URL 쿼리 파라미터 형식으로 클라이언트에서 서버로 데이터를 전달할 때는 HTTP 메시지 바디를 사용하지 않기 때문에 content-type이 없습니다. 
POST HTML Form 형식으로 데이터를 전달하면 HTTP 메시지 바디에 해당 데이터를 포함해서 보내기 때문에 바디에 포함된 데이터가 어떤 형식인지 content-type을 꼭 지정해야 합니다. 이렇게 폼으로 데이터를 전송하는 형식을 application/x-www-form-urlencoded 라 합니다.

 

이제 Post HTML Form에 대해 알아봤으니, 테스트 해보겠습니다.

Postman 테스트 주의사항 :
POST 전송시 Body x-www-form-urlencoded 선택
Headers에서 content-type: application/x-www-form-urlencoded 로 지정된 부분 꼭 확인

이전에 get방식으로 날려 결과를 확인한 위의 코드를 post방식으로 날려 확인해보겠습니다.

 

결과:

post로 날렸지만 getParameter()메소드로 조회 가능한 것을 알 수 있습니다.

 

 


 

 

📩  3. HTTP message body

HTTP message body에 데이터를 직접 담아서 요청

HTTP API에서 주로 사용, JSON, XML, TEXT

데이터 형식은 주로 JSON 사용
POST, PUT, PATCH

 

HTTP message body  단순 텍스트 전송



request.getInputStream()메서드를 사용하여 HTTP 메세지 바디의 데이터를 얻을 수 있습니다.

 

결과:

 

 

inputStream :

inputStreambyte 코드를 반환합니다. byte 코드를 우리가 읽을 수 있는 문자(String)로 보려면 문자표

(Charset)를 지정해주어야 한다. 여기서는 UTF_8 Charset을 지정해주었습니다.

 

 

 

HTTP message body JSON 

json형식으로 파싱할 수 있도록 클래스를 하나 만들어줍니다.

즉 JSON객체를 파싱해서 HelloData객체로 변환한 뒤, 그 결과를 반환할 것입니다.

 

HelloData

롬복을 사용하여 @Getter @Setter추가

 

아래의 서블릿 코드를 실행할 것입니다.

 

JSON 변환 라이브러리 :

JSON 결과를 파싱해서 사용할 수 있는 자바 객체로 변환하려면 Jackson, Gson 같은 JSON 변환 라이브러리를 추가해서 사용해야 합니다. 스프링 부트로 Spring MVC를 선택하면 기본으로 Jackson 라이브러리( ObjectMapper )를 함께 제공합니다.

 

 

Jackson의 도움으로 json을 객체로 담을 수 있습니다.

결과:

 

'Spring > spring mvc' 카테고리의 다른 글

HTTP 응답 데이터 (HTML, API JSON)  (0) 2021.06.25
HttpServletRespone 기본 사용법  (0) 2021.06.25
HttpServletRequest  (0) 2021.06.24
서블릿, 서블릿 만들기  (0) 2021.06.24
4 HTML, HTTP API, CSR, SSR  (0) 2021.06.24