SlideShare a Scribd company logo
1 of 25
Download to read offline
RPC에서 REST까지
간단한 개념소개
myrisinsun@gmail.com
•RPC
•CORBA
•RMI
•SOAP
•REST
이것들을 아주 아주 간단히 훑어볼거에요.
시작하기전에..
Client-Server 모델 들어 보셨죠?
과거(?)에는

Client가 Server에 있는 자료를

요청하고, 받을때 주로 socket 프로그래밍을

활용했습니다.
CLIENT SERVER
주로..
LAN
socket 프로그래밍은..

대부분의 프로그래밍 언어에서 

API 형태로 제공을 합니다.
우리는 API Document의 사용법만 확인하고

손쉽게 구현이 가능합니다.
C
socket.h
JAVA
java.net.Socket
java.net.ServerSocket
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를 이용해서

간단한 코드만으로 작성이 가능합니다.
하지만..
저런 코드가 정상 동작하려면..

아래와 같은 상황이 보장되어야 합니다.
• 네트워크는 언제나 빠르고 장애가 없음.
• 서버는 클라이언트가 요청시 언제든 즉시 응답.
• 클라이언트는 언제든 서버와 바로바로 연결


그러나 현실은..

네트워크, 서버, 클라이언트 모두

느려지고, 각종 문제가 발생할 수 있습니다.
결국..
발생 가능한 예외상황들을

모두 예측을 하고

대비(구현)해야만 합니다.
물론..
그 모든것은 개발자의 몫!!
ServerClient
그래서(?) RPC가 등장합니다.
RPC

Remote Procedure Call
대략 이런 컨셉입니다.
프로그램A
Client
Stub



프로그램B
Server
Stub
(Skeleton)
network
개발자가

할일
RPC가
대신 해주는 일
조금더 자세히 보자면..
Server에 있는

프로그램 정보를 알고 있는 녀석(IDL)을

활용해서
개발자는..

network 통신과 관련된 작업은

신경 쓰지 않아도 되고,

원격지에 위치한 프로그램을

로컬에 있는 프로그램처럼 사용 할 수 있습니다.





IDL: Interface Definition Language
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
그리고 CORBA, RMI가 있습니다.
CORBA: Common Object Request Broker Architecture

로컬/원격을 포괄한 프로그램 객체 간의 메소드 호출 표준화에
목적으로 OMG에서 정의한 규격. 다양한 언어 지원.
RMI: Remote Method Invocation

서로 다른 JVM간의 메소드 호출을 지원. JAVA만 지원.
2가지 모두 RPC와 같이

원격 프로그램을 로컬에 있는것처럼 사용가능 합니다.

분산 환경에서의 remote call.
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
그런데

RPC, RMI, CORBA를

흔히? 볼수는 없습니다.

(사실.. RPC와 그 개념은 여기저기서 사용 되고는 있습니다.)
왜일까?

복잡성, 어려움, 보안, …
좀더 자세한 내용은 아래 링크를 추천
Why has CORBA lost popularity?

http://stackoverflow.com/questions/3835785/why-has-
corba-lost-popularity
지금까지 본것처럼..

socket을 활용해 통신을 하다가,
복잡한 네트워크와 하부영역에 대한

캡슐화를 통해

간단히(메소드, 펑션) 호출하려는 시도.
그리고,

그다음은..
우리에게 익숙한 

web을 활용해보려는 시도로 이어집니다.
SOAP

Simple Object Access Protocol
컨셉은 간단(?) 합니다.
HTTP + XML
우리에게 익숙하고 각광받던 2가지 기술을 사용,

간단히 ‘메세지’를 주고 받는것처럼 정보를 주고 받자.
SOAP에서는 봉투(Envelope)라는 개념으로 부름.
간단한 그림으로 보면..
SOAP Simple Work Flow
• Server는 서비스사용법(WSDL)을 작성해서 UDDI로 전송
• Client는 UDDI를 통해 서비스 목록을 확인(lookup)하고,

사용법을 참고해서 메세지(SOAP형태)로 Server에게 요청.
Client Server
서비스목록

(UDDI)
………
……lookup publish
요청
SOAP형식으로
샘플 코드 보기
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
마지막으로 REST
REST

REpresentational State Transfer
그동안

데이터의 요청/전달을 위해

