REST 개념
REST(Representational State Transfer)는 웹 서비스를 구현하는데 가장 널리 사용되는 아키텍처 스타일이다.
REST는 자원 지향 아키텍처(ROA)로, 웹 서비스는 자원(Resource)을 중심으로 설계되고 이들 자원에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행한다.
Spring Boot에서는 이러한 RESTful 웹 서비스를 구현하기 위해 @RestController 어노테이션을 사용한다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(annotation = Controller.class)
String value() default "";
}
@RestController 어노테이션 설명
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
@RestController 어노테이션의 속성설명
@RestController의 사용법 및 목적
버전 정보
정리
@RestController 어노테이션은 RESTful 웹 서비스를 쉽게 구현할 수 있게 해주는 편리한 어노테이션이다. 클래스 레벨에서 사용되며, 해당 클래스의 모든 메서드가 @ResponseBody의 의미를 가지게 된다.
이를 통해 개발자는 HTTP 응답 본문에 직접 객체를 작성할 수 있으며, 이는 일반적으로 JSON 또는 XML 형식으로 클라이언트에 전송된다.
먼저, Book 클래스를 만든다.
public class Book {
private Long id;
private String title;
private String author;
// 생성자, getter, setter 생략...
}
다음으로 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);
}
}
완성된 코드 설명
getAllBooks():
이 메소드는 HTTP GET 요청을 "/books" URL에 매핑하고, 모든 책의 목록을 반환한다.
@GetMapping 어노테이션은 이 메소드를 GET 요청에 매핑한다.
getBook(Long id):
이 메소드는 특정 책을 반환한다.
@PathVariable 어노테이션을 이용해 URL 경로의 일부인 책의 ID를 메소드 매개변수로 전달한다.
createBook(Book book):
이 메소드는 새로운 책을 생성한다.
@RequestBody 어노테이션을 사용해 HTTP 요청 본문을 Book 객체로 변환한다. @ResponseStatus(HttpStatus.CREATED) 어노테이션은 책이 성공적으로 생성되었을 때 HTTP 상태 코드 201(Created)를 반환하도록 지시한다.
updateBook(Long id, Book book):
이 메소드는 특정 책의 정보를 수정한다.
여기서도 @RequestBody와 @PathVariable 어노테이션을 사용하여 HTTP 요청 본문의 Book 객체와 URL 경로의 ID를 메소드 매개변수로 전달한다.
deleteBook(Long id):
이 메소드는 특정 책을 삭제한다.
URL 경로의 ID는 @PathVariable 어노테이션을 통해 메소드 매개변수로 전달된다.