[Spring] Spring 응답 데이터

김민범·2024년 10월 31일

Spring

목록 보기
10/29

HTTP Message Body(응답)

REST API를 개발할 때, Server는 Client로 HTML을 전달하지 않고, HTTP Message Body에 직접 데이터를 JSON 형식으로 담아 전송한다.

정적 HTML이나 View Template도 HTTP Message Body를 통해 전달되지만, 이번 설명에서는 이 과정 없이 HTTP Response Message를 직접 만들어 반환하는 경우를 다룬다.

HTTP Message Body 처리 방법

  1. HttpServletResponse 사용

    @Controller
    public class ResponseBodyController {
    	
    	@GetMapping("/v1/response-body")
    	public void responseBodyV1(HttpServletResponse response) throws IOException {
    		response.getWriter().write("data");
    	}
    }
    • response.getWriter().write("data");를 통해 HTTP 응답 본문에 문자열 "data"를 전송한다.
    • 기존 Servlet 사용 방식과 유사하다.
  2. ResponseEntity<> 사용

    @GetMapping("/v2/response-body")
    public ResponseEntity<String> responseBodyV2() {
    	return new ResponseEntity<>("data", HttpStatus.OK);
    }
    • HTTP 응답 본문에 "data" 문자열과 상태 코드 HttpStatus.OK를 포함하여 반환한다.
    • ResponseEntityHttpEntity를 상속하여, HTTP Message의 Header와 Body를 함께 처리할 수 있다.
  3. @ResponseBody(TEXT, JSON) 사용

    • TEXT 데이터 전송 예시

      @ResponseBody
      @GetMapping("/v3/response-body-text")
      public String responseBodyText() {
      	return "data"; // HTTP Message Body에 "data" 포함
      }
    • JSON 데이터 전송 예시

      @Data
      @NoArgsConstructor // 기본 생성자
      @AllArgsConstructor // 전체 필드 포함 생성자
      public class Tutor {
          private String name;
          private int age;
      }
      
      @ResponseBody
      @GetMapping("/v3/response-body-json")
      public Tutor responseBodyJson() {
      	return new Tutor("wonuk", 100); // HTTP Message Body에 JSON 형식으로 반환
      }
    • @ResponseBody를 사용하면 View를 거치지 않고, HTTP Message Converter를 통해 데이터를 응답 본문에 직접 입력할 수 있다.

  4. ResponseEntity 사용

    @ResponseBody
    @GetMapping("/v5/response-body")
    public ResponseEntity<Tutor> responseBody() {
    	Tutor tutor = new Tutor("wonuk", 100);
    	return new ResponseEntity<>(tutor, HttpStatus.OK);
    }
    • ResponseEntity의 두 번째 인자로 상태 코드 Enum을 제공하여 동적으로 상태 코드를 변경할 수 있다.
    • 조건에 따라 다른 상태 코드를 설정할 수 있으며, HttpEntity를 상속받아 Header와 Body 모두 처리 가능하다.

    정리

    Client에서 Server로 데이터를 전달하는 세 가지 방법

    1. GET - Query Param, Query String

      • URL에 데이터 포함: http://localhost:8080/tutor?name=wonuk&age=100
      • 사용하는 어노테이션: @RequestParam, @ModelAttribute
    2. POST - HTML Form(x-www-form-urlencoded)

      POST /form-data
      content-type: application/x-www-form-urlencoded
      key1=value1&key2=value2
      • 사용하는 어노테이션: @RequestParam, @ModelAttribute
    3. HTTP Request Body 직접 전송

      • JSON, TEXT, XML 데이터를 직접 HTTP Message Body에 포함
      • 사용하는 어노테이션: @RequestBody

    Server(Spring)에서 HTTP 응답을 Client에 전달하는 세 가지 방법

    1. 정적 리소스

      • 정적 HTML, CSS, JS, 이미지 등을 변경 없이 반환
    2. View Template

      • SSR(Server Side Rendering)에서 View를 반환
      • 사용하는 어노테이션: @Controller
    3. HTTP Message Body 직접 응답

      • 데이터(예: JSON)를 HTTP Message Body에 포함하여 반환
      • 사용하는 어노테이션: @ResponseBody, ResponseEntity<Object>

    요청과 응답 어노테이션 요약

    • 요청: @RequestParam, @ModelAttribute, @RequestBody
    • 응답: 정적 리소스, View Template(@Controller), @ResponseBody, ResponseEntity<Object>

0개의 댓글