Spring Boot의 REST Controller


<aside> 1️⃣ REST 개념 설명

</aside>

REST(Representational State Transfer)**는 웹 서비스를 구현하는데 가장 널리 사용되는 아키텍처 스타일이다. REST는 자원 지향 아키텍처(ROA)로, 웹 서비스는 자원(Resource)을 중심으로 설계되고 이들 자원에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행한다. Spring Boot에서는 이러한 RESTful 웹 서비스를 구현하기 위해 @RestController 어노테이션을 사용합니다.

<aside> 2️⃣ Rest Controller 생성 예시

</aside>

  1. 먼저, Book 클래스를 만듭니다:
public class Book {
    private Long id;
    private String title;
    private String author;

    // 생성자, getter, setter 생략...
}
  1. 이제 이 Book 객체에 대한 CRUD 연산을 수행하는 REST 컨트롤러를 작성하겠습니다.
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/books")
public class BookController {

    private final BookService bookService; // 서비스 계층은 비즈니스 로직을 담당합니다.

    public BookController(BookService bookService) {
        this.bookService = bookService;
    }

    @GetMapping
    public List<Book> getAllBooks() {
        return bookService.getAllBooks();
    }

    @GetMapping("/{id}")
    public Book getBook(@PathVariable Long id) {
        return bookService.getBook(id);
    }

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public Book createBook(@RequestBody Book book) {
        return bookService.createBook(book);
    }

    @PutMapping("/{id}")
    public Book updateBook(@PathVariable Long id, @RequestBody Book book) {
        return bookService.updateBook(id, book);
    }

    @DeleteMapping("/{id}")
    public void deleteBook(@PathVariable Long id) {
        bookService.deleteBook(id);
    }
}
  1. getAllBooks(): 이 메소드는 HTTP GET 요청을 "/books" URL에 매핑하고, 모든 책의 목록을 반환한다. @GetMapping 어노테이션은 이 메소드를 GET 요청에 매핑한다.
  2. getBook(Long id): 이 메소드는 특정 책을 반환한다. @PathVariable 어노테이션을 이용해 URL 경로의 일부인 책의 ID를 메소드 매개변수로 전달한다.
  3. createBook(Book book): 이 메소드는 새로운 책을 생성한다. @RequestBody 어노테이션을 사용해 HTTP 요청 본문을 Book 객체로 변환한다. @ResponseStatus(HttpStatus.CREATED) 어노테이션은 책이 성공적으로 생성되었을 때 HTTP 상태 코드 201(Created)를 반환하도록 지시한다.
  4. updateBook(Long id, Book book): 이 메소드는 특정 책의 정보를 수정한다. 여기서도 **@RequestBody**와 @PathVariable 어노테이션을 사용하여 HTTP 요청 본문의 Book 객체와 URL 경로의 ID를 메소드 매개변수로 전달한다.
  5. deleteBook(Long id): 이 메소드는 특정 책을 삭제한다. URL 경로의 ID는 @PathVariable 어노테이션을 통해 메소드 매개변수로 전달된다.

위의 컨트롤러는 BookService 클래스에 의존하고 있으며, 이는 비즈니스 로직을 처리하는 서비스 계층이다. 실제 애플리케이션에서는 이 계층이 데이터베이스와 상호 작용하게 될 것이다. 이렇게 함으로써, 우리는 Spring Boot에서 REST 컨트롤러를 이용해 CRUD 연산을 수행하는 방법을 알게 되었다.