상세 컨텐츠

본문 제목

알고보니 - REST 아키텍처 스타일

IT 정보/IT 알쓸신잡

by 마이드림72 2022. 3. 23. 16:00

본문

REST 아키텍처 스타일이란?

 

 

REST = Uniform Interface + Layered System + Code on Demand

+ Client + Cache + Stateless Sever

 

1. Client/Server

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

즉, 클라이언트가 서버에 요청(Request)을 보내면, 서버는 클라이언트에 대해 응답(Response)을 돌려줍니다. 

클라이언트/서버의 이점은 단일 컴퓨터상에서 모든것을 처리하는것이 아니라, 클라이언트와 서버로 분리해서 처리 할 수 있다는 점입니다. 

이렇게 되면 클라이언트를 멀티플랫폼으로 구성할 수 있습니다. 

가령, 현재의 웹이 PC뿐 아니라 휴대전화나 게임기를 통해서도 접속할 수 있는것이 그 예입니다.
또한 유저인터페이스는 클라이언트에서 담당하기 때문에 서버는 데이터 스토리지로서의 기능만을 제공하면 됩니다. 

나아가 복수의 서버를 조합해 확장함으로써 가용성을 올릴 수 있습니다.

 

2. Stateless Sever

클라이언트/서버에 최초로 추가할 아키텍처 스타일은 스테이트리스 서버(stateless sever)입니다. 

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

서버가 애플리케이션의 상태를 가지지 않게 되면, 서버 구현을 간략화 할수 있다는 장점이 있습니다. 

간략하게 구현된서버는 클라이언트로부터의 요청에 응답한 뒤 바로 서버의 자원을 해제할 수 있습니다.

하지만 현실적으로는 스테이트리스가 아닌 웹 서비스와 웹 API가 많이 있습니다. 

특히 HTTP를 스테이트풀하게 만드는 대표적인 것은 Cookie를 사용한 세션 관리입니다. REST의 관점에서 본다면, Cookie를 사용한 세션 관리는 HTTP의 잘못된 확장입니다. 

다만, REST의 기준으로 잘못되었다고 해서, Cookie를 사용한 폼 인증을 그만둘 수 없는 것도 현실입니다. 

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

 

3. Cache

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

4. Uniform Interface

유니폼 인터페이스는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말합니다. 
예를들어, HTTP 1.1에서는 GET과 POST등 8개의 메서드만 정의되어 있고, 보통은 이 이상늘어나지 않음. 메서드가 8개로 고정되어 확장할 수 없는 것은 일반적인 프로그래밍 언어의 기준에서 생각할 때 아주 엄격한 제약으로 느껴지지만, 인터페이스의 유연성에 제약을 가함으로써 전체적인 아키텍처가 간결해 집니다.

또한 인터페이스를 통일함으로써 클라이언트와 서버의 구현의 중립성이 향상됨. 현재의 웹이 다양한 클라이언트와 서버로 구성되어 있는데에는 유니폼 인터페이스가 큰 역할을 담당했습니다.

유니폼 인터페이스는 REST를 가장 특징짓는 아키텍처 스타일입니다.

 

5. Layered System

유니폼 인터페이스의 이점 가운데 하나로, 시스템 전체를 계층화하기 쉽다는 점을 들 수 있습니다. 

예를들면, 웹 서비스에서는 서버와 클라이언트 간의 로드 밸런서를 설치해 부하를 분산시키거나, 

프록시를 설치해 액세스를 제어합니다. 클라이언트 측에서 보면, 서버나 프록시 모두 동일한 인터페이스로 접속할 수 있기 때문에 접속할 곳이 서버에서 프록시로 바뀐 것을 신경 쓸 필요가 없습니다. 

이것은 서버와 프록시 등 각 컴포넌트 간의 인터페이스를 HTTP로 통일하고 있기에 실현될 수 있었습니다.

또한, 기간계 레거시 시스템 등 HTTP의 인터페이스를 구현하지 않는 시스템에서도 레거시 시스템 앞단에 웹 애플리케이션 서버를 끼워 넣고 HTTP의 인터페이스를 가지게 함으로써, 브라우저 등의 클라이언트와 접속할 수 있게 됩니다. 

이와 같이 시스템을 몇 개의 계층으로 분리하는 아키텍처 스타일을 계층화 시스템이라고 합니다. 

6. Code on Demand

코드 온 디멘드는 프로그램 코드를 서버에서 다운받아 클라이언트에서 실행하는 아키텍처 스타일입니다. 

예를 들어, Javascript 나 Flash, Java Applet 등이 여기에 해당합니다. 

코드 온 디멘드의 장점은 클라이언트를 차후에 확장할 수 있다는 것입니다. 

클라이언트 프로그램에 미리 준비해 둔 기능뿐만 아니라, 새로운 기능을 계속 추가할 수 있습니다. 

Javascript와 Flash를 풍부하게 사용한 화려한 웹 서비스는 코드 온 디멘드의 혜택을 입고 있습니다.

물론, 코드 온 디멘드에도 결점은 있습니다. 

그것은 네트워크 통신에서의 프로토콜 가시성이 저하된다는 것입니다. 

HTTP라는 애플리케이션 프로토콜에 따라 통신하고 있는 동안은 통신의 의미와 접근할 리소스가 명백합니다. 

그러나 코드 온 디멘드로 프로그램을 다운로드하여 클라이언트에서 실행해 버리면 애플리케이션 프로토콜의 가시성은 저하됩니다.

 

이상으로 REST 아키텍처 스타일이 무었인지 알아보았습니다.

관련글 더보기

댓글 영역