@RestController

코딩냥이·2024년 9월 10일

Annotation

목록 보기
1/34

@RestController

@RestController는 스프링 프레임워크에서 RESTful 웹 서비스를 개발할 때 사용되는 특별한 컨트롤러 어노테이션입니다.

기능

  • @Controller@ResponseBody를 결합한 편의 어노테이션입니다.
  • 모든 메서드에 @ResponseBody가 적용된 것과 동일한 효과를 냅니다.
  • HTTP 응답 본문에 직접 데이터를 반환합니다 (주로 JSON 또는 XML 형식).

사용 방법

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

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        // 사용자 조회 로직
        return user;
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        // 사용자 생성 로직
        return createdUser;
    }
}

주요 특징

  1. JSON 기본 반환: 객체를 반환하면 자동으로 JSON으로 직렬화됩니다.
  2. 뷰 해석 생략: 뷰 리졸버를 통한 뷰 탐색을 하지 않습니다.
  3. RESTful 서비스에 최적화: API 엔드포인트 구현에 이상적입니다.

@Controller vs @RestController

  • @Controller는 주로 뷰를 반환하는 전통적인 Spring MVC 컨트롤러에 사용됩니다.
  • @RestController는 데이터를 직접 반환하는 RESTful 웹 서비스에 사용됩니다.
// @Controller 사용 예
@Controller
public class WebController {
    @GetMapping("/hello")
    public String hello() {
        return "hello"; // 뷰 이름 반환
    }
}

// @RestController 사용 예
@RestController
public class ApiController {
    @GetMapping("/api/hello")
    public String hello() {
        return "Hello, World!"; // 문자열 직접 반환
    }
}

응답 타입

@RestController는 다양한 타입의 반환값을 지원합니다:

  1. 객체: JSON으로 직렬화됩니다.
  2. 컬렉션: JSON 배열로 직렬화됩니다.
  3. 문자열: 텍스트/일반 형식으로 반환됩니다.
  4. ResponseEntity: HTTP 상태 코드, 헤더, 본문을 세밀하게 제어할 수 있습니다.
@GetMapping("/users")
public ResponseEntity<List<User>> getAllUsers() {
    List<User> users = userService.getAllUsers();
    return ResponseEntity.ok(users);
}

예외 처리

@RestController에서의 예외 처리는 @ExceptionHandler@ControllerAdvice를 통해 할 수 있습니다:

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

베스트 프랙티스

  1. 명확한 API 설계: 각 엔드포인트의 목적을 명확히 하고, RESTful 원칙을 따릅니다.
  2. 버전 관리: API 버전을 URL이나 헤더에 포함시켜 관리합니다.
  3. 적절한 HTTP 메서드 사용: GET, POST, PUT, DELETE 등을 올바르게 사용합니다.
  4. 데이터 유효성 검사: 입력 데이터에 대한 유효성 검사를 수행합니다.
  5. 문서화: Swagger나 Spring REST Docs를 사용하여 API를 문서화합니다.

결론

@RestController는 RESTful 웹 서비스 개발을 크게 간소화합니다. JSON 기반의 API를 쉽게 생성할 수 있게 해주며, 스프링의 강력한 기능들과 결합하여 효율적인 백엔드 서비스 구축을 가능하게 합니다.

연관 포스팅

@Controller

profile
HelloMeow~!

0개의 댓글