오늘 과제 마감 후 튜터님이 실시간으로 과제를 해셜해주셨다 근데 해설을 보는데
내가 이번 과제에서 응답을 보내줄 때 사용한 방식은ResetController을 이용한 @ResponseBody방식으로 보내줬다.
@GetMapping("/scheduler")
public List<SchedulerResponseDTO> getAllSchedules(){
return schedulerService.getAllSchedules();
}
그런데 이번 해설 세션에서 Controller 단에서 응답을 보내 줄때
튜터님이 처음보는 ResponseEntity를 이용하여 보내시는거였다 저게 뭔지 궁금해서
ResponseEntity에 대하여 정리해보려고 한다.
ResponseEntity란
Spring Framework에서 제공하는 클래스로, 웹 애플리케이션에서 HTTP 응답을 생성하고 제어하는데 사용된다고한다.
ResponseEntity는 ResponseBody에 추가적으로 상태코드를 직접 다룰 때 사용 가능하다.
또한 @ResponseBody를 붙이지 않아도 동작이 가능하다고한다
기존에 내가 사용한 ResponseBody 방식은 딱 데이터만 반환해주는 방식이기 떄문에
상태코드나 헤더 등을 직접 제어할 수 없다는 단점이 있었는데 이러한 문제를 조금 더 유연하게
해결하기 위해 ResponseEntity를 사용한다고 한다.
ResponseEntity는 HTTP 응답의 전체 (본문, 상태코드, 헤더)를 원하는 대로 설정해서 반환할 수 있다.
- HTTP 상태 코드 설정 : ResponseEntity를 사용하여 HTTP 응답의 상태 코드를 설정할 수 있다.
예를들어, 성공적인 응답에는 200 OK 또는 다른 성공 상태 코드를 설정할 수 있다.
- 응답 본문 설정 : ResponseEntity를 통해 응답 본문의 내용을 설정할 수 있다.
이 내용은 JSON, XML, HTML 또는 기타 형식으로 클라이언트에게 반환할 수 있다.
- 응답 헤더 설정 : 특정 헤더를 커스터마이즈하거나 추가할 수 있다.
- 제네릭 타입 지원 : ResponseEntity는 제네릭 클래스로 제공되므로, 반환할 데이터의 타입을
명시적으로 지정할 수 있다. 이를 통해 Spring은 데이터를 직렬화 하여
응답 본문에 적절하게 포함합니다.
ResponseEntity 구조
ResponseEntity는 HttpEntity를 상속받고 있기에
HttpStatus, HttpHeaders, HttpBody를 포함한다.
HttpHeader 와 Body의 차이점
헤더는 메세지에 대한 메타정보를 포함하고, 바디는 실제 데이터를 포함합니다. 요청과 응답 모두
헤더와 바디를 조합하여 완전한 HTTP 메세지를 형성하며, 이를 통하여 클라이언트와 서버간에
교환과 데이터 전송이 이루어진다.
ResponseEntity 사용법
직접 내가 했던 과제에서 Entity를 사용해봤다.아까 위에서 봤던 코드를 ResponseEntity로 바꿔봤다.
@GetMapping("/scheduler")
public ResponseEntity<List<SchedulerResponseDTO>> getAllSchedules(){
return ResponseEntity.ok()
.body(schedulerService.getAllSchedules());
}
.ok () : 200 ok status 코드를 반환하는 빌더 메서드이다. body를 넣을수도있고 안넣을 수도있다. 단, body를 넣을때는 Null을 사용하면 안된다.
.body () : 응답 데이터를 담아서 반환해준다.
이 외에도 사용할 수 있는 많지만 추가적인 사용법같은건 좀 더 공부해야할 것 같다. ResponseEntity는 ResponseBody에 비해 코드가 증가하지만 상태코드와 헤더를 유연하게 변경할 수 있다는 점에서많이 사용하는 것 같지만 지금으로써는 ResponseBody를 두고 굳이...? 싶은 생각이 들기는하지만ResponseEntity도 익숙해지도록 자주 사용해봐야겠다.
'TIL' 카테고리의 다른 글
JPA (1) | 2024.10.10 |
---|---|
IoC & DI (1) | 2024.10.07 |
Spring - 일정관리 앱 만들기 (0) | 2024.10.04 |
Spring MVC 구조 이해하기 (1) | 2024.10.01 |
Lombok (0) | 2024.09.27 |