스프링부트 - #6 REST

2020. 11. 17. 13:22개발&TIL/스프링

REST(Representational State Transfer)는 웹의 장점을 극대화 하는 통신 네트워크 아키텍처이며,
REST의 구현 원칙을 제대로 지키는 시스템을 RESTful이라고 함

HTTP와 URL의 단순하고 간결한 장점을 계승한 네트워크 아키텍처

RESTful 제약조건

  1. 클라이언트-서버 : 관심사의 명확한 분리
  2. 무상태성 : 서버에 클라이언트의 상태 정보를 저장하지 않음
  3. 캐시 가능: 클라이언트이 응답을 캐시
  4. 계층화 시스템 : 중개 서버나 로드 밸런싱, 공유 캐시 등의 기능을 사용하여 확장성이 있는 시스템 구성 가능
  5. 코드 온 디멘드 : 클라이언트는 서버에서 자바 애플릿, 자바스크립트 실행 코드를 전송받아 기능을 확장가능, 선택적 제약
  6. 인터페이스 일관성 - URI로 지정된 리소스에 균일하고 통일된 인터페이스 제공

인터페이스 일관성

  1. 자원 식별 : 웹 기반의 REST에서 리소스 접근은 주로 URI로 사용 (URI, parameter)
  2. 메시지를 통한 리소스 조작 : 클라이언트가 메타데이터를 가지고 있으면 자원을 수정, 삭제하는 충분한 정보를 같는것 (content-type)
  3. 자기 서술적 메시지 : 자신을 어떻게 처리해야 하는지 충분한 정보를 포함 (HTTP Method, Header)
  4. 애플리케이션 상태에 대한 엔진으로서의 하이퍼미디어(HATEOAS) : 응답할때 결과 데이터만 제공하는것이 아닌 URI를 함께 제공하는 원칙

REST API 설계하기

  • 자원(resource) : URI
  • 행위(vorb) : HTTP 메서드
  • 표현(representations) : 리소스에 대한 표현 (HTTP Message Body)

URI 설계

  • URI는 URL을 포함하는 계념

  • URI는 웹에 있는 자원의 이름과 위치를 식별

  • URI는 명사를 사용해야 하며 동사를 피해야 함

  • 동사의 표현은 HTTP 메서드인 GET, POST, PUT, DELETE 로 사용해야 하나 모든 경우에 완벽 호환 되진 않음

  • 단수형보다는 복수형을 사용

      http://localhost:8080/api/books
  • 컬렉션(리스트 등)으로 URI를 사용할 경우 컬렉션을 한번 더 감싼 중첩 형식으로 사용해야 추후 수정, 추가 시에 번거롭지 않음

행위 설계

  • books의 동사를 HTTP 메서드로 표현하는것
  • HTTP 기본 메서드 표현
Resource GET(read) POST(create) PUT(update) DELETE(delete)
/books book 목록보기 해당 book 추가 - -
/books/1 ID가 1인 book 보기 - ID가 1인 book 수정 ID가 1인 book 삭제

스프링 부트 데이터 레스트는 리포지토리 하나만 생성, MVC 패턴을 활용한 방식과 달리 컨트롤러와 서비스 단계 X

PageResource 객체

  • 이 객체를 생성하면 HATEOAS가 적용되며 페이징값까지 생성된 REST형 데이터를 생성

CORS 허용 및 시큐리티 설정

  • Ajax 통신용 코드에 적용되는 HTTP 요청시 동일 출처 정책
  • 출처는 자원 + 도메인 + 포트('http://locahost:8080') 로 결합된 문자열로 이 조합이 다르면 다른 출처로 판단
  • CORS(cross orgin resource sharing)은 서로 다른 도메인의 접근을 허용하는 권한 부여
  • org.springframework.web.cors.CorsConfiguration 객체를 이용하여 CORS 설정 가능

@RepositoryRestController

MVC 패턴에서 VC를 생략하는 도메인 + 리포지토리 REST API 로 생성 가능

detection-strategy 프로퍼티

리포지토리 노출전략을 설정가능한 프로퍼티값 (ALL, DEFAULT, ANNOTATION, VISIBILITY)

@RepositoryRestResource

스프링 부트 데이터 레스트 지원 어노테이션

@RepositoryRestController 주의 사항

  1. 매핑하는 URL 형식이 스프링 부트 데이터 레스트에서 정의하는 REST API 형식이 맞아야 함
  2. 기존에 기본으로 제공하는 URL 형식과 같게 제공해야 해당 컨트롤러의 메서드가 기존의 기본 API를 오버라이드
728x90

'개발&TIL > 스프링' 카테고리의 다른 글

스프링부트 - #7 batch  (0) 2020.11.17
스프링부트 - #5 oAuth2  (0) 2020.11.17
스프링부트 - #4 web  (0) 2020.11.17
스프링부트 - #3 테스트  (0) 2020.11.17
스프링부트 - #2 환경설정  (0) 2020.11.17