๐ณ HTTP ์์ฒญ ๋ฐ์ดํฐ
- ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก HTTP ์์ฒญ ๋ฉ์ธ์ง๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 3๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
1๏ธโฃ GET- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ
- /url?username=hello&age=20
- ๋ฉ์ธ์ง ๋ฐ๋ ์์ด, URL์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํด์ ์ ๋ฌํ๋ค.
2๏ธโฃ POST - HTML Form
- content-type : application/x-www-form-urlencoded
- ๋ฉ์ธ์ง ๋ฐ๋์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํ์์ผ๋ก ์ ๋ฌ username=hello&age=20 ํ๋ค.
3๏ธโฃ HTTP message body ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ด์์ ์์ฒญ
- HTTP API ์์ ์ฃผ๋ก ์ฌ์ฉํ๊ณ , JSON, XML, TEXT ์ฌ์ฉ
- ๋ฐ์ดํฐ ํ์์ ์ฃผ๋ก JSON ์ ์ฌ์ฉ
- POST, PUT, PATCH
- ์์ 3๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ์ด๋ป๊ฒ ์กฐํํ์ฌ ์ฌ์ฉํ ์ ์๋์ง ์์๋ณด์.
๐ฟ GET - ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ
- ์ ๋ฌ ๋ฐ์ดํฐ๊ฐ ์๋์ ๊ฐ๋ค๊ณ ํด๋ณด์.
- username=hello
- age=20
- ๋ฉ์ธ์ง ๋ฐ๋ ์์ด URL ์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ํ ์ ์๋ค.
- ๋ณดํต ์ด๋ฌํ ๋ฐฉ๋ฒ์ ๊ฒ์, ํํฐ, ํ์ด์ง ๋ฑ์์ ๋ง์ด ์ฌ์ฉํ๋ค.
cf. ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ URL ์ ๋ค์๊ณผ ๊ฐ์ด ?๋ฅผ ์์์ผ๋ก ๋ณด๋ผ ์ ์๋ค. ์ถ๊ฐ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ค๋ฉด & ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
์์ ) localhost:8080/search/sale/price?low=10000&high=50000
- ์๋ฒ๋ HttpServletRequest ๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋๋ฅผ ํตํด ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํํ ์ ์๋ค.
String username = request.getParameter("username"); //๋จ์ผ ํ๋ผ๋ฏธํฐ ์กฐํ
Enumeration<String> parameterNames = request.getParameterNames(); //ํ๋ผ๋ฏธํฐ ์ด๋ฆ๋ค ๋ชจ๋ ์กฐํ
Map<String, String[]> parameterMap = request.getParameterMap(); //ํ๋ผ๋ฏธํฐ๋ฅผ Map ์ผ๋ก ์กฐํ
String[] usernames = request.getParameterValues("username"); //๋ณต์ ํ๋ผ๋ฏธํฐ ์กฐํ
- ๋ง์ฝ ์ด๋ฆ์ด ๊ฐ์ ๋ณต์ ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐํํด์ผ ํ๋ค๋ฉด ์๋์ ๊ฐ์ด ์กฐํํ ์ ์๋ค.
String[] usernames = request.getParameterValues("userName");
โ username=hello&username=kim ๊ณผ ๊ฐ์ด ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ํ๋์ธ๋ฐ ๊ฐ์ด ์ค๋ณต์ด๋ฉด ์ด๋ป๊ฒ ์กฐํํด ๋ณผ ์ ์์๊น?
- request.getParameter()๋ ํ๋์ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ๋ํด์ ๋จ ํ๋์ ๊ฐ๋ง ์์ ์ฌ์ฉํด์ผํ๊ณ
- ์ง๊ธ์ฒ๋ผ ์ค๋ณต์ผ ๊ฒฝ์ฐ request.getParameterValues()๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
๐ฟ POST - HTML Form
- HTML์ Form ์ ํตํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํ ์ ์๋ค.
<!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์ HTML Form ์ ์ ์กํ๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ ์ผ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด HTTP ๋ฉ์ธ์ง๋ฅผ ๋ง๋ ๋ค.
- ์ด๋ Content-type ์ด application/x-www-form-urlencoded ํ์์ธ๋ฐ
- ์ด ํ์์ GET์์ ์ดํด๋ณธ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํ์๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์กฐํ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ์ ์ ์ฅ์์๋ ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์กด์ฌํ์ง๋ง, ์๋ฒ์์๋ ๋์ ํ์์ด ๋์ผํ๊ธฐ ๋๋ฌธ์
- request.getParameter() ๋ก ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
cf. content-type ์ HTTP ๋ฉ์ธ์ง ๋ฐ๋์ ๋ฐ์ดํฐ ํ์์ ์ง์ ํ๋ค.
- ๋๋ฌธ์ body๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ฐ๋์ ํฌํจ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ํ์์ธ์ง ๊ผญ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค.
- ํผ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ํ์์ application/x-www-form-urlencoded ๋ผ๊ณ ํ๋ค.
๐ฟ API ๋ฉ์ธ์ง ๋ฐ๋
- HTTP API ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ์๊ฐ HTTP message body ์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์์ฒญํ๋ค.
- JSON, XML, TEXT๊ฐ ์ฃผ๋ก ์ฌ์ฉ๋๋ ํ์์ธ๋ฐ, ์ต๊ทผ์๋ JSON์ด ๋ง์ด ์ฌ์ฉ๋๋ค.
๐ก ๋จ์ ํ ์คํธ
- postman์ ์ฌ์ฉํ์ฌ ํ์ธํด๋ณด์.

