Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

21,165 views

Published on

RPC, RMI, CORBA, SOAP, REST, simple, intro

Published in: Internet

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

  1. 1. RPC에서 REST까지 간단한 개념소개 myrisinsun@gmail.com
  2. 2. •RPC •CORBA •RMI •SOAP •REST 이것들을 아주 아주 간단히 훑어볼거에요.
  3. 3. 시작하기전에.. Client-Server 모델 들어 보셨죠? 과거(?)에는
 Client가 Server에 있는 자료를
 요청하고, 받을때 주로 socket 프로그래밍을
 활용했습니다. CLIENT SERVER 주로.. LAN
  4. 4. socket 프로그래밍은..
 대부분의 프로그래밍 언어에서 
 API 형태로 제공을 합니다. 우리는 API Document의 사용법만 확인하고
 손쉽게 구현이 가능합니다. C socket.h JAVA java.net.Socket java.net.ServerSocket
  5. 5. 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를 이용해서
 간단한 코드만으로 작성이 가능합니다. 하지만..
  6. 6. 저런 코드가 정상 동작하려면..
 아래와 같은 상황이 보장되어야 합니다. • 네트워크는 언제나 빠르고 장애가 없음. • 서버는 클라이언트가 요청시 언제든 즉시 응답. • 클라이언트는 언제든 서버와 바로바로 연결 
 그러나 현실은..
 네트워크, 서버, 클라이언트 모두
 느려지고, 각종 문제가 발생할 수 있습니다.
  7. 7. 결국.. 발생 가능한 예외상황들을
 모두 예측을 하고
 대비(구현)해야만 합니다. 물론.. 그 모든것은 개발자의 몫!!
  8. 8. ServerClient 그래서(?) RPC가 등장합니다. RPC
 Remote Procedure Call 대략 이런 컨셉입니다. 프로그램A Client Stub
 
 프로그램B Server Stub (Skeleton) network 개발자가
 할일 RPC가 대신 해주는 일
  9. 9. 조금더 자세히 보자면.. Server에 있는
 프로그램 정보를 알고 있는 녀석(IDL)을
 활용해서 개발자는..
 network 통신과 관련된 작업은
 신경 쓰지 않아도 되고,
 원격지에 위치한 프로그램을
 로컬에 있는 프로그램처럼 사용 할 수 있습니다.
 
 
 IDL: Interface Definition Language
  10. 10. RPC에 대한 더 자세한 내용은
 아래 2개 링크를 추천. Introduction to Remote Procedure Call (RPC) - Abdelrahman Al-Ogail
 http://www.slideshare.net/ZiKaS/introduction-to-remote- procedure-call Remote Procedure Call - Roy Antony Arnold G
 https://middlewares.wordpress.com/2008/02/01/remote- procedure-call
  11. 11. 그리고 CORBA, RMI가 있습니다. CORBA: Common Object Request Broker Architecture
 로컬/원격을 포괄한 프로그램 객체 간의 메소드 호출 표준화에 목적으로 OMG에서 정의한 규격. 다양한 언어 지원. RMI: Remote Method Invocation
 서로 다른 JVM간의 메소드 호출을 지원. JAVA만 지원. 2가지 모두 RPC와 같이
 원격 프로그램을 로컬에 있는것처럼 사용가능 합니다.
 분산 환경에서의 remote call.
  12. 12. RMI, CORBA에 대한 설명은
 아래 링크 추천 RMI, CORBA and NetBeans - Sing Li
 http://www.developerfusion.com/article/84316/rmi- corba-and-netbeans Java RMI & CORBA. A comparison of two competing technologies
 http://www.javacoffeebreak.com/articles/rmi_corba 원격 객체 통신(RMI와 CORBA) - 윤경구
 http://www.javadom.com/tutorial/rmi-idl
  13. 13. 그런데
 RPC, RMI, CORBA를
 흔히? 볼수는 없습니다.
 (사실.. RPC와 그 개념은 여기저기서 사용 되고는 있습니다.) 왜일까?
 복잡성, 어려움, 보안, … 좀더 자세한 내용은 아래 링크를 추천 Why has CORBA lost popularity?
 http://stackoverflow.com/questions/3835785/why-has- corba-lost-popularity
  14. 14. 지금까지 본것처럼..
 socket을 활용해 통신을 하다가, 복잡한 네트워크와 하부영역에 대한
 캡슐화를 통해
 간단히(메소드, 펑션) 호출하려는 시도. 그리고,
 그다음은.. 우리에게 익숙한 
 web을 활용해보려는 시도로 이어집니다.
  15. 15. SOAP
 Simple Object Access Protocol 컨셉은 간단(?) 합니다. HTTP + XML 우리에게 익숙하고 각광받던 2가지 기술을 사용,
 간단히 ‘메세지’를 주고 받는것처럼 정보를 주고 받자. SOAP에서는 봉투(Envelope)라는 개념으로 부름. 간단한 그림으로 보면..
  16. 16. SOAP Simple Work Flow • Server는 서비스사용법(WSDL)을 작성해서 UDDI로 전송 • Client는 UDDI를 통해 서비스 목록을 확인(lookup)하고,
 사용법을 참고해서 메세지(SOAP형태)로 Server에게 요청. Client Server 서비스목록
 (UDDI) ……… ……lookup publish 요청 SOAP형식으로
  17. 17. 샘플 코드 보기 SOAP Message 예제
 http://ko.wikipedia.org/wiki/SOAP#SOAP_.EC.83.98.ED. 94.8C WSDL Document Example
 http://www.tutorialspoint.com/wsdl/wsdl_example.htm UDDI란?
 http://en.wikipedia.org/wiki/ Universal_Description_Discovery_and_Integration
  18. 18. 마지막으로 REST REST
 REpresentational State Transfer 그동안
 데이터의 요청/전달을 위해
 등장했던 기술들이 복잡하고 어려웠기에 우리에게 익숙한 web(HTTP)을
 있는 그대로 적용해보자는 시도.
  19. 19. REST를 간단히 정의해보자면 HTTP 1.1을 사용하며,
 URI를 자원(Resource)으로 표현하고
 처리결과를 Status Code로 사용하는 일종의 ‘스타일’을 뜻합니다. 그리고
 REST가 제안하는 스타일에 맞는다면
 RESTful하다 라고 말합니다.
  20. 20. 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
  21. 21. URI를 자원으로 표현? 쉽게 이야기하자면
 URI 에 동사없이
 명사(자원이름) 로만 구성을 해야합니다. 예를들면
 http://www.o.com/user/sunny/profile/address 참고로.. 위의 주소를
 get 방식으로 호출하면: 사용자 주소를 조회
 put 방식으로 호출하면: 사용자 주소를 수정
 delete 방식으로 호출하면: 사용자 주소 정보를 삭제
  22. 22. 처리결과를 Status Code 로 사용? 기존에는..
 http의 처리결과를
 header의 Status Code는 200 으로,
 그리고 body에 처리 결과를 작성. 하지만 REST에서는
 처리결과를 header의 Status Code를 활용. http
 header??
 body??
  23. 23. 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” : “사용자가 존재하지 않습 니다.” }
  24. 24. 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” : “존재하지 않는 사용자 정 보 입니다.” }
  25. 25. 그리고
 REST 방식을 사용할때(==RESTful 하게 구현할때) REST+XML 도 RESTful 입니다!
 다만, JSon이 용량도 적고 유용하기 때문에.. 마지막으로..
 RESTful 관련 추천링크입니다. 당신의 API가 RESTful 하지 않은 5가지 증거
 https://beyondj2ee.wordpress.com/2013/03/21/당신의-api 가-restful-하지-않은-5가지-증거

×