■ Web

[Web] RestFul Service에 대해서 알아보자 (1)

rest service에 관한 첫번째 포스팅이다.

의미가 와닿지 않아도 이해만 하면된다.

서버를 구현해봐야 “이런 허접한 내용이였어?” 라고 이해할것이다.

 

[웹서비스의 의미]

먼저 “웹서비스를 구축한다.” 라고 하는 것은 http기반 protocol을 활용하여 network 통신을 구현하는 것을 의미한다.

여기서 http 기반 통신구현은 근래에 restFul 서비스라고 불리운다.

그렇다면 restFul 서비스를 http를 통해서 과연 어떻게 구현하느냐가 문제가 된다.

먼저 restFul의 더욱 상세한 의미를 살펴보자.

일단 REST의 의미를 보면, “웹의 아키텍쳐 스타일이다.” 라고 정의된다.

아키텍쳐 스타일이란 어려운 말이 아니고, 그냥 클라이언트/서버, P2P등 서버를 구현하는 방식/형태를 의미한다. (아키텍쳐 패턴이라고도 불리며, 이는 디자인 패턴과는 다르다. 디자인 패턴은 코드의 클래스등의 패턴을 의미한다.)

REST가 아키텍쳐 스타일이라면 클라이언트/서버 모델처럼 뭔가 구현 방식 및 형태를 정의할수 있어야 한다. 그럼 한번 정의해보자.

1. Client/Server : 클라이언트와 서버가 나누어져 있고 서버에서 내려준 것을 클라이언트가 받아 처리하고 다시 요청하는 형태.

2. Stateless Server : 서버는 상태를 저장하지 않는다. (예외적으로 세션이 있다.)

3. Cache (클라이언트에서 한번 받아오면 다시 요청하지 않고 해당 리소스를 사용.)

4. Uniform Interface (POST, DELETE, PUT, GET 위 4가지 메소드를 주요 메소드로 활용. OPTION,HEAD등 총 8개의 메소드가 있으나 사용을 많이 안함.)

5. Layer System (프록시 서버, 로드밸런서 등을 활용함.)

6. Code on Demand (js, css 파일등을 서버로부터 받아 클라이언트에서 코드 자체를사용한다.)

위에 언급한 6가지의 아키텍쳐 스타일을 하나로 합쳐서 필딩이란 사람이 그냥 REST라고 이름붙인 스타일을 만들고 해당 6가지 스타일을 반영하여 서비스를 구현한 것을 “restFul한 서비스다.” 라고 하는 것이다.

이밖에도 웹서비스를 restFul한 서비스가 아닌 SOAP등의 방식으로도 구현이 가능하다.

 

 

[리소스의 의미]

웹서비스를 구축할때의 리소스는 특별한 것이 아닌 단순히 “URI(Uniform Resource Indicator)로 표현이 가능한 모든것” 이라고 정의할 수 있다.

http://naver.com 으로 접속하면 네이버 메인 화면이 나온다. 이것은 네이버 메인화면을 가르키는 리소스(naver.com)이라고 할수 있다.

네이버 사전에서 happy를 검색하면

http://dic.naver.com/search.nhn?dicQuery=happy&x=0&y=0&query=happy&target=dic&ie=utf8&query_utf=&isOnlyViewEE=

다음과 같은 경로가 나온다.

뭔가 복잡해 보인다. 하지만 결론은 단순하다.

http://dic.naver.com/search.nhn 이라는 리소스 (네이버 사전 검색 리소스를 의미) 에서 dicQuery에 happy가 들어있다. 뒤에 뭔가 많이 나오는데 이것들을 query라고 부르며 단순히 “네이버사전검색” 리소스의 상세 정보를 나타내준다.

그렇다면 해당 리소스는 어떤 원리에 의해서 정할수 있을까?

간단한 원칙들이 존재한다.

1. 프로그래밍언어에 의존적인 확장자 피하기. (jsp, php 등)

2. 구현의 의존적인 경로명 피하기. (servlet, nodejs, express 등)

3. 메서드명 피하기.

4. 세션ID포함하지 않기.

5. 명사로 구현하기.

 

다른거 다까먹어도 좋다. 이것만 기억하자.

리소스명은 명사가 깔끔하며, 동사의 역할은 위에서 언급했던 POST,PUT,DELETE,GET등의 메소드로 대체한다. (자세한건 이후에 설명)

예를 들어보겠다.

시계 쇼핑몰에서 로렉스 시계중 메탈 시계를 의미하는 리소스를 만들어보자.

http://시계쇼핑몰/메탈/로렉스s (맨뒤에 s는 복수형을 의미)

과제 : 상대경로, 절대경로, url의 길이제한, url스키마, %인코딩에 대해서 설명해보자.

Standard