REST API 기반 웹 애플리케이션의 계층은 크게 API 계층(API Layer), 서비스 계층(Service Layer), 데이터 액세스 계층(Data Access Layer)으로 구분된다.
API 계층: 웹 브라우저나 모바일 기기 등 클라이언트의 요청을 직접적으로 전달받는 계층
API 계층에는 Controller 클래스와 DTO 클래스가 있다.
Controller는 클라이언트의 HTTP 요청을 직접적으로 전달받는다.
즉, Controller 클래스가 Spring MVC에서 클라이언트 요청의 최종 목적지(Endpoint)이다.
@RestController
@RequestMapping
@RestController
내부에는 @Component
가 존재하기 때문에 애플리케이션 로딩 시, @RestController
가 붙은 클래스를 Spring Bean으로 등록해준다.⭐️ 추가로 알게 된 사실!
사실
@RestController
는 (1) 해당 클래스를 Rest API를 사용하는 Controller라고 알려주는 기능과 (2) 내부의@Component
을 통해서 해당 클래스를 Spring Bean으로 등록해주는 목적만이 존재하는 줄 알았다.
하지만 그 외에도 매우 중요한 목적이 존재했다.
@RestController
의 다른 주 목적은 Json 형태로 객체 데이터를 반환하는 것이다.
=>@RestController
=@Controller
+@ResponseBody
따라서@RestController
를 붙임으로써 해당 클래스는 Json 형태로 객체 데이터를 반환해준다!
Controller 클래스 레벨에 추가해서, 클래스에 사용되는 공통 URL를 설정한다.
ex) @RequestMapping("/v1/members")
클라이언트의 요청과 클라이언트 요청을 처리하는 핸들러 메서드를 매핑해주는 역할
HTTP Method 타입에 맞게 각 메서드에 Mapping 애너테이션을 추가해줘야 한다.
ex) POST Method에는 @PostMapping
을, GET Method에는 @GetMapping
을 추가
@PostMapping
: 클라이언트의 Request Body를 서버에 생성할 때 사용하는 애너테이션
@GetMapping
: 클라이언트가 서버에 리소스를 조회할 때 사용하는 애너테이션
@PathVariable
: URI 변수를 파라미터로 전달받을 때 사용하는 애너테이션
ResponseEntity 객체로 응답 데이터와 HTTP 응답 상태를 래핑해서 리턴한다.
💡 HTTP 응답 상태를 같이 래핑하는 이유는?
클라이언트는 서버가 요청을 어떻게 처리하였는지 알 수 있고 이를 기반으로 어떤 작업을 수행할지 결정할 수 있기 때문에