REST Controller

mangez_js·2024년 12월 26일

Study

목록 보기
33/47

1. REST Controller의 주요 특징

  1. VS @Controller
  • @Controller는 웹 애플리케이션에서 뷰(View)를 반환하는데 주로 사용
  • @RestController는 JSON, XML과 같은 데이터를 반환하며, 뷰를 렌더링하지 않습니다.
  • @RestController@Controller@ResponseBody를 결합한 형태입니다.
    @Controller
    @ResponseBody
    public class MyController{
    }
    위 코드를 단순화한 것이 @RestController입니다.
  1. 자동 JSON 변환
  • Spring Boot는 Jackson 라이브러리를 사용하여 Java 객체를 JSON으로 변환합니다.
  • 클라이언트 요청의 JSON 데이터를 Java 객체로 매핑하거나
  • Java 객체를 JSON 형식으로 변환하여 응답으로 반환합니다.

2. REST Controller의 구조와 동작

  1. 기본 예제
    @RestController
    @RequestMapping("/api/users")
    public class UserController{
    	@GetMapping
       public List<User> getUsers(){
    		return List.of(
           	new User(1, "mangez1", "mangez1@example.com"),
               new User(2, "mangez2", "mangez2@example.com"_
           );
       }
       
       @PostMapping
       public User createUser(@RequestBody User user){
       	return user;
       }
    }
  2. HTTP 요청 흐름
  • 클라이언트가 특정 URI로 HTTP 요청을 전송합니다.
  • 요청은 DispatcherServlet에 의해 처리되고, 적절한 Controller로 라우팅합니다.
  • @RestController는 요청 데이터를 처리하고 적절한 응답을 생성하여 반환합니다.

3. REST Controller 주요 어노테이션

  1. @RestController
  • 클래스 수준에서 사용하며, 이 클래스가 RESTful 요청을 처리한다고 선언합니다.
  1. HTTP 메서드 매핑 어노테이션
  • @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping 각 어노테이션은 특정 HTTP 메서드에 매핑됩니다.
  1. @RequestBody
  • 요청 본문(JSON)을 Java 객체로 변환합니다.
    @PostMapping
    public User createUser(@RequestBody User user){
    	return user;
    }
  1. @PathVariable
  • URL 경로의 변수 값을 가져옵니다.
    @GetMapping("/{id}")
    public User getUserById(@PathVariable int id){
    	return new User(id, "mangez", "mangez@example.com");
    }
  1. @RequestParam
  • 요청 파라미터를 가져옵니다.
    @GetMapping
    public List<User> getUsers(@RequestParam String role){
    	return userService.findByRole(role);
    }
  1. @ResponseStatus
  • 응답 상태 코드를 설정합니다.
    @DeleteMapping("/{id}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public void deleteUser(@PathVariable int id){
    	userService.delete(id);
    }

    4. REST Controller의 장점

  1. 간결한 코드 작성
  • @ResponseBody를 따로 선언하지 않아도 데이터를 반환할 수 있습니다.
  1. 효율적인 데이터 처리
  • JSON, XML 데이터 자동 변환을 통해 클라이언트-서버 간 데이터 통신이 간단해집니다.
  1. 표준화된 방식
  • RESTful API의 설계 원칙을 기반으로 통신이 이루어집니다.

    5. REST Controller 사용 시 주의사항

  1. 계층화된 설계
  • Controller는 비즈니스 로직을 포함하지 않도록 하고, Service와 Repository 계층을 활용합니다.
  1. 적절한 응답 사앹 코드 사용
  • 클라이언트가 요청의 결과를 명확히 이해할 수 있도록 상태 코드를 신경 써야 합니다.
  1. 예외 처리
  • @ControllerAdvice를 활용하여 전역적으로 예외를 처리합니다.
  1. API 문서화
  • Swagger와 같은 도구를 사용하여 RESTful API를 문서화합니다.

0개의 댓글