SpringBoot 를 배워보자/3. 스프링 부트 기본 프로젝트 구조

스프링 부트 @RestController와 @RequestMapping을 이용한 REST API 개발

_Blue_Sky_ 2024. 9. 29. 09:04
728x90
728x90

스프링 부트 @RestController와 @RequestMapping을 이용한 REST API 개발 심층 분석

서론

스프링 부트는 간편하고 효율적인 개발 환경을 제공하여 REST API 개발을 획기적으로 용이하게 만들었습니다. 특히, @RestController@RequestMapping 애노테이션은 REST API 개발의 핵심 구성 요소로 자리매김하며 개발자들의 생산성을 크게 향상시켰습니다.

본 글에서는 스프링 부트를 이용한 REST API 개발의 기본 개념부터 심층적인 내용까지 상세하게 다루어, REST API 개발에 대한 이해를 높이고 실제 개발에 적용할 수 있도록 돕고자 합니다.

1. REST API란 무엇인가?

REST(Representational State Transfer)는 웹 서비스를 위한 아키텍처 스타일로, HTTP 프로토콜을 사용하여 자원(resource)을 주고받는 방식입니다. REST API는 JSON, XML 등의 표현 방식을 통해 클라이언트와 서버 간의 데이터 교환을 효율적으로 수행합니다.

  • 주요 특징:
    • 자원 기반: 각각의 자원은 고유한 URI를 가지며, HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 조작됩니다.
    • Stateless: 각 요청은 독립적으로 처리되며, 서버는 클라이언트의 상태를 유지하지 않습니다.
    • 표준화된 인터페이스: HTTP 메서드와 상태 코드를 사용하여 표준화된 인터페이스를 제공합니다.

2. 스프링 부트에서 REST API 개발하기

2.1. @RestController 애노테이션

  • 정의: @Controller@ResponseBody를 합친 애노테이션으로, HTTP 요청을 처리하고 그 결과를 HTTP 응답 본문에 직접 반환합니다.
  • 역할: REST API 컨트롤러를 선언하고, 메서드의 반환값을 HTTP 응답으로 변환합니다.

2.2. @RequestMapping 애노테이션

  • 정의: HTTP 요청과 특정 메서드를 매핑하는 애노테이션입니다.
  • 역할: 클래스 레벨 또는 메서드 레벨에 사용되며, URI 패턴, HTTP 메서드, 헤더 등을 기반으로 요청을 처리할 메서드를 지정합니다.
728x90

2.3. 간단한 예제

@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/users")
    public List<User> getAllUsers() {
        // 사용자 목록 조회 로직
        return userList;
    }

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        // 사용자 생성 로직
        return userRepository.save(user);
    }
}
  • 위 예제는 /api/users 엔드포인트에서 사용자 목록을 조회하고, 새로운 사용자를 생성하는 REST API를 정의합니다.
  • @GetMapping, @PostMapping은 각각 GET, POST 메서드를 처리하는 애노테이션입니다.
  • @RequestBody는 요청 본문에 포함된 JSON 데이터를 Java 객체로 변환합니다.

3. REST API 설계 고급 기능

3.1. HTTP 메서드 활용

  • GET: 자원 조회
  • POST: 새로운 자원 생성
  • PUT: 기존 자원 전체 업데이트
  • PATCH: 기존 자원 부분 업데이트
  • DELETE: 자원 삭제

3.2. URI 설계

  • 자원 중심: 명사를 사용하여 자원을 표현
  • 계층 구조: 슬래시(/)를 사용하여 자원 간의 관계 표현
  • 동사는 HTTP 메서드로 표현

3.3. 상태 코드 활용

  • 2xx: 성공
  • 4xx: 클라이언트 에러
  • 5xx: 서버 에러

3.4. 커스텀 헤더 활용

  • 요청/응답에 추가적인 정보 전달

3.5. 예외 처리

  • @ExceptionHandler: 예외 발생 시 처리
  • @ResponseStatus: HTTP 상태 코드 설정

4. 스프링 부트에서 제공하는 추가 기능

  • @PathVariable: URI 변수 사용
  • @RequestParam: 요청 파라미터 사용
  • @RequestHeader: 요청 헤더 사용
  • @RequestBody: 요청 본문 사용
  • ResponseEntity: HTTP 응답 커스터마이징

5. 결론

스프링 부트는 @RestController@RequestMapping 애노테이션을 통해 간결하고 효율적인 REST API 개발을 지원합니다. 본 글에서는 REST API의 기본 개념과 스프링 부트를 활용한 구현 방법을 상세하게 살펴보았습니다. 실제 개발에서는 다양한 상황에 맞춰 유연하게 적용하여 효과적인 REST API를 구축할 수 있습니다.

 

728x90
728x90