@WebServlet(name = "requestBodyStringServlet", urlPatterns = "/request-body-string")
public class RequestBodyStringServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody = " + messageBody);
response.getWriter().write("ok");
}
}
์คํ๊ฒฐ๊ณผ

- HTTP message body ๋ InputStream ์ ์ฌ์ฉํ์ฌ ์ง์ ์ฝ์ ์ ์๋ค.
- inputStream ์ byte ์ฝ๋๋ฅผ ๋ฐํํ๋๋ฐ byte ์ฝ๋๋ ์ฐ๋ฆฌ๊ฐ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์(String) ๋ก ๋ณด๋ ค๋ฉด
- ๋ฌธ์ํ(Charset)๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค.
๐ก JSON
- postman ์ ์ฌ์ฉํ์ฌ ํ์ธํด๋ณด์.

- HTTP API์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ JSON ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋
- JSON ํ์์ ์ฌ์ฉํ ๋์๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ํ์ฑํด์ ๊ฐ์ฒดํ ์์ผ์ค ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
@Getter
@Setter
@ToString
public class HelloData {
private String username;
private int age;
}
@WebServlet(name = "requestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody = " + messageBody);
HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
System.out.println("helloData = " + helloData.getUsername());
System.out.println("helloData = " + helloData.getAge());
response.getWriter().write("ok");
}
}
์คํ๊ฒฐ๊ณผ

- JSON ๊ฒฐ๊ณผ๋ฅผ ํ์ฑํด์ ์ฌ์ฉํ ์ ์๋ ์๋ฐ ๊ฐ์ฒด๋ก ๋ณํ ๋๋ Jackson, Gson ๊ณผ ๊ฐ์ JSON ๋ณํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐํด์ ์ฌ์ฉํด ์ฃผ์ด์ผ ํ๋ค.
- ๋ค๋ง ์คํ๋ง ๋ถํธ๋ก Spring MVC ๋ฅผ ์ ํํ๋ฉด ๊ธฐ๋ณธ์ผ๋ก Jackson ๋ผ์ด๋ธ๋ฌ๋ฆฌ (ObjectMapper) ๋ฅผ ํจ๊ป ์ ๊ณตํด์ค๋ค.
<๊น์ํ - '์คํ๋ง MVC 1ํธ - ๋ฐฑ์๋ ์น ๊ฐ๋ฐ ํต์ฌ ๊ธฐ์ ' ์ ์ฐธ๊ณ ํ์์ต๋๋ค.>
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [spring] HTTP ์๋ต ๋ฐ์ดํฐ (0) | 2023.02.27 |
|---|---|
| [spring] HttpServletResponse (0) | 2023.02.23 |
| [spring] HttpServletRequest (0) | 2023.02.21 |
| [spring] ์๋ธ๋ฆฟ (0) | 2023.02.20 |
| [spring] ์น ์ ํ๋ฆฌ์ผ์ด์ ์ดํด (0) | 2023.02.18 |