[웹 개발자를 위한 웹을 지탱하는 기술] - REST 웹의 아키텍처 스타일

김성혁·2022년 3월 7일
0

👨🏻‍💻 아키텍처 스타일의 중요성

  • REST는 웹의 아키텍처 스타일
  • 아키텍처 스타일은 복수의 아키텍처의 공통된 성질, 양식, 규정 혹은 독특한 방식을 가리킴.
    • 시스템의 아키텍처를 설계할 때 지침이 되는 그 어떤 것.
  • 아키텍처 스타일의 예
    • MVC
    • 파이프 앤 필터
    • 이벤트 시스템

👨🏻‍💻 아키텍처 스타일로서의 REST

  • REST는 네트워크 시스템의 아키텍처 스타일이며, 순수한 클라이언트/서버 아키텍처 스타일에 몇 가지 제약을 더해 생겨났다.
  • 제약은 아키텍처 스타일에 있어 중요한 개념
  • 아키텍처 스타일은 특정한 구현이나 아키텍처가 아니다.
    - 구현에서 추상도를 한 단계 올린 것이 아키텍처이고, 아키텍처에서 추상도를 한 단계 더 올린 것이 아키텍처 스타일

👨🏻‍💻 리소스

REST를 이해하기 위해서는 리소스에 대한 이해가 필요

리소스란?

  • 웹상에 존재하는 이름을 가진 모든 정보. 리소스의 이름은 고유해야 함.

리소스 명칭으로서의 URI

URI를 이용함으로써, 프로그램은 리소스가 표현하는 정보에 접근 가능

리소스 어드레스 가능성

어드레스 가능성(Addressability) : URI가 지니고 있는 리소스를 간단히 가리킬 수 있는 성질

복수의 URI를 가진 리소스

1개의 리소스는 복수의 URI를 가질 수 있습니다.

  • 하나의 리소스에 URI를 여러 개 붙여 두면, 클라이언트가 리소스에 접근하기 쉬워짐.
  • 반대로, 어느 것이 정식 URI인지 알기 힘듬.

리소스의 표현과 상태

Resource Representation : 서버와 클라이언트 사이에 주고받는 데이터

  • 리소스는 복수의 표현이 가능합니다.
    • HTML, PDF, 이미지 등
  • 리소스는 상태를 갖는다.
    - 현재의 일기예보는 ‘맑음', 몇 시간 후 ‘흐림’

👨🏻‍💻 스타일을 조합하여 REST를 구성한다

REST는 복수의 아키텍처 스타일을 조합하여 구축한 복합 아키텍처 스타일입니다.

클라이언트/서버

웹은 HTTP라는 프로토콜을 이용해 클라이언트와 서버가 서로 통신하는 클라이언트/서버의 아키텍처 스타일을 채용

  • 멀티 플랫폼 구축 가능
  • 복수의 서버를 조합해 확장함으로써 가용성을 올릴 수 있음.

스테이트리스 서버

Stateless란?

  • 클라이언트의 애플리케이션 상태를 서버에서 관리하지 않는다는 것
  • 서버 측의 구현을 간략화 할 수 있음.
    • 요청에 응답한 뒤 바로 서버의 자원을 해제할 수 있습니다.

Cookie는 스테이트리스 서버의 이점을 버린다는 것을 이해한 후에 최소한으로 이용하도록 합니다.



캐시

  • 리소스의 신선도에 기초해, 한번 가져온 리소스를 클라이언트 쪽에서 돌려쓰는 방식
  • 서버와 클라이언트 사이의 통신량을 줄여 네트워크 대역의 이용과 처리시간을 단축하고, 더욱 효율적으로 처리 가능
  • 단, 오래된 캐시는 신뢰성이 떨어짐.



유니폼 인터페이스

  • URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
    • HTTP 메서드 제약 → 전체적인 아키텍처가 간결해짐.
    • 클라이언트와 서버 구현의 중립성 향상
  • REST를 가장 특징짓는 아키텍처 스타일



계층화 시스템

  • 시스템을 몇 개의 계층으로 분리하는 아키텍처 스타일
    • 인터페이스가 다른 레거시 시스템에 접속할 수 있게 합니다.



코드 온 디맨드

  • 프로그램 코드를 서버에서 다운받아 클라이언트에서 실행하는 아키텍처 스타일
    • 예. JavaScript, Java 애플릿
  • 클라이언트를 차후에 확장할 수 있습니다.
  • 다만, 프로토콜의 가시성이 저하된다는 결점도 존재
    • HTTP라는 애플리케이션 프로토콜에 따라 통신하고 있는 동안은 통신의 의미와 접근할 리소스가 명백합니다. 그러나 코드 온 디맨드로 프로그램을 다운로드하여 클라이언트에서 실행해 버리면 애플리케이션 프로토콜의 가시성은 저하됩니다.(?)

REST == ULCODC$SS

  • 위의 6가지를 조합한 아키텍처 스타일을 가리키는 말

  • 정리
    • 클라이언트/서버 : 유저 인터페이스와 처리를 분리한다.
    • 스테이트리스 서버 : 서버 측에서 애플리케이션의 상태를 가지지 않는다.
    • 캐시 : 클라이언트와 서버의 통신횟수와 양을 감소시킨다.
    • 유니폼 인터페이스 : 인터페이스를 고정한다.
    • 계층화 시스템 : 시스템을 계층별로 분리한다.
    • 코드 온 디맨드 : 프로그램을 클라이언트에 다운로드하여 실행한다.

REST는 아키텍처 스타일이다. 실제 시스템을 설계할 때 그 시스템의 아키텍처를 만들어야 한다. 이상을 염두에 두면서 실제로 동작하고 가치를 제공할 수 있는 시스템을 만드는 것이 중요하다.

👨🏻‍💻 REST의 2가지 측면

REST와 하이퍼미디어

  • 하이퍼미디어의 기본 기능인 링크를 따라가는 작업을 몇 번 거치면서 전체적으로는 소셜 북마크라는 하나의 애플리케이션이 실현
    • REST에서는 이를 애플리케이션 상태 엔진으로서의 하이퍼미디어라고 부름.
    • 애플리케이션의 상태는 하이퍼미디어의 링크를 따라가는 작업에 의해 변화
  • 접속성(Connectedness) : 리소스를 링크로 연결하여 하나의 애플리케이션을 구성한다는 개념은 REST의 근간을 이루는 사상

REST와 분산 시스템

  • 네트워크를 통한 함수 호출은 오버헤드가 심하기 때문에 호출 횟수가 많아질수록 시스템 전체 성능의 저하를 가져옴.
  • 링크를 따라 애플리케이션의 상태를 변화시키는 편이 전체적인 성능 저하를 억제하는 방법
  • REST에 기초한 웹에서는 유니폼 인터페이스에 의해 인터페이스가 고정되어 있기 때문에 호환성 문제가 발생하지 않음.

0개의 댓글