반응형
@RestController는 주로 API를 생성할때 작성되는데 이번 시간에 한번 알아보도록 하자
1. Spring Boot의 REST Controller
1-1. Spring Boot의 REST Controller 이해하기
웹 서비스를 구축할 때 REST(Representational State Transfer) 아키텍처 스타일을 자주 접하게 된다. REST는 웹 서비스의 핵심으로, 자원(Resource)을 중심으로 설계되며, 이 자원에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행한다. Spring Boot에서는 이러한 RESTful 웹 서비스를 구현하기 위해 @RestController 어노테이션을 활용한다. 이 어노테이션은 클래스 레벨에서 사용되며, 해당 클래스의 모든 메서드는 HTTP 응답 본문으로 데이터를 반환한다.
1-2. @RestController의 깊은 이해
@RestController는 스프링 4.0부터 사용 가능한 어노테이션이다. 이 어노테이션은 클래스 레벨에서만 사용될 수 있으며, 런타임에도 정보가 유지된다. 이는 리플렉션을 사용하여 런타임 시에 어노테이션 정보를 읽을 수 있다는 것을 의미한다. 또한, Javadoc과 같은 문서에도 포함될 수 있다.
여기서 말하는 리플렉션이란?
@RestController 내부를 보면 @Controller와 @ResponseBody 어노테이션이 포함되어 있다. @Controller는 해당 클래스가 컨트롤러로 동작하게 하고, @ResponseBody는 메서드의 반환 값이 HTTP 응답 본문에 직접 작성되게 한다. 이러한 특성 덕분에 RESTful 웹 서비스를 간편하게 구현할 수 있으며, 주로 JSON 또는 XML 형식으로 클라이언트에 데이터를 전송하게 된다.
1-3. @RestController의 사용 목적 및 장점
@RestController 어노테이션의 주된 목적은 RESTful 웹 서비스를 효과적으로 만드는 것이다. 이 어노테이션을 사용함으로써, @Controller와 @ResponseBody를 동시에 적용할 수 있으며, 이는 HTTP 응답 본문에 직접 데이터를 작성하는 것을 가능하게 한다. 이런 특성은 API 개발에서 매우 유용하다.
1-4. 결론
@RestController 어노테이션은 Spring Boot에서 RESTful 웹 서비스를 구현할 때 중요한 역할을 한다. 이를 통해 개발자들은 HTTP 요청에 대한 응답을 효율적으로 처리할 수 있으며, 이는 웹 애플리케이션 개발의 핵심 요소가 된다. 스프링 프레임워크의 이러한 기능을 이해하고 활용하는 것은 모던 웹 애플리케이션을 개발하는 데 있어 필수적인 부분이다.
2. @RestController의 구성 및 특징
2-1. @RestController 어노테이션은 다음과 같다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(annotation = Controller.class)
String value() default "";
}
2-2. 여기서 중요한 부분을 설명한다.
- 클래스 레벨에서의 사용
- @Target(ElementType.TYPE)로 지정되어 있어서, 이 어노테이션은 클래스 레벨에서만 사용할 수 있다.
- @Target(ElementType.TYPE)로 지정되어 있어서, 이 어노테이션은 클래스 레벨에서만 사용할 수 있다.
- 런타임에서의 유지
- @Retention(RetentionPolicy.RUNTIME)으로 인해, 런타임에도 이 어노테이션의 정보가 유지되며, 리플렉션을 통해 읽을 수 있다.
- @Retention(RetentionPolicy.RUNTIME)으로 인해, 런타임에도 이 어노테이션의 정보가 유지되며, 리플렉션을 통해 읽을 수 있다.
- 문서화 가능
- @Documented로 지정되어 있어, Javadoc과 같은 문서에 포함될 수 있다.
- @Documented로 지정되어 있어, Javadoc과 같은 문서에 포함될 수 있다.
- 컨트롤러 기능
- 내부에 포함된 @Controller로 인해 클래스가 컨트롤러로 동작하게 된다.
- 내부에 포함된 @Controller로 인해 클래스가 컨트롤러로 동작하게 된다.
- HTTP 응답 본문 반환
- @ResponseBody를 포함하고 있어, 메서드의 반환 값이 HTTP 응답 본문으로 직접 작성된다.
- @ResponseBody를 포함하고 있어, 메서드의 반환 값이 HTTP 응답 본문으로 직접 작성된다.
2-3. 버전 정보 및 적용
이 어노테이션은 스프링 4.0 버전부터 사용 가능하며, 클래스 레벨에서 사용된다. 클래스 내의 모든 메서드는 자동으로 @ResponseBody를 가지게 되어, HTTP 응답 본문에 직접 객체를 작성할 수 있다. 일반적으로, 이 객체는 JSON 또는 XML 형식으로 클라이언트에 전송된다.
3. Spring Boot에서 @RestController를 활용한 CRUD 예시: 책 관리 시스템
Spring Boot와 @RestController를 활용해 간단한 책 관리 시스템을 만들어 보자. 이 예시에서는 책(Book) 객체에 대한 CRUD(Create, Read, Update, Delete) 연산을 수행하는 REST API를 구현해볼 것이다.
3-1. Book 클래스 정의
- 먼저, 책 정보를 나타내는 Book 클래스를 정의합니다. 이 클래스는 책의 ID, 제목, 저자 정보를 포함한다.
public class Book {
private Long id;
private String title;
private String author;
// 생성자, getter, setter 생략...
}
3-2. BookController: REST 컨트롤러 구현
- 다음으로, Book 객체에 대한 CRUD 연산을 처리하는 BookController를 작성한다.
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);
}
}
3-3. 결론
이 예시를 통해 Spring Boot에서 @RestController를 활용해 RESTful API를 구축하는 방법을 확인해 봤다. 각 메서드는 적절한 HTTP 메소드와 경로에 매핑되어, 클라이언트가 책 관련 데이터를 쉽게 조회, 추가, 수정, 삭제할 수 있게 해준다.
스프링의 Bean이 궁금하다면?
스프링의 @Component가 궁금하다면?
반응형
'Spring 기초 > Spring 기초 지식' 카테고리의 다른 글
스프링에서 데이터 전달의 핵심: VO와 DTO의 이해 및 활용 (0) | 2023.08.09 |
---|---|
Spring Boot 폼 데이터 바인딩: @ModelAttribute 활용법 (0) | 2023.08.09 |
Spring Boot 심화: 커스텀 어노테이션 만들기 (2편) (0) | 2023.08.08 |
Spring Boot 기초: 어노테이션 활용하기 (1편) (0) | 2023.08.08 |
Spring Framework 이해하기: 다형성, 개방-폐쇄 원칙(OCP), 인터페이스 활용의 장점 (0) | 2023.08.08 |