이번 포스트에서는 RESTful를 공부하여 정리합니다.

 

웹 프로그래머로 외부업체랑 협업을 하면 주로 데이터를 주고 받는 작업이 많았기에 RESTful을 알고는 있었지만

자세하게는 알지 못했습니다.

 

뭔지는 아는데...... 대답하라고 하면 말로 표현하지 못하는??

 

그래서 이번 기회로 공부하면서 그 첫시작을 RESTful로 시작합니다!

차후 포스트에서는 이와 관련있다고 생각하는 xml과 JSON, 다음으로 get, post전송 방식 순서로 공부하여 정리하겠습니다!!!!!!

 

 

(오늘로 5개 포스트인데 방문자가 늘어나는게 보여요! 항상 많은 초수, 중수, 고수 개발자들의 방문과 격려와 의견을 기다립니다)

 


 

- RESTful 소개

 

REST(REpersentational State Transfer)

직독하면 '표현상태의 변경' 이라고 하는데 어떤 의미인지 잘 모르겠다.

구글을 통해 내가 가장 쉽게 이해할 수 있는 말을 찾아보니 '웹의 장점을 최대한으로 활용할 수 있는 아키텍처' 라는 표현이 이해하기 쉬웠다.

 

이 용어는 HTTP를 만든(Web을 만든) 사람을 한사람인 Roy Fidlding의 2000년의 논문에서 소개되었다.

많이 거창하게 소개되었을 줄 알았는데 정작 5장 분량밖에 되지 않는 논문이라고 한다.

 

최근 클라이언트/서버 프로그램은 Web뿐만 아닌 안드로이드, 아이폰 이외의 테블릿 등 디바이스의 종류가 다양해졌고 이에 따른 많은 클라이언트가 존재하는데 이를 하나의 서버로 대응할 때 필요한 것이 RESTful이다.

이는 장비간의 통신을 HTTP라는 프로토콜로 간단하게 수행하는 것이 목적이며 웹사이트의 이미지, 텍스트 등 모든 자원에 고유한 URI를 부여해 준다.

 

URI도 의미는 알고 있었는데 흔히 쓰는 URL 그리고 조금은 생소한 URN과의 차이를 명확하게 알지 못해 정리하고 간다.

 

URI(Uniform Resource Identifier)은 '통합 자원 식별자' 인터넷에 있는 자원을 나타내는 유일한 주소이며

URL(Uniform Resource Locator)과 URN(Uniform Resource Name)을 포함하는 더 큰 개념이다.

URL은 자원의 실제 네트웍 경로를 가리키며 URN은 자원에 대해 영속적이고 유일한 이름을 부여한다.

([참고] 영이블로그 http://sunychoi.github.io/java/2015/04/27/uri-url.html)

 

 

- RESTful 메소드 정보

 

클라이언트에서 URI를 통해 서버로 자원을 전달할 때 데이터를 동록하는지, 삭제하는지, 수정하는지, 그리고 정보를 얻어오는지 어떻게 알 수 있을까?

 

자원을 가지고 어떤 작업을 행하는지에 대한 내용을 가지고 있는 메소드를 '메소드 정보(Method Information)'라고 한다.

 

가장 흔한 HTTP메소드로 4가지가 있는데 표를 확인해보자

 HTTP 메소드 이름

기능(CRUD)

example URL

 POST

생성(Create)

http://localhost:8080/example/member/민수

GET

조회(Read)

http://localhost:8080/example/member/민수

PUT

수정(Update)

http://localhost:8080/example/member/민수

DELETE

삭제(Delete)

http://localhost:8080/example/member/민수

 

표와 값이 대표적인 4가지 HTTP 메소드가 있다. 각 메소드의 기능따라 작업이 이루어진다.

 

그런데 example URL을 보면 4개의 기능의 URL이 모두 같음을 확인하고 이상함을 느낄 수 있다.

이것은 보내지는 메소드에 따라 데이터 '민수'를 생성하는지, 조회하는지, 수정하는지, 삭제하는지

기능이 구별되기 때문에 URL 이름이 같아도 문제가 없다.

 

추가적으로 메소드 자체는 움직이는 '동사' 역할을 하기 때문에 URL은 명사로 정의한다.

 

 

- RESTful의 6가지 특징

 

1. Client-Server 구조: REST서버는 API를 제공하며 여러 클라이언트에서 하나의 REST API를 이용할 수 있다.

2. Stateless : 무상태성, 상태 정보 저장없이 REST서버는 들어오는 요청에 대해 처리만 한다.

3. Cacheable : 캐쉬이용이 가능하다. HTTP라는 기존 Web 표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그래도 활용할 수 있다.

4. Uniform Interface : REST는 HTTP표준에만 따른다면, 어떤 기술이여도 사용가능한 인터페이스 스타일이다.

5. Self-descriptiveness : 자체 표현, REST API 자체가 쉽기 때문에 API 메시지만을 보고도 API를 이해할 수 있는 자체 표현 구조를 가지고 있다.

6. Layered System : 계층형 구조, REST 서버는 다중 계층으로 구성될 수 있으며 로드벨런싱/공유 캐시등을 통해 구조상의 확장성과 보안성 유연성을 향상 시킬 수 있다.

([참고] 조대협의 블로그 http://bcho.tistory.com/953)

+ Recent posts