25
RPC에서 REST까지 간단한 개념소개 [email protected]

RPC에서 REST까지 간단한 개념소개

Embed Size (px)

Citation preview

Page 1: RPC에서 REST까지 간단한 개념소개

RPC에서 REST까지 간단한 개념소개

[email protected]

Page 2: RPC에서 REST까지 간단한 개념소개

•RPC

•CORBA

•RMI

•SOAP

•REST

이것들을 아주 아주 간단히 훑어볼거에요.

Page 3: RPC에서 REST까지 간단한 개념소개

시작하기전에..

Client-Server 모델 들어 보셨죠?

과거(?)에는Client가 Server에 있는 자료를요청하고, 받을때 주로 socket 프로그래밍을 활용했습니다.

CLIENT SERVER주로.. LAN

Page 4: RPC에서 REST까지 간단한 개념소개

socket 프로그래밍은..대부분의 프로그래밍 언어에서 API 형태로 제공을 합니다.

우리는 API Document의 사용법만 확인하고손쉽게 구현이 가능합니다.

C

socket.h

JAVA

java.net.Socket java.net.ServerSocket

Page 5: RPC에서 REST까지 간단한 개념소개

server.java

serverSocket = new ServerSocket(7000); socket = serverSocket.accept(); //TODO: socket으로부터 데이터를 받고, 보내고 socket.close(); serverSocket.close();

client.java

socket = new Socket(’192.1.1.5’, 7000); //TODO: socket으로 데이터를 보내고, 받고 socket.close();

위와같이 JAVA에서 제공하는 Class와 API를 이용해서 간단한 코드만으로 작성이 가능합니다.

하지만..

Page 6: RPC에서 REST까지 간단한 개념소개

저런 코드가 정상 동작하려면..아래와 같은 상황이 보장되어야 합니다.

• 네트워크는 언제나 빠르고 장애가 없음.

• 서버는 클라이언트가 요청시 언제든 즉시 응답.

• 클라이언트는 언제든 서버와 바로바로 연결

그러나 현실은..네트워크, 서버, 클라이언트 모두느려지고, 각종 문제가 발생할 수 있습니다.

Page 7: RPC에서 REST까지 간단한 개념소개

결국..

발생 가능한 예외상황들을모두 예측을 하고대비(구현)해야만 합니다.

물론..

그 모든것은 개발자의 몫!!

Page 8: RPC에서 REST까지 간단한 개념소개

ServerClient

그래서(?) RPC가 등장합니다.

RPCRemote Procedure Call

대략 이런 컨셉입니다.

프로그램A

Client Stub

프로그램B

Server Stub

(Skeleton)

network

개발자가할일

RPC가 대신 해주는 일

Page 9: RPC에서 REST까지 간단한 개념소개

조금더 자세히 보자면..

Server에 있는프로그램 정보를 알고 있는 녀석(IDL)을 활용해서

개발자는..network 통신과 관련된 작업은신경 쓰지 않아도 되고,원격지에 위치한 프로그램을로컬에 있는 프로그램처럼 사용 할 수 있습니다.IDL: Interface Definition Language

Page 10: RPC에서 REST까지 간단한 개념소개

RPC에 대한 더 자세한 내용은아래 2개 링크를 추천.

Introduction to Remote Procedure Call (RPC) - Abdelrahman Al-Ogailhttp://www.slideshare.net/ZiKaS/introduction-to-remote-procedure-call

Remote Procedure Call - Roy Antony Arnold Ghttps://middlewares.wordpress.com/2008/02/01/remote-procedure-call

Page 11: RPC에서 REST까지 간단한 개념소개

그리고 CORBA, RMI가 있습니다.

CORBA: Common Object Request Broker Architecture 로컬/원격을 포괄한 프로그램 객체 간의 메소드 호출 표준화에 목적으로 OMG에서 정의한 규격. 다양한 언어 지원.

RMI: Remote Method Invocation서로 다른 JVM간의 메소드 호출을 지원. JAVA만 지원.

2가지 모두 RPC와 같이원격 프로그램을 로컬에 있는것처럼 사용가능 합니다.분산 환경에서의 remote call.

Page 12: RPC에서 REST까지 간단한 개념소개

RMI, CORBA에 대한 설명은아래 링크 추천

RMI, CORBA and NetBeans - Sing Lihttp://www.developerfusion.com/article/84316/rmi-corba-and-netbeans

Java RMI & CORBA. A comparison of two competing technologieshttp://www.javacoffeebreak.com/articles/rmi_corba

원격 객체 통신(RMI와 CORBA) - 윤경구http://www.javadom.com/tutorial/rmi-idl

Page 13: RPC에서 REST까지 간단한 개념소개

그런데RPC, RMI, CORBA를흔히? 볼수는 없습니다.(사실.. RPC와 그 개념은 여기저기서 사용 되고는 있습니다.)

왜일까?복잡성, 어려움, 보안, …

좀더 자세한 내용은 아래 링크를 추천

Why has CORBA lost popularity?http://stackoverflow.com/questions/3835785/why-has-corba-lost-popularity

Page 14: RPC에서 REST까지 간단한 개념소개

지금까지 본것처럼..socket을 활용해 통신을 하다가,

