Spring Boot 프로젝트에서 ResponseEntity는 HTTP 응답을 효과적으로 제어하고 다양한 측면에서 사용자에게 정확한 응답을 제공하는 데 사용됩니다.
이번 포스팅에서는 ResponseEntity의 개념, 사용 이유, 자주 사용되는 HTTP 상태 코드, 그리고 Spring Boot에서의 구현 방법을 알아보겠습니다.
ResponseEntity는 HTTP 응답을 나타내는 Spring Framework의 클래스입니다. 이 클래스는 요청에 대한 응답의 HttpHeader, HttpBody 및 Status Code를 포함하여 클라이언트에게 전달할 수 있는 다양한 기능을 제공합니다.
HTTP 상태 코드 제어: ResponseEntity를 사용하면 응답에 대한 HTTP 상태 코드를 명시적으로 지정할 수 있습니다. 이는 클라이언트에게 정확한 상태 정보를 제공하는 데 도움이 됩니다.
응답 본문 및 헤더 제어: ResponseEntity를 통해 응답 본문과 헤더를 세밀하게 제어할 수 있습니다.
유연성: ResponseEntity를 사용하면 일반적인 객체 또는 커스텀 클래스를 응답으로 반환할 수 있으며, Spring은 자동으로 해당 객체를 적절한 형식으로 변환합니다.
상태 코드(Status Code)로는 100번대부터 500번대까지 매우 다양하게 있습니다.
여기서는 주로 사용되는 상태 코드를 알아보고 자세한 내용은 아래 링크에서 확인할 수 있습니다.
다음은 Spring Boot에서 ResponseEntity를 사용하는 방법을 알아보겠습니다.
ResponseEntity는 SpringFramework에서 제공되는 라이브러리이므로 의존성을 추가해주지 않아도 바로 사용할 수 있습니다.
import org.springframework.http.ResponseEntity;
@RestController
@RequestMapping("/api/books")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/{id}")
public ResponseEntity<Book> getBookById(@PathVariable Long id) {
Book book = bookService.getBookById(id);
if (book != null) {
return ResponseEntity.ok().body(book);
} else {
return ResponseEntity.notFound().build();
}
}
// 나머지 메서드들
}
getBookById() 서비스 요청에 대한 응답으로 ResponseEntity를 사용하여 반환해주고 있습니다.
요청한 ID에 해당하는 책이 존재하면 Book 객체를 반환, 그렇지 않으면 null을 반환합니다.
다음은 직접적인 Ststus Code를 사용하여 ResponseEntity를 작성해보겠습니다.
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/books")
public class BookController {
@GetMapping("/{id}")
public ResponseEntity<Book> getBookById(@PathVariable Long id) {
// 예시로 임의의 책을 반환
Book book = new Book(id, "Sample Book", "Sample Author");
// 상태 코드를 지정하여 ResponseEntity를 생성
return ResponseEntity.status(HttpStatus.OK).body(book);
}
@PostMapping
public ResponseEntity<Book> createBook(@RequestBody Book book) {
// 예시로 생성된 책을 반환
Book savedBook = new Book(1, book.getTitle(), book.getAuthor());
// 상태 코드를 지정하여 ResponseEntity를 생성
return ResponseEntity.status(HttpStatus.CREATED).body(savedBook);
}
// 나머지 메서드들
}
위와 같이 ResponseEntity.status(HttpStatus)를 사용하여 HTTP 상태 코드를 지정하고 .body로 body 값을 지정해주여 Response를 사용할 수 있습니다.
예시로는 Get 요청에 대한 Status 200 ResponseEntity, Create 요청에 대한 Status 201 ResponseEntity를 사용하였습니다.