Zero to Hero
Published 2021. 1. 23. 19:29
웹을 지탱하는 기술 05 Review

리소스 지향 아키텍처

1. 웹 서비스에서 제공할 데이터를 특정한다

2. 데이터를 리소스로 나눈다

3. 리소스에 URI로 이름을 부여한다

4. 클라이언트에 제공할 리소스의 표현을 설계한다

5. 링크와 폼을 이용해 리소스와 리소스를 연결한다

6. 이벤트의 표준적인 코스를 검토한다

7. 에러에 대해 검토한다

 

RESTFul 웹 서비스 책에 의하면...

리소스 지향 아키텍처는 다음과 같은 특징을 가지고 있다.

1. 어드레스 가능성

URI만 있으면 리소스를 한결같이 가리킬 수 있다.

2. 접속성

리소스를 링크로 접속하여 하나의 애플리케이션을 이룬다는 성질은 하이퍼미디어로서의 웹의 근간이다. 링크를 따라갈 수 있어야 한다

3. 유니폼 인터페이스

4. 스테이트리스 성

 

트랜잭션 리소스

예를 들어 DELETE로 리소스 3개를 지우려고 한다.

어떻게 정확히 이 3개를 완벽하게 지울 수 있을까? 중간에 통신에러가 나더라도 이전 상태를 보장하는 원자성을 띄게 할 수 있을까?

 

HTTP의 인터페이스로 구현할 수 없는 이런 상황에서 새로운 리소스를 작성해 바디에 정보를 기술해 서버에서 처리하게 한다. 이런 역할을 하는 메서드를 팩토리 메서드라고 한다.

 

1. 팩토리 리소스에 POST 요청을 보낸다.

2. 응답 헤더의 Location에 팩토리 리소스 URI를 받는다

3. 팩토리 리소스에  DELETE 할 리소스를 붙여서 보낸다

4. 정상적으로 처리가 되면 200, 그렇지 않으면 500 응답을 받는다.

5. 모든 처리가 끝나면 아래 헤더를 추가해 보낸다.

6. 200 받으면 정상 처리 완료 

Content-Type: appliation/x-www-form-urlencoded

commit=true

물론 BODY에 보내서 작업해도 딱히 문제는 없다.

 

베타 제어

복수의 클라이언트가 리소스를 편집할 때 발생함

 

메서드 Last-Modified ETag
GET If-Modified-Since If-None-Match
PUT/DELETE If-Unmodified-Since If-Match

ETag 값을 사용해 조건부 PUT을 실행한다.

리소스가 변경되어 있지 않다면 ETag의 값은 바뀌지 않기 때문에 리소스의 갱신에 성공한다.

조건에 맞지 않으면 412 Precondition Failed 가 반환됨.

 

서버는 클라이언트가 지정한 조건을 보고

대상 리소스가 변경되어 있는지 여부를 체크한다. 리소스가 변경되어 있지 않다면 통상대로 갱신, 삭제 작업을 한다.

리소스가 변경되어있을 때는 412 반환.

 

412 받았을 때 처리 방법

 

1. 경합을 일으킨 사용자에게 확인한 후, 갱신 또는 삭제를 한다

2. 경합을 일으킨 데이터를 경합 리소스로서 별도의 리소스로 보존한다(PUT인 경우만)

3. 경합을 일으킨 사용자에게 변경점을 전하고, 병합을 촉구한다(PUT인 경우만)

 

결론

1. 될 수 있는 한 심플하게 유지한다

2. 막히면 리소스로 돌아가 생각한다

검색 기능을 구현하는 SEARCH 메서드를 HTTP에 추가하는 게 아니라 검색 결과 리소스를 GET 한다 같은 식으로 생각한다.

3. 정말 필요하면 POST로 다 처리할 수 있다

웹을 지탱하는 기술
국내도서
저자 : 야마모토 요헤이(Yamamoto Yohei) / 김성훈역
출판 : 멘토르출판사 2011.05.30
상세보기

'Review' 카테고리의 다른 글

모두의 네트워크 01  (0) 2021.04.07
우아한 스프링 부트  (0) 2021.02.20
웹을 지탱하는 기술 04  (0) 2021.01.23
웹을 지탱하는 기술 03  (0) 2021.01.23
웹을 지탱하는 기술 02  (0) 2021.01.23
profile

Zero to Hero

@Doljae

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!