복잡한 네트워크와 하부영역에 대한캡슐화를 통해간단히(메소드, 펑션) 호출하려는 시도.

그리고,그다음은..

우리에게 익숙한 web을 활용해보려는 시도로 이어집니다.

Page 15: RPC에서 REST까지 간단한 개념소개

SOAPSimple Object Access Protocol

컨셉은 간단(?) 합니다.

HTTP + XML

우리에게 익숙하고 각광받던 2가지 기술을 사용,간단히 ‘메세지’를 주고 받는것처럼 정보를 주고 받자.

SOAP에서는 봉투(Envelope)라는 개념으로 부름.

간단한 그림으로 보면..

Page 16: RPC에서 REST까지 간단한 개념소개

SOAP Simple Work Flow

• Server는 서비스사용법(WSDL)을 작성해서 UDDI로 전송

• Client는 UDDI를 통해 서비스 목록을 확인(lookup)하고,사용법을 참고해서 메세지(SOAP형태)로 Server에게 요청.

Client Server

서비스목록(UDDI) ……… ……lookup publish

요청 SOAP형식으로

Page 17: RPC에서 REST까지 간단한 개념소개

샘플 코드 보기

SOAP Message 예제http://ko.wikipedia.org/wiki/SOAP#SOAP_.EC.83.98.ED.94.8C

WSDL Document Examplehttp://www.tutorialspoint.com/wsdl/wsdl_example.htm

UDDI란?http://en.wikipedia.org/wiki/Universal_Description_Discovery_and_Integration

Page 18: RPC에서 REST까지 간단한 개념소개

마지막으로 REST

RESTREpresentational State Transfer

그동안데이터의 요청/전달을 위해등장했던 기술들이 복잡하고 어려웠기에

우리에게 익숙한 web(HTTP)을있는 그대로 적용해보자는 시도.

Page 19: RPC에서 REST까지 간단한 개념소개

REST를 간단히 정의해보자면

HTTP 1.1을 사용하며, URI를 자원(Resource)으로 표현하고처리결과를 Status Code로 사용하는

일종의 ‘스타일’을 뜻합니다.

그리고REST가 제안하는 스타일에 맞는다면RESTful하다 라고 말합니다.

Page 20: RPC에서 REST까지 간단한 개념소개

HTTP 1.1 ?

HTTP 1.0 에서는 주로 get, post method를 사용했지만,

HTTP 1.1 에서는 추가적으로put, delete method가 존재합니다.

그리고.. 다음과 같은 용도로 사용을 하게 됩니다.

HTTP method CRUD (SQL)

GET 조회 SELECT

POST 등록 INSERT

PUT 수정 UPDATE

DELETE 삭제 DELETE

Page 21: RPC에서 REST까지 간단한 개념소개

URI를 자원으로 표현?

쉽게 이야기하자면URI 에 동사없이명사(자원이름) 로만 구성을 해야합니다.

예를들면http://www.o.com/user/sunny/profile/address

참고로.. 위의 주소를get 방식으로 호출하면: 사용자 주소를 조회put 방식으로 호출하면: 사용자 주소를 수정delete 방식으로 호출하면: 사용자 주소 정보를 삭제

Page 22: RPC에서 REST까지 간단한 개념소개

처리결과를 Status Code 로 사용?

기존에는..http의 처리결과를header의 Status Code는 200 으로, 그리고 body에 처리 결과를 작성.

하지만 REST에서는 처리결과를 header의 Status Code를 활용.

httpheader??body??

Page 23: RPC에서 REST까지 간단한 개념소개

http로 전송되는 메세지의 구조 (request/response)

Message Start-Line

Header Field

공백줄

Message Body

GET /user/sunny HTTP/1.1 Host: www.o.com Content-Length: 9

region=ko

HTTP 1.1 404 Not Found Content-Length: 53 Content-Type: application/json Date: Mon, 26 Jan 2015 09:01:05 GMT

{ “ErrorDetail” : “사용자가 존재하지 않습니다.” }

Page 24: RPC에서 REST까지 간단한 개념소개

http 메세지 예제

/user/sunny 를 호출하지만, 존재하지 않는 사용자인 경우

GET /user HTTP/1.0 Host: www.o.com Content-Length: 12

userId=sunny

HTTP 1.0 200 OK Content-Length: 55 Content-Type: text/html Date: Mon, 26 Jan 2015 09:01:05 GMT

<html><body> 사용자가 존재하지 않습니다. </body></html>

GET /user/sunny HTTP/1.1 Host: www.o.com Content-Length: 000

HTTP 1.1 404 Not Found Content-Length: 53 Content-Type: application/json Date: Mon, 26 Jan 2015 09:01:05 GMT

{ “ErrorDetail” : “존재하지 않는 사용자 정보 입니다.” }

Page 25: RPC에서 REST까지 간단한 개념소개

그리고REST 방식을 사용할때(==RESTful 하게 구현할때)

REST+XML 도 RESTful 입니다!다만, JSon이 용량도 적고 유용하기 때문에..

마지막으로..RESTful 관련 추천링크입니다.

당신의 API가 RESTful 하지 않은 5가지 증거https://beyondj2ee.wordpress.com/2013/03/21/당신의-api가-restful-하지-않은-5가지-증거