POST는 일반적으로 데이터를 서버에 전송할 때 사용된다. 예를 들어, 사용자가 로그인 정보나 신용카드 정보를 입력하는 폼이 있다면, 이 정보는 대게 POST 방식으로 서버에 전송된다.

 

HTTP POST 요청은 HTTP 요청 헤더와 함께 서버로 데이터를 전송하게 되는데, 이 데이터는 요청 본문(body)에 포함되며, 일반적으로 HTML 폼(form)으로부터 전송된다. 따라서 @RequestBody 어노테이션이 사용 가능한 것이다. 

 

요청 본문은 일반적으로 URL에는 표시되지 않기때문에 POST 방식이 GET 방식보다 보안이 높은 편이다.

또한, POST 방식은 데이터의 길이에 제한이 없다. 따라서 대용량의 데이터를 서버에 전송할 때 유용하다.

 

하지만, POST 방식으로 데이터를 전송할 때는 반드시 서버에서 데이터를 처리할 수 있는 방법을 제공해야 한다.

서버에서는 POST 요청을 받아들이고, 요청 본문의 데이터를 읽어 처리할 수 있도록 작업이 되어있어야 프로그램이 동작한다.

 

참고

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

다음과 같은 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" />
  address: <input type="text" name="address" />
  <button type="submit">전송</button>
</form>
</body>
</html>

F12를 눌러 개발자 도구를 연 다음 Network 탭을 확인해보면 Header의 Content-Type은 아래처럼 나온다.

application/x-www-form-urlencoded 이라는 Content-Type은 폼으로 데이터를 전송하는 형식을 나타낸다.
 
그리고 Payload 를 보면 아래와 같이 내가 입력한 정보가 담겨져 있는 것을 확인할 수 있다.

 

인텔리제이의 콘솔에서 확인해 보면 아래와 같이 Content-Type 과 데이터를 확인할 수 있다.

 

소스 Git : https://github.com/ShinHenry/Basic-Servlet-Project.git

 

GitHub - ShinHenry/Basic-Servlet-Project: SpringBoot 기반 Servlet 프로젝트

SpringBoot 기반 Servlet 프로젝트. Contribute to ShinHenry/Basic-Servlet-Project development by creating an account on GitHub.

github.com

 

 

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

 

+ Recent posts