등장했던 기술들이 복잡하고 어려웠기에
우리에게 익숙한 web(HTTP)을

있는 그대로 적용해보자는 시도.
REST를 간단히 정의해보자면
HTTP 1.1을 사용하며,

URI를 자원(Resource)으로 표현하고

처리결과를 Status Code로 사용하는
일종의 ‘스타일’을 뜻합니다.
그리고

REST가 제안하는 스타일에 맞는다면

RESTful하다 라고 말합니다.
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
URI를 자원으로 표현?
쉽게 이야기하자면

URI 에 동사없이

명사(자원이름) 로만 구성을 해야합니다.
예를들면

http://www.o.com/user/sunny/profile/address
참고로.. 위의 주소를

get 방식으로 호출하면: 사용자 주소를 조회

put 방식으로 호출하면: 사용자 주소를 수정

delete 방식으로 호출하면: 사용자 주소 정보를 삭제
처리결과를 Status Code 로 사용?
기존에는..

http의 처리결과를

header의 Status Code는 200 으로,

그리고 body에 처리 결과를 작성.
하지만 REST에서는

처리결과를 header의 Status Code를 활용.
http

header??

body??
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” : “사용자가 존재하지 않습
니다.” }
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” : “존재하지 않는 사용자 정
보 입니다.” }
그리고

REST 방식을 사용할때(==RESTful 하게 구현할때)
REST+XML 도 RESTful 입니다!

다만, JSon이 용량도 적고 유용하기 때문에..
마지막으로..

RESTful 관련 추천링크입니다.
당신의 API가 RESTful 하지 않은 5가지 증거

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

More Related Content

What's hot

An Overview of Web Services: SOAP and REST
An Overview of Web Services: SOAP and REST An Overview of Web Services: SOAP and REST
An Overview of Web Services: SOAP and REST Ram Awadh Prasad, PMP
 
gRPC and Microservices
gRPC and MicroservicesgRPC and Microservices
gRPC and MicroservicesJonathan Gomez
 
Introduction to Docker Compose
Introduction to Docker ComposeIntroduction to Docker Compose
Introduction to Docker ComposeAjeet Singh Raina
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
Introduction to ansible
Introduction to ansibleIntroduction to ansible
Introduction to ansibleOmid Vahdaty
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdfOKLABS
 
gRPC: The Story of Microservices at Square
gRPC: The Story of Microservices at SquaregRPC: The Story of Microservices at Square
gRPC: The Story of Microservices at SquareApigee | Google Cloud
 
Node.Js: Basics Concepts and Introduction
Node.Js: Basics Concepts and Introduction Node.Js: Basics Concepts and Introduction
Node.Js: Basics Concepts and Introduction Kanika Gera
 
Asynchronous Programming in .NET
Asynchronous Programming in .NETAsynchronous Programming in .NET
Asynchronous Programming in .NETPierre-Luc Maheu
 
왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법GeunCheolYeom
 
REST vs gRPC: Battle of API's
REST vs gRPC: Battle of API'sREST vs gRPC: Battle of API's
REST vs gRPC: Battle of API'sLuram Archanjo
 
Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...
Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...
Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...Codemotion
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
Cilium - BPF & XDP for containers
 Cilium - BPF & XDP for containers Cilium - BPF & XDP for containers
Cilium - BPF & XDP for containersDocker, Inc.
 
Introduction to gRPC
Introduction to gRPCIntroduction to gRPC
Introduction to gRPCPrakash Divy
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker, Inc.
 
Angular and The Case for RxJS
Angular and The Case for RxJSAngular and The Case for RxJS
Angular and The Case for RxJSSandi Barr
 

What's hot (20)

An Overview of Web Services: SOAP and REST
An Overview of Web Services: SOAP and REST An Overview of Web Services: SOAP and REST
An Overview of Web Services: SOAP and REST
 
gRPC and Microservices
gRPC and MicroservicesgRPC and Microservices
gRPC and Microservices
 
gRPC Overview
gRPC OverviewgRPC Overview
gRPC Overview
 
Introduction to Docker Compose
Introduction to Docker ComposeIntroduction to Docker Compose
Introduction to Docker Compose
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Introduction to ansible
Introduction to ansibleIntroduction to ansible
Introduction to ansible
 
Introduction to gRPC
Introduction to gRPCIntroduction to gRPC
Introduction to gRPC
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdf
 
