기술 노트/웹

[웹을 지탱하는 기술] REST 웹의 아키텍처 스타일 - 01

Benn.dev 2021. 4. 17. 20:00

아키텍처 스타일의 중요성

REST는 웹의 아키텍처 스타일이다. (=아키텍처 패턴)

이는 복수의 아키텍처의 공통된 성질, 양식, 규정 혹은 독특한 방식을 가리키는 말이다.

아키텍처 스타일에는 MVC(Model-View-Controller)와 파이프 앤 필터(Pipe and Filter), 이벤트 시스템(Event System)등이 있다.

 

 

아키텍처 스타일로서의 REST

REST는 네트워크 시스템의 아키텍처 스타일이다.

네트워크 시스템의 아키텍처 스타일로서 가장 유명한 것은 클라이언트/서버(Client/Server)이다.

그리고 웹은 클라이언트/서버 이기도 하다.

즉, 웹의 아키텍처 스타일은 REST이기도 하지만, 클라이언트/서버이기도 하다.

추상화 레벨웹에서의 예
아키텍처 스타일REST
아키텍처브라우저, 서버, 프록시, HTTP, URI, HTML
구현Apache, Firefox, Internet Explorer

REST는 웹 전체의 아키텍처 스타일이기도 하며, 개별 웹 서비스와 웹 API의 아키텍처 스타일이기도 하다.

개별 웹 서비스가 전체의 조화를 무너뜨린다면, 전체가 통일된 아키텍처 스타일을 지킬 수 없기 때문에,

한 사람 한 사람이 만드는 각 웹 서비스와 웹 API에서도 REST의 규약을 지키는 것은 중요하다.

 

 

리소스

웹에서 리소스의 예는 다음과 같다.

  • 서울의 일기예보
  • 멘토르 출판사의 '웹을 지탱하는 기술' 페이지
  • 청량리역의 사진
  • 다익스트라의 논문 'Go To Statement Considered Harmful'

웹 상에는 이 밖에도 다양한 리소스가 존재한다.

즉, '웹상에 존재하는 이름을 가진 모든 정보'를 웹 리소스라고 한다.

리소스의 이름은 어떤 리소스를 다른 리소스와 구별하기 위한 것이다.

 

 

리소스 명칭으로서의 URI

리소스 이름이란 URI를 의미한다.

  • 서울의 일기예보
    • http://wearher.naver.com/~~~~/cityWetrWarea.nhn?cityRgnCd=CR001000
  • 멘토르 출판사의 '웹을 지탱하는 기술' 페이지
    • http://mentorbooks.dothome.co.kr/IT/4864
  • 청량리역의 사진
    • http://www.flickr.com/photos/nala2sky/3790226694
  • 다익스트라의 논문 'Go To Statement Considered Harmful'
    • http://www.ecn.purdue.edu/~~~~/papers/djikstra~~.pdf

 

정리하자면,

1. 리소스란 웹상의 정보다.

2. 전 세계의 무수한 리소스는 각각 URI로 의미 있는 이름을 가진다.

3. URI를 이용함으로써, 프로그램은 리소스가 표현하는 정보에 접근할 수 있다.

 

 

리소스의 어드레스 가능성

URI가 지니고 있는 리소스를 간단히 가리킬 수 있는 성질을 어드레스 가능성(Addressability)라고 부른다.

리소스를 어드레스 가능한 상태, 즉 제대로 이름이 붙어 있고 적절한 수단으로 접근할 수 있는 상태로 만들면, 프로그램을 만들기가 아주 쉬워진다.

 

 

복수의 URI를 가진 리소스

하나의 리소스는 복수의 URI를 가질 수 있다.

예를 들어, 만약 오늘이 2010년 1월 1일이면 다음 2개의 URI는 같은 리소스를 가리킨다.

  • http://weather.example.com/seoul/today
  • http://weather.example.com/seoul/2021-01-01

위 두개의 URI는 같은 리소스를 가리키지만 의미가 다르다.

첫 번째는 오늘의 서울 날씨, 두 번째는 2021년 1월 1일의 서울 날씨를 가리킨다.
첫 번째는 날짜가 바뀌면 가리키는 리소스가 변화한다.

이처럼 하나의 리소스에 URI를 여러 개 붙여 두면, 클라이언트가 리소스에 접근하기가 쉬워진다.

하지만 어느 것이 정식 URI인지 알기 힘들다는 결점도 동시에 가지게 된다.

 

 

리소스의 표현과 상태

리소스는 '웹 상에 존재하는 정보'라는 추상적인 개념이다.

서버와 클라이언트 간에 실제로 리소스를 주고받을 때는 어떤 구체적인 데이터를 서로 송신한다.

서버와 클라이언트 사이에 주고받는 데이터를 'Resource Representation'이라고 부른다.

하나의 리소스는 복수의 표현을 가질 수 있있다.

예를 들어, 일기예보 리소스는 HTML형식, 텍스트 형식, PDF, 이미지로도 표현 가능하다.

리소스의 복수 표현에 개별 URI를 부여해도 좋고, HTTP 구조를 이용해 하나의 URI로 복수 표현을 반환할 수도 있다.

또한, 리소스에는 '상태'가 있어 시간의 경과에 따라 리소스의 상태가 변화면 그 표현도 변화된다.

일기예보를 예를 들어 현재의 예보가  <맑음> 이여도 몇 시간 후에는 <흐림>으로 상태가 변할 수도 있다.