기술과 산업/언어 및 프레임워크

Spring Boot 시리즈 2편 – REST API 설계와 Controller 작성 가이드

B컷개발자 2025. 4. 15. 20:00
728x90

Spring Boot에서 REST API를 어떻게 설계하고 컨트롤러를 구성할 수 있는지 실전 예제와 함께 설명합니다. 계층 구조, JSON 응답, REST 컨벤션까지 정리했습니다.


Spring Boot 시리즈 2편 – REST API 설계와 Controller 작성 가이드

Spring Boot를 활용한 웹 애플리케이션 개발의 핵심은 RESTful API 설계입니다.
이번 편에서는 실무에서 가장 많이 사용하는 REST API 구조 설계 패턴, 컨트롤러 구현 방식, 그리고 DTO 사용 전략까지 상세히 다루어 보겠습니다.


📌 REST API란?

REST(Representational State Transfer)는 HTTP 기반의 자원 중심 아키텍처 스타일입니다.
Spring Boot에서는 @RestController를 통해 RESTful API를 쉽게 구현할 수 있습니다.

키워드: Spring Boot REST API, @RestController, HTTP Method, DTO, Controller 설계


🧱 1. 프로젝트 디렉토리 기본 구조

Spring Boot에서 REST API를 구성할 때는 아래와 같은 구조가 가장 일반적입니다:

src/
└── main/
    └── java/
        └── com.example.demo/
            ├── controller/
            │   └── UserController.java
            ├── dto/
            │   └── UserDto.java
            ├── service/
            │   └── UserService.java
            ├── repository/
            │   └── UserRepository.java
            └── entity/
                └── User.java

✅ 계층별 역할

  • Controller: HTTP 요청/응답 처리
  • Service: 비즈니스 로직 처리
  • Repository: DB 접근 (JPA/Hibernate 등)
  • DTO(Entity): 데이터 전송 객체

🔧 2. @RestController로 API 설계하기

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

    @GetMapping
    public List<UserDto> getAllUsers() {
        return userService.getAllUsers();
    }

    @PostMapping
    public ResponseEntity<UserDto> createUser(@RequestBody UserDto userDto) {
        return ResponseEntity.ok(userService.createUser(userDto));
    }
}

주요 애노테이션

애노테이션 설명

@RestController JSON 기반 응답 처리
@RequestMapping 공통 URL 경로 지정
@GetMapping, @PostMapping HTTP 메서드 매핑
@RequestBody 요청 본문을 객체로 매핑
@ResponseBody 자동 JSON 변환 응답

📦 3. DTO를 활용한 클린한 데이터 설계

**DTO(Data Transfer Object)**는 컨트롤러와 서비스 간 역할 분리보안을 위한 핵심 설계 요소입니다.

public class UserDto {
    private String name;
    private String email;
}

엔티티(Entity) 그대로 노출하는 것이 아니라, DTO로 래핑하여 필요한 정보만 전달합니다.
이는 계층 간 결합도를 낮추고, API 응답의 유연성을 확보할 수 있게 해줍니다.


⚙️ 4. 예외 처리 – 글로벌 방식 추천

실무에서는 단순히 try-catch가 아닌, **전역 예외 처리(ControllerAdvice)**를 적용합니다.

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFound(UserNotFoundException e) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
    }
}

✅ REST API 설계 시 주의할 점

항목 설명

URL 설계 동사 대신 리소스 기반 명명 (예: /users)
응답 포맷 JSON 기반 통일, 상태 코드 명확화
입력 검증 @Valid, @Validated와 함께 BindingResult 사용
Swagger 활용 API 문서 자동화 및 테스트 툴 적용 권장

🧠 실무 인사이트

  • 컨트롤러는 "thin", 서비스는 "fat"이 원칙입니다. 컨트롤러는 로직을 담지 말고 서비스에 위임하세요.
  • DTO를 적극 활용하고, 엔티티를 직접 노출하지 마세요. 보안 문제 및 확장성 문제가 생깁니다.
  • 모든 API에는 명확한 응답 구조를 정해두고, 실패 시 예외 메시지도 표준화하세요.

✅ 마무리 요약

항목 정리

컨트롤러 구성 @RestController, @RequestMapping, @PostMapping 등
URL 패턴 /api/리소스명 형식 권장
DTO 전략 Entity 분리, 계층 간 전송 전용 객체
예외 처리 @ControllerAdvice를 통한 글로벌 처리
응답 구조 ResponseEntity로 HTTP 상태 명확히 제어

📌 다음 편 예고

Spring Boot 시리즈 3편: Spring Data JPA를 활용한 DB 연동 – Repository와 Entity 설계 전략

 

728x90