gRPC: The Story of Microservices at Square
gRPC: The Story of Microservices at SquaregRPC: The Story of Microservices at Square
gRPC: The Story of Microservices at Square
 
Node.Js: Basics Concepts and Introduction
Node.Js: Basics Concepts and Introduction Node.Js: Basics Concepts and Introduction
Node.Js: Basics Concepts and Introduction
 
Docker swarm
Docker swarmDocker swarm
Docker swarm
 
Asynchronous Programming in .NET
Asynchronous Programming in .NETAsynchronous Programming in .NET
Asynchronous Programming in .NET
 
왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법왕초보를 위한 도커 사용법
왕초보를 위한 도커 사용법
 
REST vs gRPC: Battle of API's
REST vs gRPC: Battle of API'sREST vs gRPC: Battle of API's
REST vs gRPC: Battle of API's
 
Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...
Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...
Introduction to gRPC: A general RPC framework that puts mobile and HTTP/2 fir...
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
Cilium - BPF & XDP for containers
 Cilium - BPF & XDP for containers Cilium - BPF & XDP for containers
Cilium - BPF & XDP for containers
 
Introduction to gRPC
Introduction to gRPCIntroduction to gRPC
Introduction to gRPC
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
Angular and The Case for RxJS
Angular and The Case for RxJSAngular and The Case for RxJS
Angular and The Case for RxJS
 

Viewers also liked

2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬Channy Yun
 
Introduction to Remote Procedure Call
Introduction to Remote Procedure CallIntroduction to Remote Procedure Call
Introduction to Remote Procedure CallAbdelrahman Al-Ogail
 
The Future of Everything
The Future of EverythingThe Future of Everything
The Future of EverythingMichael Ducy
 
SOAP REST 이해
SOAP REST 이해SOAP REST 이해
SOAP REST 이해Jake Yoon
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
SOAP 기반/ RESTful기반 웹서비스 비교
SOAP 기반/ RESTful기반 웹서비스 비교SOAP 기반/ RESTful기반 웹서비스 비교
SOAP 기반/ RESTful기반 웹서비스 비교seungdols
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기Juwon Kim
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30Donghan Kim
 
NoSQL Database
NoSQL DatabaseNoSQL Database
NoSQL DatabaseSteve Min
 
NoSQL 분석 Slamdata
NoSQL 분석 SlamdataNoSQL 분석 Slamdata
NoSQL 분석 SlamdataPikdata Inc.
 
개인정보 비식별화 기술 동향 및 전망
개인정보 비식별화 기술 동향 및 전망 개인정보 비식별화 기술 동향 및 전망
개인정보 비식별화 기술 동향 및 전망 Donghan Kim
 
NoSQL distilled 왜 NoSQL인가
NoSQL distilled 왜 NoSQL인가NoSQL distilled 왜 NoSQL인가
NoSQL distilled 왜 NoSQL인가Choonghyun Yang
 
Do not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYDo not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYHyun-woo Park
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 mWonchang Song
 
