[Chapter3] REST 웹의 아키텍처 스타일

웹을 지탱하는 기술을 공부하며 정리한 글입니다.
틀린 부분은 지적해주시면 감사드리겠습니다 😀

아키텍처 스타일

아키텍처 스타일이란, 복수의 아키텍처의 공통된 성질, 양식, 규정 혹은 독특한 방식으로, 아키텍처 패턴이라고도 불린다.

디자인 패턴은 마이크로 아키텍처 패턴라고 불리기도 하며, 아키텍처 스타일보다 입도가 작은 클래스 등의 설계 양식을 의미한다.

순수한 클라이언트/서버 아키텍처 스타일에 몇 가지 제약을 더해가면, REST 아키텍처 스타일이 된다. 제약은 복수의 컴포넌트가 따로따로 움직여 동작하지 않고, 협력하여 동작하도록 하는 중요한 개념이다.

구현에서 추상도를 한 단계 올린 것이 아키텍처이고, 아키텍처에서 추상도를 한 단계 더 올린 것이 아키텍처 스타일이다.

리소스

리소스란, 웹 상에 존재하는 이름을 가진 모든 정보를 의미한다. 동일한 리소스를 구분하기 위해 리소스는 이름을 가질 수 있는데, 여기서 이름은 URI을 의미한다.

지니고 있는 리소스를 간단히 가리킬 수 있는 성질을 어드레스 가능성(Addressability)라고 한다. 즉, 제대로 이름이 붙어있고, 적절한 수단으로 접근할 수 있는 URI를 의미한다.

스타일을 조합하여 REST 구성

REST는 다음과 같은 복수의 아키텍처 스타일을 조합하여 구축한 복합 아키텍처이다.

클라이언트/서버 (Client/Server)

유저 인터페이스를 다루는 클라이언트와 데이터 스토리지로 쓰이는 서버를 분리할 수 있다.

클라이언트가 서버에 요청(Request)을 보내면, 서버는 클라이언트에 대해 응답(Response)를 돌려준다. 이는, HTTP라는 프로토콜을 이용해 가능한 것이다.

이러한 구조의 장점은 단일 컴퓨터가 아닌, 여러 곳에 분산하여 처리할 수 있게 되고, 복수의 서버를 조합해 확장함으로써 가용성을 올릴 수 있다.

스테이트리스 서버 (Stateless Server)

스테이트리스란, 클라이언트의 애플리케이션 상태를 서버에서 관리하지 않는 것을 의미한다.

이런 구조는 서버 측의 구현을 간략화할 수 있다는 장점이 있고, 클라이언트의 요청에 응답한 뒤, 서버의 자원을 바로 해제할 수 있다.

단, 많은 웹 서비스가 Cookie를 사용한 세션 관리를 하는데, 이는 HTTP를 스테이트풀하게 만든다. 하지만 이를 포기할 수 없는 것이 현실이기 때문에, 최소한으로 이용하는 것이 좋다.

캐시 (Cache)

캐시란, 리소스의 신선도에 기초해, 한 번 가져온 리소스를 클라이언트 쪽에서 돌려쓰는 방식을 의미한다.

서버와 클라이언트 사이의 통신량을 줄여, 네트워크 대역의 이용 시간과 처리를 축소하고, 더욱 효율적으로 처리할 수 있게 된다. 단, 오래된 캐시를 이용할 경우, 정보의 신뢰성이 떨어질 가능성도 있다.

유니폼 인터페이스 (Uniform Interface)

URI로 지정한 리소스에 대한 조작을 통일되고, 한정적인 인터페이스로 수행하는 아키텍처 스타일을 의미한다.

HTTP1.1에는 GET, POST와 같은 8개의 메소드만 정의되어 있고, 확장할 수 없다. 하지만 이런 인터페이스의 유연성에 제약을 가함으로써, 전체적인 아키텍처가 간결해질 수 있다.

계층화 시스템 (Layered System)

유니폼 인터페이스의 이점을 활용해 각 시스템을 몇 개의 계층으로 분리하는 아키텍처 스타일을 의미한다.

서버와 클라이언트 간의 로드 밸런서를 설치해, 부하를 분산시키거나, 프록시를 설치해 액세스를 제어한다.

클라이언트 입장에서는 서버에 바로 접근하거나, 프록시에 접근해도, 동일한 인터페이스로 접속할 수 있기 때문에, 신경쓰지 않아도 된다. 서버와 프록시 등 인터페이스를 HTTP로 통일하고 있기 때문에 가능하다.

코드 온 디맨드 (Code on Demand)

프로그램 코드를 서버에서 다운 받아, 클라이언트에서 실행하는 것을 의미한다.

코드 온 디맨드를 사용하면, 새로운 기능을 계속 추가할 수 있지만, 네트워크 통신에서 프로토콜 가시성이 저하된다.

REST와 하이퍼미디어

하이퍼미디어란, 웹 상의 리소스들이 가지는 링크를 따라가는 애플리케이션 상태 엔진을 의미한다.

리소스를 링크로 연결하여, 하나의 애플리케이션을 구상한다는 개념은 REST의 근간을 이루는 사상이다. 이를 접속성(Connectedness)라고 부른다.

댓글남기기