[Spring in Action] Spring REST

728x90
반응형
SMALL

Spring in Action (5판)

  • 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발
  • Walls, Craig 지음
  • 제어펍 출판사
  • 2020.05.14

 

스프링 인 액션 개인 스터디 내용을 정리하자.

 

 

 

 


REST (Representational State Transfer)

자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.

HTTP URL을 통해 자원을 명시하고, HTTP 메서드(GET, POST, DELETE, PUT, PATCH)를 통해 해당 자원에 대한 CRUD 오퍼레이션을 적용하는 것

즉, REST는 자원 기반의 구조(ROA - Resource Oriented Architecture) 설계의 중심에 Resource가 있고 HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍처를 의미한다.

구성요소

자원 (Resource) : URI

모든 자원에는 고유한 ID가 존재하고, 이 자원은 Server에 존재

자원을 구별하는 ID는 HTTP URI로 구분

Client는 URI을 이용하여 자원을 지정하고, 해당 자원에 대한 조작을 Server에 요청

 

  • 리소스간의 계층 관계는 / 로 표현 
  • 언더바(_) 보다는 하이픈(-) 권장
  • 소문자 사용
  • 확장자는 제외
  •  

행위 (Verb) : HTTP Method

Client는 HTTP Method를 이용하여 지정한 자원에 대한 조작을 요청

표현 (Representation of Resource) : Message

Client가 Server에 자원에 대한 조작을 요청하면 Server는 이에 대한 적절한 응답(Representation)을 전달

 

특징

Uniform Interface

Client가 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처

 

한정적인 인터페이스를 사용하면 URL 길이가 짧아질 뿐만 아니라 하나의 URL을 이용하여 많은 Representation (GET, POST, DELETE, PUT, PATCH)을 할 수 있다.

  • GET : 리소스 데이터 읽기
  • POST : 리소스 생성
  • PUT : 리소스 전체 변경 (전체 속성 값이 수정, 누락된 속성은 null로 변경됨)
  • PATCH : 리소스 일부 변경 (null 체크 로직과 변경할 속성을 설정하는 로직이 추가되어야 함)
  • DELETE : 리소스 삭제
  •  

Stateless

작업을 위한 상태 정보를 별도로 저장하고 관리하지 않는다.

 

세션, 쿠키 정보를 저장하고 있지 않기 때문에 Server는 들어오는 요청을 단순히 처리하기만 하면 된다.

 

서비스의 자유도가 높아지고, 불필요한 정보를 관리하지 않기 때문에 구현이 단순해진다.

hoooon-s.tistory.com/63

 

[Spring in Action] Stateless vs Stateful

Spring in Action (5판) 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발 Walls, Craig 지음 제어펍 출판사 2020.05.14 스프링 인 액션 개인 스터디 내용을 정리하자. Stateful Server와 Client..

hoooon-s.tistory.com

 

Cacheable

REST는 웹 표준 HTTP를 그대로 사용하기에, 웹에서 사용하는 기존 인프라를 그대로 사용할 수 있다.

 

따라서, HTTP가 가진 캐싱 기능을 적용할 수 있다.

 

캐싱 기능은 주의하여 사용 필요!

 

ex) 잘못된 사용자 정보 캐싱......

 

Self-Descriptiveness

Method + URI로 이루어져 있어, REST API만 보고도 쉽게 이해할 수 있는 자체 표현 구조를 갖는다.

 

 

Client - Server 구조

Client와 Server의 역할이 명확하고 의존성이 낮다.

 

 

Hierarchical Structure

다중 계층으로 구성될 수 있으며, 보안, 로드 밸런싱, 암호화 계층 등을 추가해 구조상의 유연성을 둘 수 있다.

 

또한, Proxy, Gateway 같은 네트워크 기반의 중간 매체를 사용할 수 있다.

 

REST API

REST 기반으로 API를 구현한 것이다.

API (Application Programming Interface)

데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환 가능하도록 하는 것이다.

 

RESTful

이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것

 

RESTful한RESTful 한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서는 굳이 RESTful 한 API를 구현할 필요는 없다.

 

사용

@RestController
@RequiredArgsConstructor
public class SampleController {
     
    private final SampleService sampleService;
     
    @GetMapping("/hello/{id}")
    public String hello(@PathVariable("id") String id) {
        return id + "hello";
    }
 
    @PostMapping("/save")
    @ResponseStatus(HttpStatus.CREATED)
    public SampleDto save(@RequestBody SampleDto sampleDto) {
         
    }
}

@RestController = @Controller + @ResponseBody

스테레오타입 애노테이션으로 컴포넌트 검색으로 찾을 수 있게 해준다.

 

컨트롤러의 모든 HTTP 요청 처리 메서드에서 HTTP 응답 몸체에 직접 쓰는 값을 반환한다는 것을 스프링에 알려주는 역할

 

@Controller 애노테이션은 뷰로 보여줄 값을 반환하지만, @RestController는 반환 값이 뷰를 통해 HTML로 변환되지 않고 직접 HTTP 응답으로 브라우저에 전달된다.

 

 

@PathVariable

Mapping 엔드포인트 경로의 플레이스홀더({"id"})에 대응하는 값 지정

 

 

@RequestBody

요청 몸체의 JSON 데이터가 객체로 변환되어 매개변수와 바인딩

 

 

@ResponseStatus

해당 요청이 성공적이면서 요청의 결과로 리소스가 생성될 때 클라이언트에게 같이 전달되는 상태 코드

 

책에서는 항상 @ResponseStatus를 사용하여 클라이언트에게 더 서술적이며 정확한 HTTP 상태 코드를 전달하는 것이 좋다고 한다.

음, 실제 프로젝트에서 본 적 없음,,,,

 

Rest Template

hoooon-s.tistory.com/62

 

[Spring in Action] Spring RestTemplate

Spring in Action (5판) 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발 Walls, Craig 지음 제어펍 출판사 2020.05.14 스프링 인 액션 개인 스터디 내용을 정리하자. RestTemplate Spring 3.0부..

hoooon-s.tistory.com

 

Rest Sample Code

hoooon-s.tistory.com/61

 

[Spring in Action] Spring REST Sample 예제

Spring in Action (5판) 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발 Walls, Craig 지음 제어펍 출판사 2020.05.14 스프링 인 액션 개인 스터디 내용을 정리하자. 영화진흥위원회 일별

hoooon-s.tistory.com

 

HTTP 응답 상태 코드

728x90
반응형
LIST