REST 개요

2016년 8월 모던 PHP 유저 그룹 정기모임

 

업투데이트북스

이현석

REpresentational State Transfer

표현 상태 교환???

뭔소리여

출처: REST API의 이해와 설계-#1 개념 소개, 조대협의 블로그

REST는 웹의 창시자(HTTP) 중의 한 사람인 Roy Fielding의 2000년 논문에 의해서 소개되었다. 당시의 아키텍쳐가 웹의 본래 설계의 우수성을 많이 사용하지 못하고 있다고 판단했기 때문에, 웹의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍쳐를 소개했는데 그것이 바로 Representational state transfer (REST)이다.

웹 설계의 우수성?
웹의 장점?

사실 PHP 익히는데도 바빠서 HTTP와 같은 웹기술에 대해 공부해본 적이 없네... 나만 그런가? ......

출처: Architectural Styles and the Design of Network-based Software Architectures, Roy Fielding, 2000

REST는
하이브리드 스타일이다

스타일

== 제약(constraint)

스타일 가이드를 생각해보세요

REST는 여러 네트워크 기반 소프트웨어 아키텍쳐 스타일을 짬뽕한 것에, 균일한 커넥터 인터페이스 스타일을 추가 짬뽕(hybrid)한 스타일.

어떤 아키텍처 스타일들을
짬뽕했는가?

  • 클라이언트-서버 (Client-Server)
  • 무상태 (Stateless)
  • 캐쉬 (Cache)
  • 주문형 코드 (Code On Demand)
  • 계층 시스템 (Layered System)
  • 균일한 인터페이스 (Uniform Interface)

어떻게 짬뽕했는가?

CS: Client/Server

S: Stateless

$: Cache

LS: Layered System

COD: Code On Demand

U: Uniform Interface

로이 필딩이 논문을 쓸 당시는 어떤 상황이었는가? (초기 웹 아키텍쳐)

 C$SS

Client-Cache-Stateless-Server

이미 맨날 쓰고 있는거

웹서버, 프로토콜, 브라우저 등이 이미 다 구현해 둠

초기에 많이 쓰이던 웹 아키텍처 스타일에 로이 필딩이 추가한 아키텍쳐 스타일

  • 클라이언트-서버 (Client-Server)
  • 무상태 (Stateless)
  • 캐쉬 (Cache)
  • 주문형 코드 (Code On Demand)
  • 계층 시스템 (Layered System)
  • 균일한 인터페이스 (Uniform Interface)

주문형 코드

Code On Demand, COD

  • 스크립트나 플러그인 같은 실행 가능한 프로그램을 일시적으로 클라이언트에 전송하여, 클라이언트가 실행할 수 있도록 하는거
  • 자바스크립트, 플래시 ...
  • 이것도 이미 매일 쓰고 있는거
  • 브라우저가 알아서 처리하고 있음

계층 시스템

Layered System, LS

  • 이것도 아마 다들 사용하고 있는거
  • 서버 1대로 모든 걸 처리하고 있지 않다면 당신은 이미 계층 시스템의 사용자
    • 로드밸런서라던가, 이미지서버라던가, DB서버라던가..

균일한 인터페이스

Uniform Interfaces, U

결국 웹 개발자로서 RESTful 웹 서비스를 만들 때 신경 쓸 부분은 이것

균일한 인터페이스를 위한 네가지 인터페이스 제약

  • 자원 식별 (Identification of resources)
    • URI, URL
  • 표현을 통한 자원 처리 (Manipulation of resources through representations)
    • HTTP 메시지(verb, URI) 
  • 자기서술적 메시지 (Self-descriptive message)
    • 의미있는 URL, HTTP 메타데이타(헤더) 활용
  • 애플리케이션 상태 엔진으로서의 하이퍼미디어 (Hypermedia as the engine of application state)
    • HTML이 아니어도 링크 걸어줘 

균일한 인터페이스

만드는 방법

은 다음 시간에 김주원님께서 발표해주실 겁니다

정리

  • REST는 Layered-CodeOnDemand-Client-Cache-Stateless-Server + Uniform Interface 임
  • LCODC$SS 는 이미 우리가 사용하는 도구들이 다 구현해 두었고, 우리도 익히 사용하고 있는 중
  • RESTful 한 웹 애플리케이션을 작성하기 위해 우리가 신경써야 할 것은 Uniform Interface 
  • Uniform Interface 는 자원 식별, 표현을 통한 자원 조작, 자기서술적 메시지, 애플리케이션 상태 엔진으로서의 하이퍼미디어라는 인터페이스 제약을 충족시킴으로써 가능

감사합니다

 

업투데이트북스

이현석

 

 

이메일 smartbosslee@gmail.com

미디엄 http://medium.com/@smartbosslee
블로그 http://leehyunseok.com

페이스북 http://facebook.com/leehs

Made with Slides.com