본문 바로가기
Spring/Spring MVC

[Spring MVC] 11. HTTP 요청 데이터 - 메시지 바디

by Kloong 2022. 11. 23.
더보기

Spring Boot & Thymeleaf 시리즈는 김영한 님의 "스프링 MVC 2편 - 백엔드 웹 개발 활용 기술" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다.

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의

웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있

www.inflearn.com

 

마크다운 형식으로 작성한 글을 블로그에 다시 올리는 거라 가독성이 많이 떨어집니다. 조금더 편하게 보시려면 아래의 Github repository에서 보시면 됩니다.

 

GitHub - Kloong1/TIL: Today I Learned.

Today I Learned. Contribute to Kloong1/TIL development by creating an account on GitHub.

github.com

HTTP 요청 데이터 - POST & HTML Form

HTML의 Form을 사용해서 클라이언트에서 서버로 데이터를 전송해보자.

특징

  • 메시지 바디에 쿼리 파리미터 형식으로 데이터를 전달한다.
    • 예) username=hello&age=20
  • Content-Type: application/x-www-form-urlencoded

HTML Form을 사용한 데이터 전송을 위해 src/main/webapp/basic/hello-form.html 을 생성하자.

src/main/webapp/basic/hello-form.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/request-param" method="post">
    username: <input type="text" name="username" />
    age: <input type="text" name="age" />
    <button type="submit">전송</button>
</form>
</body>
</html>
  • POST 메소드를 사용하고, 요청을 보낼 URL은 /request-param 임을 확인할 수 있다.

요청을 보낸 뒤 콘솔 출력을 확인해보면,

[전체 파라미터 조회] - start
username = kloongPost
age = 20
[전체 파라미터 조회] - end

[단일 파라미터 조회] - start
username = kloongPost
age = 20
[단일 파라미터 조회] - end

[이름이 같은 복수 파라미터 조회] - start
username = kloongPost
[이름이 같은 복수 파라미터 조회] - end

HTML Form에 담은 내용들이 잘 출력되는 것을 확인할 수 있다.

GET & 쿼리 파라미터 조회를 위해 작성했던 RequestParamServlet 객체를 그대로 사용할 수 있는 것을 알 수 있다.

정리

Content-Type: 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 헤더를 꼭 넣어줘야 한다.
이렇게 HTML Form으로 데이터를 전송하는 형식을 application/x-www-form-urlencoded 라 한다.

Postman을 사용한 테스트

HTML Form 테스트를 위해 HTML 파일을 만드는 것은 너무 귀찮은 일이다. 이 떄는 Postman을 사용하면 된다.

댓글