Spring Boot에서 REST 컨트롤러 활용하기: @RestController 어노테이션 이해하기

2023. 8. 8. 21:42·Spring/Spring 기초 지식
반응형

@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과 같은 문서에도 포함될 수 있다.

 

여기서 말하는 리플렉션이란?

 

자바 리플렉션(Java Reflection)과 스프링(Spring)의 관계

이번 포스트에서는 자바 리플렉션과 이걸 사용하는 스프링에 대해서 알아보자 1. 자바 리플렉션이란 1-1. 리플렉션이란 무엇인가 리플렉션은 자바에서 클래스나 멤버에 대한 정보를 런타임에 조

curiousjinan.tistory.com

restController 어노테이션 상세설명
restController 어노테이션 상세설명

@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 어노테이션은 다음과 같다.

restController 어노테이션
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)로 지정되어 있어서, 이 어노테이션은 클래스 레벨에서만 사용할 수 있다.

  • 런타임에서의 유지
    • @Retention(RetentionPolicy.RUNTIME)으로 인해, 런타임에도 이 어노테이션의 정보가 유지되며, 리플렉션을 통해 읽을 수 있다.

  • 문서화 가능
    • @Documented로 지정되어 있어, Javadoc과 같은 문서에 포함될 수 있다.

  • 컨트롤러 기능
    • 내부에 포함된 @Controller로 인해 클래스가 컨트롤러로 동작하게 된다.

  • 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이 궁금하다면?

 

Spring의 핵심 이해: @Bean의 기본과 활용

이번 포스트에는 @Bean에 대해 소개한다. Spring Framework에서 @Bean은 매우 중요한 개념이다. 이는 개발자가 직접 제어할 수 없는 외부 라이브러리나 복잡한 구성이 필요한 객체를 스프링의 관리하에

curiousjinan.tistory.com

스프링의 @Component가 궁금하다면?

 

Spring의 핵심 이해: @Component의 기본과 활용

이번에는 저번@Bean에 이어서 @Component에 대해서 알아보자 Spring Framework의 @Component 어노테이션은 클래스 인스턴스를 스프링 빈으로 자동 등록한다. 이는 의존성 주입과 빈 생명주기 관리를 효율적

curiousjinan.tistory.com

 

반응형

'Spring > Spring 기초 지식' 카테고리의 다른 글

스프링에서의 데이터베이스 접근 방법: DAO, Mapper, 그리고 @Mapper 어노테이션 사용법  (0) 2023.08.09
스프링에서 데이터 전달의 핵심: VO와 DTO의 이해 및 활용  (0) 2023.08.09
Spring Boot 심화: 커스텀 어노테이션 만들기 (2편)  (0) 2023.08.08
Spring Boot 기초: 어노테이션 활용하기 (1편)  (0) 2023.08.08
@ControllerAdvice, @RestControllerAdvice - 중앙집중 예외처리  (0) 2023.08.07
'Spring/Spring 기초 지식' 카테고리의 다른 글
  • 스프링에서의 데이터베이스 접근 방법: DAO, Mapper, 그리고 @Mapper 어노테이션 사용법
  • 스프링에서 데이터 전달의 핵심: VO와 DTO의 이해 및 활용
  • Spring Boot 심화: 커스텀 어노테이션 만들기 (2편)
  • Spring Boot 기초: 어노테이션 활용하기 (1편)
Stark97
Stark97
문의사항 또는 커피챗 요청은 링크드인 메신저를 보내주세요! : https://www.linkedin.com/in/writedev/
  • Stark97
    오늘도 개발중입니다
    Stark97
  • 전체
    오늘
    어제
    • 분류 전체보기 (246) N
      • 개발지식 (20)
        • 스레드(Thread) (8)
        • WEB, DB, GIT (3)
        • 디자인패턴 (8)
      • JAVA (21)
      • Spring (88)
        • Spring 기초 지식 (35)
        • Spring 설정 (6)
        • JPA (7)
        • Spring Security (17)
        • Spring에서 Java 활용하기 (8)
        • 테스트 코드 (15)
      • 아키텍처 (6)
      • MSA (15) N
      • DDD (11) N
      • gRPC (9)
      • Apache Kafka (18)
      • DevOps (23)
        • nGrinder (4)
        • Docker (1)
        • k8s (1)
        • 테라폼(Terraform) (12)
      • AWS (32)
        • ECS, ECR (14)
        • EC2 (2)
        • CodePipeline, CICD (8)
        • SNS, SQS (5)
        • RDS (2)
      • notion&obsidian (3)
      • 동아리 (0)
  • 링크

    • notion기록
    • 깃허브
    • 링크드인
  • hELLO· Designed By정상우.v4.10.0
Stark97
Spring Boot에서 REST 컨트롤러 활용하기: @RestController 어노테이션 이해하기
상단으로

티스토리툴바