👨🏻💻 아키텍처 스타일의 중요성
- REST는 웹의 아키텍처 스타일
- 아키텍처 스타일은 복수의 아키텍처의 공통된 성질, 양식, 규정 혹은 독특한 방식을 가리킴.
- 시스템의 아키텍처를 설계할 때 지침이 되는 그 어떤 것.
- 아키텍처 스타일의 예
👨🏻💻 아키텍처 스타일로서의 REST
- REST는 네트워크 시스템의 아키텍처 스타일이며, 순수한 클라이언트/서버 아키텍처 스타일에 몇 가지 제약을 더해 생겨났다.
- 제약은 아키텍처 스타일에 있어 중요한 개념
- 아키텍처 스타일은 특정한 구현이나 아키텍처가 아니다.
- 구현에서 추상도를 한 단계 올린 것이 아키텍처이고, 아키텍처에서 추상도를 한 단계 더 올린 것이 아키텍처 스타일
👨🏻💻 리소스
REST를 이해하기 위해서는 리소스에 대한 이해가 필요
리소스란?
- 웹상에 존재하는 이름을 가진 모든 정보. 리소스의 이름은 고유해야 함.
리소스 명칭으로서의 URI
URI를 이용함으로써, 프로그램은 리소스가 표현하는 정보에 접근 가능
리소스 어드레스 가능성
어드레스 가능성(Addressability) : URI가 지니고 있는 리소스를 간단히 가리킬 수 있는 성질
복수의 URI를 가진 리소스
1개의 리소스는 복수의 URI를 가질 수 있습니다.
- 하나의 리소스에 URI를 여러 개 붙여 두면, 클라이언트가 리소스에 접근하기 쉬워짐.
- 반대로, 어느 것이 정식 URI인지 알기 힘듬.
리소스의 표현과 상태
Resource Representation : 서버와 클라이언트 사이에 주고받는 데이터
- 리소스는 복수의 표현이 가능합니다.
- 리소스는 상태를 갖는다.
- 현재의 일기예보는 ‘맑음', 몇 시간 후 ‘흐림’
👨🏻💻 스타일을 조합하여 REST를 구성한다
REST는 복수의 아키텍처 스타일을 조합하여 구축한 복합 아키텍처 스타일입니다.
클라이언트/서버
웹은 HTTP라는 프로토콜을 이용해 클라이언트와 서버가 서로 통신하는 클라이언트/서버의 아키텍처 스타일을 채용
- 멀티 플랫폼 구축 가능
- 복수의 서버를 조합해 확장함으로써 가용성을 올릴 수 있음.
스테이트리스 서버
Stateless란?
- 클라이언트의 애플리케이션 상태를 서버에서 관리하지 않는다는 것
- 서버 측의 구현을 간략화 할 수 있음.
- 요청에 응답한 뒤 바로 서버의 자원을 해제할 수 있습니다.
Cookie는 스테이트리스 서버의 이점을 버린다는 것을 이해한 후에 최소한으로 이용하도록 합니다.
캐시
- 리소스의 신선도에 기초해, 한번 가져온 리소스를 클라이언트 쪽에서 돌려쓰는 방식
- 서버와 클라이언트 사이의 통신량을 줄여 네트워크 대역의 이용과 처리시간을 단축하고, 더욱 효율적으로 처리 가능
- 단, 오래된 캐시는 신뢰성이 떨어짐.
유니폼 인터페이스
- URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
- HTTP 메서드 제약 → 전체적인 아키텍처가 간결해짐.
- 클라이언트와 서버 구현의 중립성 향상
- REST를 가장 특징짓는 아키텍처 스타일
계층화 시스템
- 시스템을 몇 개의 계층으로 분리하는 아키텍처 스타일
- 인터페이스가 다른 레거시 시스템에 접속할 수 있게 합니다.
코드 온 디맨드
- 프로그램 코드를 서버에서 다운받아 클라이언트에서 실행하는 아키텍처 스타일
- 클라이언트를 차후에 확장할 수 있습니다.
- 다만, 프로토콜의 가시성이 저하된다는 결점도 존재
- HTTP라는 애플리케이션 프로토콜에 따라 통신하고 있는 동안은 통신의 의미와 접근할 리소스가 명백합니다. 그러나 코드 온 디맨드로 프로그램을 다운로드하여 클라이언트에서 실행해 버리면 애플리케이션 프로토콜의 가시성은 저하됩니다.(?)
REST == ULCODC$SS
- 위의 6가지를 조합한 아키텍처 스타일을 가리키는 말
- 정리
- 클라이언트/서버 : 유저 인터페이스와 처리를 분리한다.
- 스테이트리스 서버 : 서버 측에서 애플리케이션의 상태를 가지지 않는다.
- 캐시 : 클라이언트와 서버의 통신횟수와 양을 감소시킨다.
- 유니폼 인터페이스 : 인터페이스를 고정한다.
- 계층화 시스템 : 시스템을 계층별로 분리한다.
- 코드 온 디맨드 : 프로그램을 클라이언트에 다운로드하여 실행한다.
REST는 아키텍처 스타일이다. 실제 시스템을 설계할 때 그 시스템의 아키텍처를 만들어야 한다. 이상을 염두에 두면서 실제로 동작하고 가치를 제공할 수 있는 시스템을 만드는 것이 중요하다.
👨🏻💻 REST의 2가지 측면
REST와 하이퍼미디어
- 하이퍼미디어의 기본 기능인 링크를 따라가는 작업을 몇 번 거치면서 전체적으로는 소셜 북마크라는 하나의 애플리케이션이 실현
- REST에서는 이를 애플리케이션 상태 엔진으로서의 하이퍼미디어라고 부름.
- 애플리케이션의 상태는 하이퍼미디어의 링크를 따라가는 작업에 의해 변화
- 접속성(Connectedness) : 리소스를 링크로 연결하여 하나의 애플리케이션을 구성한다는 개념은 REST의 근간을 이루는 사상
REST와 분산 시스템
- 네트워크를 통한 함수 호출은 오버헤드가 심하기 때문에 호출 횟수가 많아질수록 시스템 전체 성능의 저하를 가져옴.
- 링크를 따라 애플리케이션의 상태를 변화시키는 편이 전체적인 성능 저하를 억제하는 방법
- REST에 기초한 웹에서는 유니폼 인터페이스에 의해 인터페이스가 고정되어 있기 때문에 호환성 문제가 발생하지 않음.