클라이언트에서 서버로 데이터를 전달하는 방법 (HTTP 요청 메시지)
1. GET - 쿼리 파라미터
GET 방식
/url?username=hello&age=20
- 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달한다.
*쿼리 파라미터 조회 메서드
메서드 | 내용 |
request.getParameterNames().asIterator() .forEachRemaining(파라미터 이름 -> 출력 방식)); |
전체 파라미터 조회 |
request.getParameter() | 단일 파라미터 조회 |
request.getParameterValues() | 이름이 같은 복수 파라미터 조회 |
- 검색, 필터, 페이징 등에서 많이 사용한다.
2. POST - HTML Form
- content-type : application/x-www-form-urlencoded
application/x-www-form-urlencoded 타입
=> username=hello&age=20
- HTTP메시지 바디에 쿼리 파라미터 형식으로 전달한다.
- 따라서, 메시지 바디에 해당 데이터를 포함해서 전달하기 때문에 바디에 포함된 데이터가 어떤 형식인지 content-type을 꼭 지정해야 한다.
- application/x-www-form-urlencoded 형식은 앞서 GET방식의 쿼리 파라미터 형식과 같다.
- 따라서, 클라이언트 입장에서는 데이터 전송 방식에 차이가 있지만, 서버 입장에서는 request.getParameter() 메서드로 GET, POST 방식을 편리하게 불러올 수 있다.
- 회원 가입, 상품 주문, HTML Form 에서 주로 사용한다.
3. HTTP message body에 데이터를 직접 담아서 요청
//getInputStream(): 메세지 body의 내용을 바이트 코드로 받음.
ServletInputStream inputStream = request.getInputStream();
//바이트 코드를 String으로 변환 (스프링에서 제공하는 StreamUtils 사용)
//바이트를 문자열로 변환 할 때에는 인코딩 타입을 지정해야함. (copyToString(inputStream, StandardCharsets.UTF_8))
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
- HTTP API(REST API)에서 주로 사용한다.
- HTTP API 안에 JSON, XML, 텍스트 데이터 정보를 그대로 담아서 서버에 전송한다.
- 데이터 형식은 주로 JSON 방식으로 사용한다.
- POST, PUT, PATCH를 사용할 수 있다.
<이러한 방식을 사용하는 예>
- 서버 간의 통신할 때
- 안드로이드, 아이폰 같은 앱에서 요청할 때
- React나 Vue.js 같은 웹 클라이언트에서 JS로 요청할 때
HTTP 요청 데이터 - API 메시지 바디 - JSON
- JSON 결과를 파싱해서 사용할 수 있는 자바 객체로 변환하려면 Jackson, Gson 같은 JSON 변환 라이브러리를 추가해서 사용해야 한다. 스프링 부트로 Spring MVC를 선택하면 기본으로 Jackson 라이브러리( ObjectMapper )를 함께 제공한다.
서버에서 클라이언트로 응답메세지(HTTP 응답 메시지)
HttpServletResponse
- HTTP응답 메세지를 생성한다.
- HTTP 응답코드 지정 (200, 400, 404, 401, 500 ...)
- response.setStatus(응답코드);
- 헤더 생성
- response.setHeader(설정할 속성이름, 값);
- 바디 생성
- HTTP 응답코드 지정 (200, 400, 404, 401, 500 ...)
- 편의 기능을 제공한다.
- Content-Type
- response.setContentType();
- response.setCharacterEncoding();
- 쿠키
- response.addCookie(쿠키 객체);
- Redirect
- response.sendRedirect(url 경로);
- Content-Type
단순 텍스트 응답
//[단순 텍스트 응답]
PrintWriter writer = response.getWriter();
writer.println("ok");
- response의 getWriter()메서드를 사용해서 단순 텍스트 응답 메시지를 보낼 수 있다.
HTML 응답
HTTP 응답으로 HTML을 반환할 때는 content-type을 text/html 로 지정해야 한다.
//Content-TYPE 설정하기 : text/html;charset=utf-8 (setContentType())
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
- 위의 설정을 한 다음 response의 getWriter()메서드를 사용해서 PrintWriter의 출력 메서드(println();)를 사용해서 HTML 코드를 작성할 수 있다.
//response의 getWriter로 응답메시지 작성
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<body>");
writer.println(" <div>안녕?</div>");
writer.println("</body>");
writer.println("</html>");
- 출력 결과물
API JSON 응답
HTTP 응답으로 JSON을 반환할 때는 content-type을 application/json 로 지정해야 한다.
- Jackson 라이브러리가 제공하는 ObjectMapper.writeValueAsString() 를 사용하면 객체를 JSON 문자로 변경할 수 있다.
'Spring' 카테고리의 다른 글
스웨거(Swagger)란? (1) | 2024.04.26 |
---|---|
MVC 패턴 (0) | 2023.10.15 |
웹 애플리케이션 이해 (0) | 2023.10.06 |
AOP (Aspect Oriented Programming) (0) | 2023.10.03 |
JPA(Java Persistance API) (0) | 2023.09.30 |