minOS

스프링 MVC 기본 기능 - 응답(2) 본문

TIL/김영한의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

스프링 MVC 기본 기능 - 응답(2)

minOE 2024. 8. 1. 16:18
728x90

HTTP 응답 - HTTP API, 메시지 바디에 직접 입력

HTTP API를 제공할 때는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. 이 경우 정적 리소스나 뷰 템플릿을 거치지 않고, 서버가 직접 HTTP 응답 메시지를 생성하여 클라이언트에 전달한다.

1) 문자열 응답을 직접 HttpServletResponse 객체를 사용해 전송하는 방법
@GetMapping("/response-body-string-v1")
    public void responseBodyV1(HttpServletResponse response) throws IOException {
        response.getWriter().write("ok");
    }

 

서블릿을 직접 다룰 때 처럼 response.getWriter().write("ok");
HttpServletResponse 객체를 통해서 HTTP 메시지 바디에 직접 `ok` 응답 메시지를 전달한다.

2) ResponseEntity를 사용해 문자열 응답을 전송하는 방법
@GetMapping("/response-body-string-v2")
    public ResponseEntity<String> responseBodyV2() {
        return new ResponseEntity<>("ok", HttpStatus.OK);  // 상태 코드 200과 함께 "ok" 문자열을 반환
    }

`ResponseEntity` 엔티티는 `HttpEntity` 를 상속 받았는데, HttpEntityHTTP 메시지의 헤더, 바디 정보를 가

지고 있다. `ResponseEntity` 는 여기에 더해서 HTTP 응답 코드를 설정할 수 있다. `HttpStatus.OK` 로 변경하면 200 응답이 나가는 것을 확인할 수 있다.


4) ResponseEntity를 사용해 JSON 형식의 객체를 전송하는 방법
@GetMapping("/response-body-json-v1")
    public ResponseEntity<HelloData> responseBodyJsonV1() {
        HelloData helloData = new HelloData();
        helloData.setUsername("미노이");  // HelloData 객체에 사용자 이름 설정
        helloData.setAge(20);  // HelloData 객체에 나이 설정
        return new ResponseEntity<>(helloData, HttpStatus.OK);  // 상태 코드 200과 함께 HelloData 객체를 JSON 형식으로 반환
    }

 `ResponseEntity` 를 반환한다. HTTP 메시지 컨버터를 통해서 JSON 형식으로 변환되어서 반환된다.


5) JSON 형식의 객체를 간단히 전송하는 방법

 @ResponseStatus(HttpStatus.OK)  // 응답 상태 코드를 200으로 설정
    @GetMapping("/response-body-json-v2")
    public HelloData responseBodyJsonV2() {
        HelloData helloData = new HelloData();
        helloData.setUsername("미노이");  // HelloData 객체에 사용자 이름 설정
        helloData.setAge(20);  // HelloData 객체에 나이 설정
        return helloData;  // HelloData 객체를 JSON 형식으로 반환
    }

 

ResponseEntityHTTP 응답 코드를 설정할 수 있는데, `@ResponseBody` 를 사용하면 이런 것을 설정하기 까

다롭다
@ResponseStatus(HttpStatus.OK)` 애노테이션을 사용하면 응답 코드도 설정할 수 있다.

물론 애노테이션이기 때문에 응답 코드를 동적으로 변경할 수는 없다. 프로그램 조건에 따라서 동적으로 변경하려면 ResponseEntity를 사용하면 된다.

 

 

 

@RestController

 Spring에서 RESTful 웹 서비스를 만들 때 사용하는 애너테이션이다. 이 애너테이션을 클래스에 붙이면, 클래스의 모든 메서드는 자동으로 JSON 또는 XML 형식의 데이터를 HTTP 응답 본문으로 반환한다. 이는
@Controller와@ResponseBody를 합친 기능을 제공한다.

 

728x90