[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델kidoki
 
NoSQL distilled.그래프 데이터베이스
NoSQL distilled.그래프 데이터베이스NoSQL distilled.그래프 데이터베이스
NoSQL distilled.그래프 데이터베이스Choonghyun Yang
 

Viewers also liked (20)

2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
 
Introduction to Remote Procedure Call
Introduction to Remote Procedure CallIntroduction to Remote Procedure Call
Introduction to Remote Procedure Call
 
The Future of Everything
The Future of EverythingThe Future of Everything
The Future of Everything
 
Gokit
GokitGokit
Gokit
 
SOAP REST 이해
SOAP REST 이해SOAP REST 이해
SOAP REST 이해
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
SOAP 기반/ RESTful기반 웹서비스 비교
SOAP 기반/ RESTful기반 웹서비스 비교SOAP 기반/ RESTful기반 웹서비스 비교
SOAP 기반/ RESTful기반 웹서비스 비교
 
RESTful API 제대로 만들기
RESTful API 제대로 만들기RESTful API 제대로 만들기
RESTful API 제대로 만들기
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
 
NoSQL Database
NoSQL DatabaseNoSQL Database
NoSQL Database
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
NoSQL 분석 Slamdata
NoSQL 분석 SlamdataNoSQL 분석 Slamdata
NoSQL 분석 Slamdata
 
No sql 분산모델
No sql 분산모델No sql 분산모델
No sql 분산모델
 
개인정보 비식별화 기술 동향 및 전망
개인정보 비식별화 기술 동향 및 전망 개인정보 비식별화 기술 동향 및 전망
개인정보 비식별화 기술 동향 및 전망
 
NoSQL distilled 왜 NoSQL인가
NoSQL distilled 왜 NoSQL인가NoSQL distilled 왜 NoSQL인가
NoSQL distilled 왜 NoSQL인가
 
Do not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDYDo not use Django as like as SMARTSTUDY
Do not use Django as like as SMARTSTUDY
 
Docker.소개.30 m
Docker.소개.30 mDocker.소개.30 m
Docker.소개.30 m
 
[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델[NoSQL] 2장. 집합적 데이터 모델
[NoSQL] 2장. 집합적 데이터 모델
 
NoSQL distilled.그래프 데이터베이스
NoSQL distilled.그래프 데이터베이스NoSQL distilled.그래프 데이터베이스
NoSQL distilled.그래프 데이터베이스
 

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

소켓프로그래밍 기초요약
소켓프로그래밍 기초요약소켓프로그래밍 기초요약
소켓프로그래밍 기초요약세빈 정
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 SeongHyun Ahn
 
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...JooHyung Kim
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Sung-jae Park
 
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편Darion Kim
 
Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기Junyoung Sung
 
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)KH Park (박경훈)
 
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...Cloud-Barista Community
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기NAVER D2
 
AWS의 하둡 관련 서비스 - EMR/S3
AWS의 하둡 관련 서비스 - EMR/S3AWS의 하둡 관련 서비스 - EMR/S3
AWS의 하둡 관련 서비스 - EMR/S3Keeyong Han
 
HTTP와 HTTPS의 차이 그리고 SSL에 대한 설명
HTTP와 HTTPS의 차이 그리고 SSL에 대한 설명HTTP와 HTTPS의 차이 그리고 SSL에 대한 설명
HTTP와 HTTPS의 차이 그리고 SSL에 대한 설명Seongho Lee
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista Community
 
Cse342 chapter 04
Cse342 chapter 04Cse342 chapter 04
Cse342 chapter 04Jinil Nam
 
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista Community
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석Tommy Lee
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea Strike
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Androidtaeinkim6
 

Similar to RPC에서 REST까지 간단한 개념소개 (20)

소켓프로그래밍 기초요약
소켓프로그래밍 기초요약소켓프로그래밍 기초요약
소켓프로그래밍 기초요약
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
 
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
AWS Community Day 2022 - Nitro Enclave를 이용하여 안전하게 고객 정보 다...
 
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
 
Amazed by aws 2nd session
Amazed by aws 2nd sessionAmazed by aws 2nd session
Amazed by aws 2nd session
 
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
IT 이노베이션 센터 이야기 - AWS Lambda를 활용한 개발 스폰서십 확보편
 
Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기Aws lambda 와 함께 서버리스 서비스 만들기
Aws lambda 와 함께 서버리스 서비스 만들기
 
Node week1
Node week1Node week1
Node week1
 
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
3일차-닷넷 분산 기술의 이해 (인피니트 강의자료)
 
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...
Cloud-Barista 제3차 오픈 컨퍼런스 : CB-Spider - 멀티 클라우드 인프라 연동(Multi-Cloud Infrastruc...
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
AWS의 하둡 관련 서비스 - EMR/S3
AWS의 하둡 관련 서비스 - EMR/S3AWS의 하둡 관련 서비스 - EMR/S3
AWS의 하둡 관련 서비스 - EMR/S3
 
HTTP와 HTTPS의 차이 그리고 SSL에 대한 설명
HTTP와 HTTPS의 차이 그리고 SSL에 대한 설명HTTP와 HTTPS의 차이 그리고 SSL에 대한 설명
HTTP와 HTTPS의 차이 그리고 SSL에 대한 설명
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제7차 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
 
Cse342 chapter 04
Cse342 chapter 04Cse342 chapter 04
Cse342 chapter 04
 
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
Cloud-Barista 제6차 오픈 컨퍼런스 : 멀티클라우드 인프라 서비스 연동 (CB-Spider)
 
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
[개방형 클라우드 플랫폼 오픈세미나 오픈클라우드 Pub] 3.open shift 분석
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Android
 

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

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