////
Search
Duplicate
🎬

Chapter 6. REST 서비스 생성하기

이 장에서 배우는 내용
스프링 MVC에서 REST 엔드포인트 정의하기
하이퍼링크 REST 리소스 활성화하기
레포지터리 기반의 REST 엔드포인트 자동화
동적인 페이지가 등장하면서 기존의 정적인 페이지들은 거의 사라졌다. 동적인 페이지의 효율적인 구성을 위해 프론트와 백의 구분이 생겼으며 백엔드는 html 파일을 보내는 대신 REST API를 제공한다.

1. REST 컨트롤러 작성하기

기존의 스프링 MVC의 MPA에서 프론트의 SPA를 사용하게 되는 경우, 표현 계층이 백엔드의 처리와 거의 독립적이므로 의존성이 낮아진다.
이런 유연성을 확보하는 대신 복잡성을 얻게 되었다. 단순히 정보를 표시하는 것이 목적이라면 MPA를 사용하는 것이 적합하다. 관리자 페이지와 같은 것들 말이다.
REST API를 정의하는 경우에도 @GetMapping, @PostMapping과 같은 매핑 어노테이션들은 여전히 사용된다.

1. 서버에서 데이터 가져오기

@RestController는 다음 두 가지를 지원한다.
@Controller@Service와 같이 스테레오타입 어노테이션이므로 이 어노테이션이 지정된 클래스를 스프링의 컴포넌트 스캔으로 찾을 수 있다.
HTTP Response Body에 직접 쓰는 값을 반환하는 것임을 스프링에게 알려준다.
@Controller를 사용하는 경우, Response Body에 직접 쓰는 값을 반환함을 알려주려면 @ResponseBody 어노테이션을 지정해야 한다.
이외에도 ResponseEntity 객체를 반환하는 방법이 존재한다.

2. 하이퍼미디어 사용하기

기존의 기본적인 API에서는 해당 API를 사용하는 클라이언트가 API의 URL 스키마를 알고 있어야 했다.
API 클라이언트 코드에는 흔히 하드코딩된 URL 패턴을 사용하고 문자열로 처리한다. 그러나 API의 URL 스키마가 변경된다면 어떻게 될까?
따라서 API URL을 하드코딩하고 문자열로 처리하면 클라이언트가 의존성을 많이 가지게 되어 결합도가 증가하는 단점을 낳는다.
REST API를 구현하는 또 다른 방법으로 HATEOAS가 있다. 이는 API로부터 반환되는 리소스에 해당 리소스와 관련된 하이퍼링크들이 포함된다.
따라서 클라이언트가 최소한의 API URL만 알면 반환된느 리소스와 관련하여 처리 가능한 다른 API URL들을 알아내어 처리할 수 있다.
/users를 조회했을때, 세부 자원인 user를 조회하고 싶다면 해당 URL을 반환하는 식의 처리다.

3. 데이터 기반 서비스 활성화하기

스프링 데이터는 우리가 코드에 정의한 인터페이스를 기반으로 레포지터리 구현체를 자동으로 생성하여 필요한 기능을 수행한다.
외에도 스프링 데이터는 어플리케이션의 API를 정의하는 데 도움을 줄 수도 있는 기능이 존재한다고 하는데.. 표현 계층에 과하게 접근하는 것 같아 별로다.
물론 간단한 프로젝트라면 사용해도 좋을 것 같긴 하다.

요약

REST 엔드포인트는 스프링 MVC, 그리고 브라우저 지향의 컨트롤러와 동일한 프로그래밍 모델을 따르는 컨트롤러로 생성할 수 있다.
모델과 뷰를 거치지 않고 요청 응답 몸체에 직접 데이터를 쓰기 위해 컨트롤러의 핸들러 메소드엔 @ResponseBody 어노테이션을 지정할 수 있으며 ResponseEntity 객체를 반환해도 된다.
@RestController 어노테이션을 컨트롤러에 지정하는 경우 해당 컨트롤러의 각 핸들러 메소드에 @ResponseBody를 지정하지 않아도 되므로 컨트롤러를 단순화 해준다.
스프링 HATEOAS는 스프링 MVC에서 반환되는 리소스에 하이퍼링크를 추가해줄 수 있게 한다.
스프링 데이터 레포지터리는 스프링 데이터 REST를 사용하는 REST API로 하여금 노출시킬 수 있다.