[Spring Boot] ResponseEntity 사용하기

2jjong·2023년 11월 23일
0

Spring Boot 프로젝트에서 ResponseEntity는 HTTP 응답을 효과적으로 제어하고 다양한 측면에서 사용자에게 정확한 응답을 제공하는 데 사용됩니다.
이번 포스팅에서는 ResponseEntity의 개념, 사용 이유, 자주 사용되는 HTTP 상태 코드, 그리고 Spring Boot에서의 구현 방법을 알아보겠습니다.

ResponseEntity란?

ResponseEntity는 HTTP 응답을 나타내는 Spring Framework의 클래스입니다. 이 클래스는 요청에 대한 응답의 HttpHeader, HttpBody 및 Status Code를 포함하여 클라이언트에게 전달할 수 있는 다양한 기능을 제공합니다.

왜 ResponseEntity를 사용해야 하는가?

  1. HTTP 상태 코드 제어: ResponseEntity를 사용하면 응답에 대한 HTTP 상태 코드를 명시적으로 지정할 수 있습니다. 이는 클라이언트에게 정확한 상태 정보를 제공하는 데 도움이 됩니다.

  2. 응답 본문 및 헤더 제어: ResponseEntity를 통해 응답 본문과 헤더를 세밀하게 제어할 수 있습니다.

  3. 유연성: ResponseEntity를 사용하면 일반적인 객체 또는 커스텀 클래스를 응답으로 반환할 수 있으며, Spring은 자동으로 해당 객체를 적절한 형식으로 변환합니다.

자주 사용되는 HTTP 상태 코드

상태 코드(Status Code)로는 100번대부터 500번대까지 매우 다양하게 있습니다.
여기서는 주로 사용되는 상태 코드를 알아보고 자세한 내용은 아래 링크에서 확인할 수 있습니다.

  • HttpStatus.OK: 200 OK
  • HttpStatus.CREATED: 201 Created
  • HttpStatus.NO_CONTENT: 204 No Content
  • HttpStatus.BAD_REQUEST: 400 Bad Request
  • HttpStatus.UNAUTHORIZED: 401 Unauthorized
  • HttpStatus.FORBIDDEN: 403 Forbidden
  • HttpStatus.NOT_FOUND: 404 Not Found
  • HttpStatus.INTERNAL_SERVER_ERROR: 500 Internal Server Error

자세한 HTTP Status Codes들

Spring Boot에서의 ResponseEntity 구현

다음은 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를 사용하였습니다.

profile
student

0개의 댓글