SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
대용량 분산 아키텍쳐
#5.REST
조대협
http://bcho.tistory.com
ICE Break
Roy Fielding REST
Open API
Service Companies
WebService
목차
1. Beginning of REST
2. Basic of REST
3. Basic REST example
4. Advanced REST example
5. Advanced REST
6. REST Implementation
7. Reference Architecture of REST
8. REST Stub generator
9. REST implementation considerations
1. Beginning of REST
• 웹(HTTP)의 공동 창시자 Roy Fielding의 2000년 박사 논문에 소개 됨.
• 기존의 웹이 HTTP의 장점을 100% 활용하지 못하고 있음
• 네트워크 아키텍쳐 (Not a protocol)
• De facto Standard
• 오픈 진영(Google ,Amazon) 에 의해서 주도됨
2. Basic of REST
• REST의 구성
구성 요소 내용 표현 방법
Noun 자원을 정의 HTTP URI
Verb 자원에 대한 행위를 정의 HTTP Method
Representations 자원에 대한 행위의 내용을 정의 HTTP Message Pay Load
2. Basic of REST
• Examples
 자바스터디 시스템에 이름이 “bcho”이 사용자를 생성
 자바스터디 시스템에서 이름이 “bcho”이 사용자 정보를 조회
 자바스터디 시스템에서 이름이 “bcho”인 사용자 정보를 변경
 자바스터디 시스템에서 이름이 “bcho”인 사용자 정보를 삭제
URI : http://www.javastudy.co.kr/users/bcho
Method : GET
URI : http://www.javastudy.co.kr/users/bcho
Method : POST
<user>
<name>조대협</name>
<email>bcho@bea.com</email>
</user>
URI : http://www.javastudy.co.kr/users/bcho
Method : PUT
<user>
<name>조대협</name>
<email>bcho@bea.com</email>
</user>
URI : http://www.javastudy.co.kr/users/bcho
Method : DELETE
Noun
Verb
Representation
2. Basic of REST
• Noun
 Noun은 Resource를 정의하며 각각 Unique한 URI를 갖는다.
 Select(GET)에 한하여 Query String을 이용하여 URI를 정의할 수 있다.
 Resource의 URI는 Human Readable한 포맷을 사용한다.
 Unique한 URI 사용으로 인해서 GET에 대해서 웹캐쉬 사용가능  비약적
인 성능 향상
http://example.org/products?category=food
http://example.org/products/1234
http://example.org/user/scott
http://example.org/account/XA123-345
권장 http://example.org/orders/2007/11
권장하지 않는 사용법 http://example.org/ITGKA/XATTY
2. Basic of REST
• Verb
 HTTP Method를 이용하여 Resource에 대한 행위 (CRUD)를 나타냄
 오래된 네트워크 장비나 서버의 경우 GET/POST만 허용
 HTTP 헤더 사용 x-http-method
 POST,GET,PUT,DELETE 만으로 표현하기 어려운 행위가 있음
 행위를 재 정의 : 이메일을 보낸다  이메일을 생성한다.
 제어의 의미나 기타 행위에 대해서는 내부적인 표준 마련  PUT : CONTROL
Http Method Description
POST Create
GET Select
PUT Create or Update
DELETE Delete
OPTION Get available Method
2. Basic of REST
• Representation
– GET으로 오는 리소스의 데이타를 표현
– UPDATE나 CREATE시에 전송되는 리소스의 데이타를 표현
– 포맷
• XML 또는 JSON을 주로 사용 (표준은 없음)
• 하나의 리소스에 대해서 여러가지 포맷을 동시 사용이 가능
• HTTP Content-Type /Accept 헤더로 정의 가능
– 구조
• 데이타의 컬럼 구조 (Scheme)를 정의
• REST에서는 구조를 정의하는 명시적인 방법이 없음 (CF. WebService/WSDL)
3. Basic REST example
• REST를 이용하여 계좌이체를 수행하는 애플케이션
• 시나리오
 STEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.
 STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다.
 STEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다.
 STEP 4. 이체된 결과를 확인한다.
3. Basic REST example
• STEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.  로그인 했다
고 가정
• STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다
REQUEST
URI http://bank.org/accounts?findby=7t676323a
METHOD GET
RESPONSE
HTTP Code 200 OK
Pay Load Content-Type: application/xml;charset=UTF-8
<accounts xmlns="urn:org:bank:accounts">
<account>
<id>AZA12093</id>
<customer-id>7t676323a</customer-id>
<balance currency="USD">993.95</balance>
</account>
<account>
<id>ADK31242</id>
<customer-id>7t676323a</customer-id>
<balance currency="USD">534.62</balance>
</account>
</accounts>
사용자 ID
두개의 계좌 정보
가 리턴됨
3. Basic REST example
• STEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다.
REQUEST
URI http://bank.org/transfer
Method POST
PayLoad Content-Type: application/xml;charset=UTF-8
<transfer xmlns="urn:org:bank:accounts">
<from>account:AZA12093</from>
<to>account:ADK31242</to>
<amount currency="USD">100</amount>
<note>RESTing</note>
</transfer>
RESPONSE
HTTP Code 201 Created
Pay Load Content-Type: application/xml;charset=UTF-8
<transfer xmlns="urn:org:bank:accounts">
<from>account:AZA12093</from>
<to>account:ADK31242</to>
<id>transfer:XTA8763</id>
<amount currency="USD">100</amount>
<note>RESTing</note>
</transfer>
계좌 이체 Transaction Id
계좌 이체 Transaction 이 생성됨
3. Basic REST example
• STEP 4. 하루가 지난후 계좌이체 결과를 조회
REQUEST
URI http://bank.org/check/XTA8763
Method GET
RESPONSE
HTTP Code 200 OK
Pay Load Content-Type: application/xml;charset=UTF-8
<status xmlns="urn:org:bank:accounts">
<code>01</code>
<message xml:lang="en">Pending</message>
</status>
계좌 이체 진행중
4. Advanced REST example
• 앞의 예제에서 누락된 HTTP의 특성
– LINK의 누락
• Link는 리소스간의 관계를 정의할 수 있다.
• Link를 통해서 리소스간의 BPM과 같은 Work-flow를 정의할 수 있다.
– Content-Type의 누락
• Input/Output Message Type을 정의할 수 있다.
이것이 과연 REST?
가장 기초중의 기초, 그럼 진짜 REST는?
4. Advanced REST example
• STEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.  로그인 했다
고 가정
• STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다
REQUEST
URI http://bank.org/accounts?findby=7t676323a
METHOD GET
RESPONSE
HTTP Code 200 OK
Pay Load Content-Type: application/vnd.bank.org.account+xml;charset=UTF-8
<accounts xmlns="urn:org:bank:accounts">
<account>
<id>AZA12093</id>
<link href="http://bank.org/account/AZA12093" rel="self"/>
<link rel="http://bank.org/rel/transfer edit"
type="application/vnd.bank.org.transfer+xml"
href="http://bank.org/transfers"/>
<link rel="http://bank.org/rel/customer"
type="application/vnd.bank.org.customer+xml"
href="http://bank.org/customer/7t676323a"/>
<balance currency="USD">993.95</balance>
</account>
<account>
<id>ADK31242</id>
중략
</account>
</accounts>
Content-Type으로 메세지의 형태를 정의
다음 상태로의 LINK를 제공하여 상태 흐름을 정의
Self descriptive message 구현
4. Advanced REST example
• STEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다.
REQUEST
URI http://bank.org/transfer
Method POST
PayLoad Content-Type: application/vnd.bank.org.transfer+xml;charset=UTF-8
<transfer xmlns="urn:org:bank:accounts">
<from>account:AZA12093</from>
<to>account:ADK31242</to>
<amount currency="USD">100</amount>
<note>RESTing</note>
</transfer>
RESPONSE
HTTP Code 201 Created
Pay Load Content-Type: application/vnd.bank.org.transfer+xml;charset=UTF-8
<transfer xmlns="urn:org:bank:accounts">
<link rel="self“
href="http://bank.org/transfer/XTA8763"/>
<link rel="http://bank.org/rel/transfer/from"
type="application/vnd.bank.org.account+xml"
href="http://bank.org/account/AZA12093"/>
<link rel="http://bank.org/rel/transfer/status"
type="application/vnd.bank.org.status+xml"
href="http://bank.org/check/XTA8763"/>
<id>transfer:XTA8763</id>
<amount currency="USD">100</amount>
<note>RESTing</note>
</transfer>
4. Advanced REST example
• STEP 4. 하루가 지난후 계좌이체 결과를 조회
REQUEST
URI http://bank.org/check/XTA8763
Method GET
RESPONSE
HTTP Code 200 OK
Pay Load Content-Type: application/vnd.bank.org.transfer+xml;charset=UTF-8
l;charset=UTF-8
<status xmlns="urn:org:bank:accounts">
<code>01</code>
<message xml:lang="en">Pending</message>
</status>
계좌 이체 진행중
5. Advanced REST
• Advanced REST 기능
 Link를 이용한 Resource간의 관계 정의
 Content-Type을 이용한 Resource의 메시지 형태 정의
 Conditional GET을 이용한 성능 향상
 ETAG/Last Modified를 이용한 동시 Update 방지
 Stateless
5. Advanced REST
• Link
– Resource간의 관계를 정의
– LINK를 따라가면서 API의 사용법을 알 수 있음 (Self-Descriptive)
– Releation,URI,Content-Type으로 구성됨
• Relation : Resource간의 관계를 정의 (사람이 이해하기 쉬운 형태라야함)
• URI : 연관된 Resource에 대한 URI
• Content-Type: 해당 Resource에 대한 데이터 포맷과 구조
– 표준안은 없고 논문에 따라 상당히 많은 표현 방법을 권장함
<link rel=“Relation” href=“http://URI” type=“Resource의 포맷과 구조” />
<link rel=“order” hfer=“http://example.org/order” type=“application/example.org.order+xml” />
<관계 href=“http://URI” />
<order href=“http://example.org/order” />
예제 1)
예제 2)
• 단순하고 이해하기 쉬움
• 관계가 XML Element로 표현되기 때문에 XML 스키마의 복잡도가 증가함
• In/out message 에 대한 타입이 정의되지 않음 (HEAD 등을 이용하여 Query하는 디자인이 필요)
• 정형화된 형태로 실제 구현에 유리함
• 가독성이 떨어짐
• In/out message에 대한 타입 정의가 모호함 (Resource에 대한 데이터 타입은 원칙적으로 하나이지
만 예외에 대한 대응 능력이 떨어짐)
5. Advanced REST
• Content-Type
 Resource Data에 대한 포맷(XML,ATOM,JSON) 과 구조(컬럼구조)를 정의
함
 하나의 Resource에 대해서 여러 데이터 포맷지원이 가능한 (Multiple
representation)
 HTTP Content-Type 헤더를 이용함
 포맷 정의
• Content-Type:application/xml 형식으로 일반적으로 Content-Type에 명기
• 서버에 따라서 Content-Type 헤더를 인식 못하는 경우가 있음
– 이경우 X- 헤더를 사용하거나
– URI에 데이터 포맷을 명기할 수 있음 /product/321.xml , /product/321.json
 구조 정의
• Content-Type:application/org.example.order+xml 과 같이 Content-Type에
명기하는 방안
• Content-Type:application/xml + <order
xmlns=“http://example.org/order.xsd” /> 와 같이 Content-Type + XML
Name Space를 사용
• 일반적인 형태에서는 구조를 정의 안하고 문서를 통해서 정의하여 배포하는 경우
가 많음
5. Advanced REST
• Conditional GET
– Web Proxy를 이용하여, 캐슁된 내용이 변경이 되지 않았으면 캐쉬 내용을
재활용하는 기술
– 서버 성능과 자원사용의 효율성이 비약적으로 높아짐
– Resource에 대한 URI가 유일하기 때문에 가능함
– Last-Modified 헤더나 ETAG 헤더를 이용하여 구현 가능
※ Resource마다 Last-Modified 값을 관리해야 함
• Conditional GET with Last-Modified Header
Client REST
GET /partners/UK
200 OK
Last-Modified: Sun, 21 Jan 2007 09:35:19 GMT
[response]
GET /partners/UK
If-Modified-Since: Sun, 21 Jan 2007 09:35:19 GMT
304 Not Modified
Some
time
later
No content
5. Advanced REST
• Conditional GET with ETag
Client REST
GET /partners/UK
200 OK
ETag:”some UID”
[response]
GET /partners/UK
If-None-Match:”some UID”
304 Not Modified
Some
time
later
No content
5. Advanced REST
• ETAG/Last Modified를 이용한 동시 Update 방지
– Etag나 Last-Modified 헤더 이용
– 동시에 두 사용자가 하나의 Resource에 업데이트를 하여 데이터가 달라지는 문제를
방지
Client1 REST
GET /party/42
200 OK
ETag:”some UID”
[response]
POST /party/42
ETag:”some UID”
412 Precondition not satisfied
Client2
POST /party/42
ETag:”some UID”
GET /party/42
200 OK
ETag:”some UID”
[response]
Update가 끝난후 Etag가 변경됨
예전 Etag값으로 Update를 요청했기 때문에
412 에러를 내보냄
5. Advanced REST
• REST 보안
– Authentication : APIKey(Public/Private Key를 이용한 Handshake),
OAuth2 etc
– Transport Layer : SSL (안전하지 않음)
– Message Level encryption 고려
– HMAC을 이용한 무결성 보장
• 메세지 전문에서 Private Key를 가지고, HMAC 생성. (MD5,SHA1-256등 사용)
• 메세지 위변조 방지
– TimeStamp를 이용한 ReplayAttack 방지
HMAC (Key, (메세지 데이타+timestamp) )
6. REST implementation
• Jersey
– JSR-311 JAX-RS Reference Implementation (https://jersey.dev.java.ne
t/)
– 장점
• 구현이 매우 쉬움 (Annotation 사용)
• Multiple contents representation (XML,JSON) 지원
– 단점
• Advanced REST의 모든 특징을 수용하기에는 부족함
– 특징
• WAR 형태로 배포됨
• JAXB를 이용한 XML2JAVA Binding 사용 (VO를 그대로 사용할 수 있음)
• Node.JS
– 자바스크립트 기반의 서버 엔진
– Node.JS + Express(MVC) + MongoDB = 5~6줄로 REST API 개발
6. REST implementation
URI
HTTP Method
Content-Type
Content-Type: Input Message Type
Content-Type : Output Message Type
Read Parameter from Query String
http://example.org/resource?search=XX
URI
Read Parameter from URI
http://example.org/resource/{container}
7. Reference Architecture of REST
• 전통적인 REST 구현체의 문제점
 공통 기능의 중복 개발
 단일 프로토콜만 지원
 변화 (로직,전문 변화)시 재구현이 필요함  낮은 유연성
• 해결 방안
 REST를 위한 Infrastructure의 구축
7. Reference Architecture of REST
• REST with ESB Architecture
Protocol Conversion
REST
/XML WS XML RPC
Handling Cross cutting concern
Mediation Logic
SLA mgmt & Monitoring
REST
/JSON
Business
Logic
REST
Business
Logic
REST
PLUG IN PLUG IN
REST
Components
Enterprise
Service Bus
 Protocol Conversion
 REST/XML, REST JSON등 다양항 프로
토콜지원
 URI 변환, 헤더 처리
 Cross Cutting Concern
 Logging,Billing,Security등의 공통 기능
처리
 Mediation Logic
 Mash up, Function Adding 등의 REST
서비스 기능 변경
 SLA Management & Monitoring
 Throttling, Alert, Status 모니터링 기능 제공
7. Reference Architecture of REST
Enterprise Service Bus
Access Layer
External
Edge Proxy
Common
Proxy
Internal
Edge Proxy
REST Component
Party
Resource
REST Component
Order
Resource
Local
Proxy
Business
Resource
Local
Proxy
Business
Resource
Local
Proxy
Business
Resource REST Component
Content
Resource
WebServer
Consumer
Security Provider
Web Server
• REST with ESB Architecture
7. Reference Architecture of REST
• ESB Architecture for REST
Edge Proxy
Common Proxy
Local Proxy
Business
Resource
Generic Proxy
Monitoring
Auditing
CCC-Logging
Alert
Throttling
SLA
Ignore
Reporting
CCC-Exception Handling
Auto retry
Human Error handling
OAM
Security
Framework
Resource Application
Components
Orchestration Logic
Transformation
Compensation
Mediation
컴포넌트 기능 Proxy :
Resource
Edge
Proxy
프로토콜 변
환
1:N
Common
Proxy
공통 기능
수행
(Logging,빌
링,보안)
1:N
Local
Proxy
Mediation
Logic 수행
1:1
Business
Resource
SLA 및 모
니터링
1:1
7. Reference Architecture of REST
• Mash up in ESB
Enterprise Service Bus REST
REST
REST
Expose Layer
Business
Service
Business
Service
Business
Service
Open API
Open API
Open API
Access Layer
Common
Proxy
Edge
Proxy
Local Proxy
Service
Local Proxy
Service
Local Proxy
Service
Mashup
Local Proxy
8. REST Stub generator
• REST의 또다른 문제점
– 클라이언트 STUB이 없음 (WS는 자동 STUB이 있음)
– REST 서비스에 대한 메뉴얼을 만들어서 웹에 배포해야함
• 해결안
– REST 소스코드를 자동 분석하여 CLIENT STUB과 메뉴얼을 자동생성
※ 요즘은 JSON Doc을 만들어서 호출
JAX-RS
Source Code
Parser
(Qdox)
XML
(Meta Info)
Client Stub Code
REST API Manual
(HTML)
XSLT
(Style Sheet)
Velocity
(Code Template)
Generator Tool Kit
8. REST Stub generator
• REST Stub generator implementation sample
JAX-RS
Source Code
Client Stub Code
REST API Manual
(HTML)
8. REST Stub generator
• Mapping Rule
Output Parameter
Resource name
Endpoint URI
Description
Method Summary
||Method||EndpointURI||Http Method||Summary||
Endpoint URI Http method Response type
Description
Overview
Path parameter
|| name || type || description ||
Query parameter
|| name || type || required || description ||
Message payload
||element name || type || multiplicity|| description||
XML Scheme
Input Parameter
Header
|| headerparam || type || required || description ||
Header
|| headerparam || type || required || description ||
Message payload
||element name || type || multiplicity|| description||
XML Scheme
Http response code
|| Http response code || description ||
Method
Input
Http-method :
Endpoint-uri :
Http header & values
Message Payload
Output
Http-response code
Http header & values
Message Payload
Sample
JAX-RS source code
Meta Information
public void method(@HttpHeader (“x-REST-requestid”)String requestid
From JAXB code
From JAXB code
1..N1..1
We will use header with “HeaderConfigVo”
will not support @HttpHeader annotation in this phase
Use Common Standard
Use Common Standard
9.REST Implementation considerations
• REST 아키텍쳐로 접근
– 프로젝트에서 개발자들이 RPC 형태에 익숙해져 있음
– Operation이나Method와 같은 행위 중심으로 설계에서 Resource 중심의 설
계
• DB 설계 고려
– Resource 가 DB로 어떻게 Mapping 될것인가에 대한 사전 고려 필요
– Primary Key와 Resource ID (URI)간의 연관 관계 고려
– Alternative Key (AK) 고려
– NoSQL (Document DB)등 고려
• 캐쉬는 양날의 검
– 웹의 특징을 잘 살리고 성능을 극대화 시킴
– Last Modified 시간을 유지해야 함
• 전문 설계
– REST는 표준이 없기 때문에, 내부 표준 전문 구현이 중요
– 헤더에 어떤 데이타를 넣을것인지
– HTTP Response Code를 어떻게 사용할것인지 정의 필요
10. 현대의 REST 구현
• XML 보다는 JSON (당연히)
• HATEOS (HTTP Link) : http://projects.spring.io/spring-hateoas/
• APIDocs & SandBox – Swagger
• REST Test  SOAPUI
SOAP UI Swagger
참고할만한 자료
• Stormpath.com API 디자인
• APIgee.com  API 디자인 가이드 문서

Más contenido relacionado

La actualidad más candente

REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdfssuserf8b8bd1
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐Terry Cho
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항Ji-Woong Choi
 
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬) Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬) Amazon Web Services Korea
 
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016Amazon Web Services Korea
 
프로젝트에서 Sw아키텍트의 역할 20140717
프로젝트에서 Sw아키텍트의 역할 20140717프로젝트에서 Sw아키텍트의 역할 20140717
프로젝트에서 Sw아키텍트의 역할 20140717Young On Kim
 
Scalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessScalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessDerek Collison
 
소프트웨어 아키텍처
소프트웨어 아키텍처소프트웨어 아키텍처
소프트웨어 아키텍처영기 김
 
Cloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeCloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeSANG WON PARK
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기YongSung Yoon
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020Ji-Woong Choi
 
Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA EDB
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용I Goo Lee
 
AWS Aurora 운영사례 (by 배은미)
AWS Aurora 운영사례 (by 배은미)AWS Aurora 운영사례 (by 배은미)
AWS Aurora 운영사례 (by 배은미)I Goo Lee.
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon Web Services Korea
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드Opennaru, inc.
 

La actualidad más candente (20)

REST API 설계
REST API 설계REST API 설계
REST API 설계
 
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
(발표자료) CentOS EOL에 따른 대응 OS 검토 및 적용 방안.pdf
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
[오픈소스컨설팅]클라우드기반U2L마이그레이션 전략 및 고려사항
 
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬) Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
Amazon Elastcsearch Service 소개 및 활용 방법 (윤석찬)
 
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS와 부하테스트의 절묘한 만남 :: 김무현 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
프로젝트에서 Sw아키텍트의 역할 20140717
프로젝트에서 Sw아키텍트의 역할 20140717프로젝트에서 Sw아키텍트의 역할 20140717
프로젝트에서 Sw아키텍트의 역할 20140717
 
Scalable and Available, Patterns for Success
Scalable and Available, Patterns for SuccessScalable and Available, Patterns for Success
Scalable and Available, Patterns for Success
 
소프트웨어 아키텍처
소프트웨어 아키텍처소프트웨어 아키텍처
소프트웨어 아키텍처
 
Cloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflakeCloud DW technology trends and considerations for enterprises to apply snowflake
Cloud DW technology trends and considerations for enterprises to apply snowflake
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 
AWS Aurora 운영사례 (by 배은미)
AWS Aurora 운영사례 (by 배은미)AWS Aurora 운영사례 (by 배은미)
AWS Aurora 운영사례 (by 배은미)
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드
 

Destacado

Global platform
Global platformGlobal platform
Global platformTerry Cho
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA Terry Cho
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)Amazon Web Services Korea
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해Terry Cho
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기Jaewoo Ahn
 

Destacado (6)

Global platform
Global platformGlobal platform
Global platform
 
RESTful API Design, Second Edition
RESTful API Design, Second EditionRESTful API Design, Second Edition
RESTful API Design, Second Edition
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 

Similar a 대용량 분산 아키텍쳐 설계 #5. rest

REST Ovewview
REST OvewviewREST Ovewview
REST OvewviewTerry Cho
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처dgmit2009
 
Atom publishing protocol
Atom publishing protocolAtom publishing protocol
Atom publishing protocolrooya85
 
Http 완벽가이드(3장 http 메시지)
Http 완벽가이드(3장 http 메시지)Http 완벽가이드(3장 http 메시지)
Http 완벽가이드(3장 http 메시지)Choonghyun Yang
 
WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술Changhwan Yi
 
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)진태 이
 
Restful web service
Restful web serviceRestful web service
Restful web servicesunguen lee
 
서버성능개선 류우림
서버성능개선 류우림서버성능개선 류우림
서버성능개선 류우림우림 류
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)DK Lee
 
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요dgmit2009
 
REST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdfREST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdfHo Jeong Im
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10hungrok
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우NAVER D2
 
Atom publishing protocol 2003
Atom publishing protocol 2003Atom publishing protocol 2003
Atom publishing protocol 2003rooya85
 
Http 헤더
Http 헤더Http 헤더
Http 헤더kidoki
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10Chanjin Park
 

Similar a 대용량 분산 아키텍쳐 설계 #5. rest (20)

REST Ovewview
REST OvewviewREST Ovewview
REST Ovewview
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
 
Atom publishing protocol
Atom publishing protocolAtom publishing protocol
Atom publishing protocol
 
REST Concept
REST ConceptREST Concept
REST Concept
 
Http 완벽가이드(3장 http 메시지)
Http 완벽가이드(3장 http 메시지)Http 완벽가이드(3장 http 메시지)
Http 완벽가이드(3장 http 메시지)
 
WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술WoO 2012-Web 서비스 기술
WoO 2012-Web 서비스 기술
 
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
 
Restful web service
Restful web serviceRestful web service
Restful web service
 
서버성능개선 류우림
서버성능개선 류우림서버성능개선 류우림
서버성능개선 류우림
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
 
REST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdfREST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdf
 
Servlet3
Servlet3Servlet3
Servlet3
 
Web server page_ed10
Web server page_ed10Web server page_ed10
Web server page_ed10
 
Restful API guide
Restful API guideRestful API guide
Restful API guide
 
Web server
Web serverWeb server
Web server
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우
 
Atom publishing protocol 2003
Atom publishing protocol 2003Atom publishing protocol 2003
Atom publishing protocol 2003
 
Http 헤더
Http 헤더Http 헤더
Http 헤더
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10
 

Más de Terry Cho

Kubernetes #6 advanced scheduling
Kubernetes #6   advanced schedulingKubernetes #6   advanced scheduling
Kubernetes #6 advanced schedulingTerry Cho
 
Kubernetes #4 volume &amp; stateful set
Kubernetes #4   volume &amp; stateful setKubernetes #4   volume &amp; stateful set
Kubernetes #4 volume &amp; stateful setTerry Cho
 
Kubernetes #3 security
Kubernetes #3   securityKubernetes #3   security
Kubernetes #3 securityTerry Cho
 
Kubernetes #2 monitoring
Kubernetes #2   monitoring Kubernetes #2   monitoring
Kubernetes #2 monitoring Terry Cho
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 introTerry Cho
 
머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기Terry Cho
 
5. 솔루션 카달로그
5. 솔루션 카달로그5. 솔루션 카달로그
5. 솔루션 카달로그Terry Cho
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)Terry Cho
 
모바일 개발 트랜드
모바일 개발 트랜드모바일 개발 트랜드
모바일 개발 트랜드Terry Cho
 
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개Terry Cho
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작Terry Cho
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개Terry Cho
 
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화Terry Cho
 
Redis data modeling examples
Redis data modeling examplesRedis data modeling examples
Redis data modeling examplesTerry Cho
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.xTerry Cho
 
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용Terry Cho
 
자바 성능 강의
자바 성능 강의자바 성능 강의
자바 성능 강의Terry Cho
 
Service operation
Service operationService operation
Service operationTerry Cho
 

Más de Terry Cho (20)

Kubernetes #6 advanced scheduling
Kubernetes #6   advanced schedulingKubernetes #6   advanced scheduling
Kubernetes #6 advanced scheduling
 
Kubernetes #4 volume &amp; stateful set
Kubernetes #4   volume &amp; stateful setKubernetes #4   volume &amp; stateful set
Kubernetes #4 volume &amp; stateful set
 
Kubernetes #3 security
Kubernetes #3   securityKubernetes #3   security
Kubernetes #3 security
 
Kubernetes #2 monitoring
Kubernetes #2   monitoring Kubernetes #2   monitoring
Kubernetes #2 monitoring
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 intro
 
머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기
 
5. 솔루션 카달로그
5. 솔루션 카달로그5. 솔루션 카달로그
5. 솔루션 카달로그
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)
 
모바일 개발 트랜드
모바일 개발 트랜드모바일 개발 트랜드
모바일 개발 트랜드
 
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개
 
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
 
Redis data modeling examples
Redis data modeling examplesRedis data modeling examples
Redis data modeling examples
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
 
자바 성능 강의
자바 성능 강의자바 성능 강의
자바 성능 강의
 
Service operation
Service operationService operation
Service operation
 

대용량 분산 아키텍쳐 설계 #5. rest

  • 2. ICE Break Roy Fielding REST Open API Service Companies WebService
  • 3. 목차 1. Beginning of REST 2. Basic of REST 3. Basic REST example 4. Advanced REST example 5. Advanced REST 6. REST Implementation 7. Reference Architecture of REST 8. REST Stub generator 9. REST implementation considerations
  • 4. 1. Beginning of REST • 웹(HTTP)의 공동 창시자 Roy Fielding의 2000년 박사 논문에 소개 됨. • 기존의 웹이 HTTP의 장점을 100% 활용하지 못하고 있음 • 네트워크 아키텍쳐 (Not a protocol) • De facto Standard • 오픈 진영(Google ,Amazon) 에 의해서 주도됨
  • 5. 2. Basic of REST • REST의 구성 구성 요소 내용 표현 방법 Noun 자원을 정의 HTTP URI Verb 자원에 대한 행위를 정의 HTTP Method Representations 자원에 대한 행위의 내용을 정의 HTTP Message Pay Load
  • 6. 2. Basic of REST • Examples  자바스터디 시스템에 이름이 “bcho”이 사용자를 생성  자바스터디 시스템에서 이름이 “bcho”이 사용자 정보를 조회  자바스터디 시스템에서 이름이 “bcho”인 사용자 정보를 변경  자바스터디 시스템에서 이름이 “bcho”인 사용자 정보를 삭제 URI : http://www.javastudy.co.kr/users/bcho Method : GET URI : http://www.javastudy.co.kr/users/bcho Method : POST <user> <name>조대협</name> <email>bcho@bea.com</email> </user> URI : http://www.javastudy.co.kr/users/bcho Method : PUT <user> <name>조대협</name> <email>bcho@bea.com</email> </user> URI : http://www.javastudy.co.kr/users/bcho Method : DELETE Noun Verb Representation
  • 7. 2. Basic of REST • Noun  Noun은 Resource를 정의하며 각각 Unique한 URI를 갖는다.  Select(GET)에 한하여 Query String을 이용하여 URI를 정의할 수 있다.  Resource의 URI는 Human Readable한 포맷을 사용한다.  Unique한 URI 사용으로 인해서 GET에 대해서 웹캐쉬 사용가능  비약적 인 성능 향상 http://example.org/products?category=food http://example.org/products/1234 http://example.org/user/scott http://example.org/account/XA123-345 권장 http://example.org/orders/2007/11 권장하지 않는 사용법 http://example.org/ITGKA/XATTY
  • 8. 2. Basic of REST • Verb  HTTP Method를 이용하여 Resource에 대한 행위 (CRUD)를 나타냄  오래된 네트워크 장비나 서버의 경우 GET/POST만 허용  HTTP 헤더 사용 x-http-method  POST,GET,PUT,DELETE 만으로 표현하기 어려운 행위가 있음  행위를 재 정의 : 이메일을 보낸다  이메일을 생성한다.  제어의 의미나 기타 행위에 대해서는 내부적인 표준 마련  PUT : CONTROL Http Method Description POST Create GET Select PUT Create or Update DELETE Delete OPTION Get available Method
  • 9. 2. Basic of REST • Representation – GET으로 오는 리소스의 데이타를 표현 – UPDATE나 CREATE시에 전송되는 리소스의 데이타를 표현 – 포맷 • XML 또는 JSON을 주로 사용 (표준은 없음) • 하나의 리소스에 대해서 여러가지 포맷을 동시 사용이 가능 • HTTP Content-Type /Accept 헤더로 정의 가능 – 구조 • 데이타의 컬럼 구조 (Scheme)를 정의 • REST에서는 구조를 정의하는 명시적인 방법이 없음 (CF. WebService/WSDL)
  • 10. 3. Basic REST example • REST를 이용하여 계좌이체를 수행하는 애플케이션 • 시나리오  STEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.  STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다.  STEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다.  STEP 4. 이체된 결과를 확인한다.
  • 11. 3. Basic REST example • STEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.  로그인 했다 고 가정 • STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다 REQUEST URI http://bank.org/accounts?findby=7t676323a METHOD GET RESPONSE HTTP Code 200 OK Pay Load Content-Type: application/xml;charset=UTF-8 <accounts xmlns="urn:org:bank:accounts"> <account> <id>AZA12093</id> <customer-id>7t676323a</customer-id> <balance currency="USD">993.95</balance> </account> <account> <id>ADK31242</id> <customer-id>7t676323a</customer-id> <balance currency="USD">534.62</balance> </account> </accounts> 사용자 ID 두개의 계좌 정보 가 리턴됨
  • 12. 3. Basic REST example • STEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다. REQUEST URI http://bank.org/transfer Method POST PayLoad Content-Type: application/xml;charset=UTF-8 <transfer xmlns="urn:org:bank:accounts"> <from>account:AZA12093</from> <to>account:ADK31242</to> <amount currency="USD">100</amount> <note>RESTing</note> </transfer> RESPONSE HTTP Code 201 Created Pay Load Content-Type: application/xml;charset=UTF-8 <transfer xmlns="urn:org:bank:accounts"> <from>account:AZA12093</from> <to>account:ADK31242</to> <id>transfer:XTA8763</id> <amount currency="USD">100</amount> <note>RESTing</note> </transfer> 계좌 이체 Transaction Id 계좌 이체 Transaction 이 생성됨
  • 13. 3. Basic REST example • STEP 4. 하루가 지난후 계좌이체 결과를 조회 REQUEST URI http://bank.org/check/XTA8763 Method GET RESPONSE HTTP Code 200 OK Pay Load Content-Type: application/xml;charset=UTF-8 <status xmlns="urn:org:bank:accounts"> <code>01</code> <message xml:lang="en">Pending</message> </status> 계좌 이체 진행중
  • 14. 4. Advanced REST example • 앞의 예제에서 누락된 HTTP의 특성 – LINK의 누락 • Link는 리소스간의 관계를 정의할 수 있다. • Link를 통해서 리소스간의 BPM과 같은 Work-flow를 정의할 수 있다. – Content-Type의 누락 • Input/Output Message Type을 정의할 수 있다. 이것이 과연 REST? 가장 기초중의 기초, 그럼 진짜 REST는?
  • 15. 4. Advanced REST example • STEP 1. 사용자가 인터넷 뱅킹 시스템에 로그인을 한다.  로그인 했다 고 가정 • STEP 2. 사용자 ID로 해당 사용자가 가지고 있는 계좌 목록을 조회한다 REQUEST URI http://bank.org/accounts?findby=7t676323a METHOD GET RESPONSE HTTP Code 200 OK Pay Load Content-Type: application/vnd.bank.org.account+xml;charset=UTF-8 <accounts xmlns="urn:org:bank:accounts"> <account> <id>AZA12093</id> <link href="http://bank.org/account/AZA12093" rel="self"/> <link rel="http://bank.org/rel/transfer edit" type="application/vnd.bank.org.transfer+xml" href="http://bank.org/transfers"/> <link rel="http://bank.org/rel/customer" type="application/vnd.bank.org.customer+xml" href="http://bank.org/customer/7t676323a"/> <balance currency="USD">993.95</balance> </account> <account> <id>ADK31242</id> 중략 </account> </accounts> Content-Type으로 메세지의 형태를 정의 다음 상태로의 LINK를 제공하여 상태 흐름을 정의 Self descriptive message 구현
  • 16. 4. Advanced REST example • STEP 3. AZA12093계좌에서 ADK31242계좌로 $100를 계좌 이체한다. REQUEST URI http://bank.org/transfer Method POST PayLoad Content-Type: application/vnd.bank.org.transfer+xml;charset=UTF-8 <transfer xmlns="urn:org:bank:accounts"> <from>account:AZA12093</from> <to>account:ADK31242</to> <amount currency="USD">100</amount> <note>RESTing</note> </transfer> RESPONSE HTTP Code 201 Created Pay Load Content-Type: application/vnd.bank.org.transfer+xml;charset=UTF-8 <transfer xmlns="urn:org:bank:accounts"> <link rel="self“ href="http://bank.org/transfer/XTA8763"/> <link rel="http://bank.org/rel/transfer/from" type="application/vnd.bank.org.account+xml" href="http://bank.org/account/AZA12093"/> <link rel="http://bank.org/rel/transfer/status" type="application/vnd.bank.org.status+xml" href="http://bank.org/check/XTA8763"/> <id>transfer:XTA8763</id> <amount currency="USD">100</amount> <note>RESTing</note> </transfer>
  • 17. 4. Advanced REST example • STEP 4. 하루가 지난후 계좌이체 결과를 조회 REQUEST URI http://bank.org/check/XTA8763 Method GET RESPONSE HTTP Code 200 OK Pay Load Content-Type: application/vnd.bank.org.transfer+xml;charset=UTF-8 l;charset=UTF-8 <status xmlns="urn:org:bank:accounts"> <code>01</code> <message xml:lang="en">Pending</message> </status> 계좌 이체 진행중
  • 18. 5. Advanced REST • Advanced REST 기능  Link를 이용한 Resource간의 관계 정의  Content-Type을 이용한 Resource의 메시지 형태 정의  Conditional GET을 이용한 성능 향상  ETAG/Last Modified를 이용한 동시 Update 방지  Stateless
  • 19. 5. Advanced REST • Link – Resource간의 관계를 정의 – LINK를 따라가면서 API의 사용법을 알 수 있음 (Self-Descriptive) – Releation,URI,Content-Type으로 구성됨 • Relation : Resource간의 관계를 정의 (사람이 이해하기 쉬운 형태라야함) • URI : 연관된 Resource에 대한 URI • Content-Type: 해당 Resource에 대한 데이터 포맷과 구조 – 표준안은 없고 논문에 따라 상당히 많은 표현 방법을 권장함 <link rel=“Relation” href=“http://URI” type=“Resource의 포맷과 구조” /> <link rel=“order” hfer=“http://example.org/order” type=“application/example.org.order+xml” /> <관계 href=“http://URI” /> <order href=“http://example.org/order” /> 예제 1) 예제 2) • 단순하고 이해하기 쉬움 • 관계가 XML Element로 표현되기 때문에 XML 스키마의 복잡도가 증가함 • In/out message 에 대한 타입이 정의되지 않음 (HEAD 등을 이용하여 Query하는 디자인이 필요) • 정형화된 형태로 실제 구현에 유리함 • 가독성이 떨어짐 • In/out message에 대한 타입 정의가 모호함 (Resource에 대한 데이터 타입은 원칙적으로 하나이지 만 예외에 대한 대응 능력이 떨어짐)
  • 20. 5. Advanced REST • Content-Type  Resource Data에 대한 포맷(XML,ATOM,JSON) 과 구조(컬럼구조)를 정의 함  하나의 Resource에 대해서 여러 데이터 포맷지원이 가능한 (Multiple representation)  HTTP Content-Type 헤더를 이용함  포맷 정의 • Content-Type:application/xml 형식으로 일반적으로 Content-Type에 명기 • 서버에 따라서 Content-Type 헤더를 인식 못하는 경우가 있음 – 이경우 X- 헤더를 사용하거나 – URI에 데이터 포맷을 명기할 수 있음 /product/321.xml , /product/321.json  구조 정의 • Content-Type:application/org.example.order+xml 과 같이 Content-Type에 명기하는 방안 • Content-Type:application/xml + <order xmlns=“http://example.org/order.xsd” /> 와 같이 Content-Type + XML Name Space를 사용 • 일반적인 형태에서는 구조를 정의 안하고 문서를 통해서 정의하여 배포하는 경우 가 많음
  • 21. 5. Advanced REST • Conditional GET – Web Proxy를 이용하여, 캐슁된 내용이 변경이 되지 않았으면 캐쉬 내용을 재활용하는 기술 – 서버 성능과 자원사용의 효율성이 비약적으로 높아짐 – Resource에 대한 URI가 유일하기 때문에 가능함 – Last-Modified 헤더나 ETAG 헤더를 이용하여 구현 가능 ※ Resource마다 Last-Modified 값을 관리해야 함 • Conditional GET with Last-Modified Header Client REST GET /partners/UK 200 OK Last-Modified: Sun, 21 Jan 2007 09:35:19 GMT [response] GET /partners/UK If-Modified-Since: Sun, 21 Jan 2007 09:35:19 GMT 304 Not Modified Some time later No content
  • 22. 5. Advanced REST • Conditional GET with ETag Client REST GET /partners/UK 200 OK ETag:”some UID” [response] GET /partners/UK If-None-Match:”some UID” 304 Not Modified Some time later No content
  • 23. 5. Advanced REST • ETAG/Last Modified를 이용한 동시 Update 방지 – Etag나 Last-Modified 헤더 이용 – 동시에 두 사용자가 하나의 Resource에 업데이트를 하여 데이터가 달라지는 문제를 방지 Client1 REST GET /party/42 200 OK ETag:”some UID” [response] POST /party/42 ETag:”some UID” 412 Precondition not satisfied Client2 POST /party/42 ETag:”some UID” GET /party/42 200 OK ETag:”some UID” [response] Update가 끝난후 Etag가 변경됨 예전 Etag값으로 Update를 요청했기 때문에 412 에러를 내보냄
  • 24. 5. Advanced REST • REST 보안 – Authentication : APIKey(Public/Private Key를 이용한 Handshake), OAuth2 etc – Transport Layer : SSL (안전하지 않음) – Message Level encryption 고려 – HMAC을 이용한 무결성 보장 • 메세지 전문에서 Private Key를 가지고, HMAC 생성. (MD5,SHA1-256등 사용) • 메세지 위변조 방지 – TimeStamp를 이용한 ReplayAttack 방지 HMAC (Key, (메세지 데이타+timestamp) )
  • 25. 6. REST implementation • Jersey – JSR-311 JAX-RS Reference Implementation (https://jersey.dev.java.ne t/) – 장점 • 구현이 매우 쉬움 (Annotation 사용) • Multiple contents representation (XML,JSON) 지원 – 단점 • Advanced REST의 모든 특징을 수용하기에는 부족함 – 특징 • WAR 형태로 배포됨 • JAXB를 이용한 XML2JAVA Binding 사용 (VO를 그대로 사용할 수 있음) • Node.JS – 자바스크립트 기반의 서버 엔진 – Node.JS + Express(MVC) + MongoDB = 5~6줄로 REST API 개발
  • 26. 6. REST implementation URI HTTP Method Content-Type Content-Type: Input Message Type Content-Type : Output Message Type Read Parameter from Query String http://example.org/resource?search=XX URI Read Parameter from URI http://example.org/resource/{container}
  • 27. 7. Reference Architecture of REST • 전통적인 REST 구현체의 문제점  공통 기능의 중복 개발  단일 프로토콜만 지원  변화 (로직,전문 변화)시 재구현이 필요함  낮은 유연성 • 해결 방안  REST를 위한 Infrastructure의 구축
  • 28. 7. Reference Architecture of REST • REST with ESB Architecture Protocol Conversion REST /XML WS XML RPC Handling Cross cutting concern Mediation Logic SLA mgmt & Monitoring REST /JSON Business Logic REST Business Logic REST PLUG IN PLUG IN REST Components Enterprise Service Bus  Protocol Conversion  REST/XML, REST JSON등 다양항 프로 토콜지원  URI 변환, 헤더 처리  Cross Cutting Concern  Logging,Billing,Security등의 공통 기능 처리  Mediation Logic  Mash up, Function Adding 등의 REST 서비스 기능 변경  SLA Management & Monitoring  Throttling, Alert, Status 모니터링 기능 제공
  • 29. 7. Reference Architecture of REST Enterprise Service Bus Access Layer External Edge Proxy Common Proxy Internal Edge Proxy REST Component Party Resource REST Component Order Resource Local Proxy Business Resource Local Proxy Business Resource Local Proxy Business Resource REST Component Content Resource WebServer Consumer Security Provider Web Server • REST with ESB Architecture
  • 30. 7. Reference Architecture of REST • ESB Architecture for REST Edge Proxy Common Proxy Local Proxy Business Resource Generic Proxy Monitoring Auditing CCC-Logging Alert Throttling SLA Ignore Reporting CCC-Exception Handling Auto retry Human Error handling OAM Security Framework Resource Application Components Orchestration Logic Transformation Compensation Mediation 컴포넌트 기능 Proxy : Resource Edge Proxy 프로토콜 변 환 1:N Common Proxy 공통 기능 수행 (Logging,빌 링,보안) 1:N Local Proxy Mediation Logic 수행 1:1 Business Resource SLA 및 모 니터링 1:1
  • 31. 7. Reference Architecture of REST • Mash up in ESB Enterprise Service Bus REST REST REST Expose Layer Business Service Business Service Business Service Open API Open API Open API Access Layer Common Proxy Edge Proxy Local Proxy Service Local Proxy Service Local Proxy Service Mashup Local Proxy
  • 32. 8. REST Stub generator • REST의 또다른 문제점 – 클라이언트 STUB이 없음 (WS는 자동 STUB이 있음) – REST 서비스에 대한 메뉴얼을 만들어서 웹에 배포해야함 • 해결안 – REST 소스코드를 자동 분석하여 CLIENT STUB과 메뉴얼을 자동생성 ※ 요즘은 JSON Doc을 만들어서 호출 JAX-RS Source Code Parser (Qdox) XML (Meta Info) Client Stub Code REST API Manual (HTML) XSLT (Style Sheet) Velocity (Code Template) Generator Tool Kit
  • 33. 8. REST Stub generator • REST Stub generator implementation sample JAX-RS Source Code Client Stub Code REST API Manual (HTML)
  • 34. 8. REST Stub generator • Mapping Rule Output Parameter Resource name Endpoint URI Description Method Summary ||Method||EndpointURI||Http Method||Summary|| Endpoint URI Http method Response type Description Overview Path parameter || name || type || description || Query parameter || name || type || required || description || Message payload ||element name || type || multiplicity|| description|| XML Scheme Input Parameter Header || headerparam || type || required || description || Header || headerparam || type || required || description || Message payload ||element name || type || multiplicity|| description|| XML Scheme Http response code || Http response code || description || Method Input Http-method : Endpoint-uri : Http header & values Message Payload Output Http-response code Http header & values Message Payload Sample JAX-RS source code Meta Information public void method(@HttpHeader (“x-REST-requestid”)String requestid From JAXB code From JAXB code 1..N1..1 We will use header with “HeaderConfigVo” will not support @HttpHeader annotation in this phase Use Common Standard Use Common Standard
  • 35. 9.REST Implementation considerations • REST 아키텍쳐로 접근 – 프로젝트에서 개발자들이 RPC 형태에 익숙해져 있음 – Operation이나Method와 같은 행위 중심으로 설계에서 Resource 중심의 설 계 • DB 설계 고려 – Resource 가 DB로 어떻게 Mapping 될것인가에 대한 사전 고려 필요 – Primary Key와 Resource ID (URI)간의 연관 관계 고려 – Alternative Key (AK) 고려 – NoSQL (Document DB)등 고려 • 캐쉬는 양날의 검 – 웹의 특징을 잘 살리고 성능을 극대화 시킴 – Last Modified 시간을 유지해야 함 • 전문 설계 – REST는 표준이 없기 때문에, 내부 표준 전문 구현이 중요 – 헤더에 어떤 데이타를 넣을것인지 – HTTP Response Code를 어떻게 사용할것인지 정의 필요
  • 36. 10. 현대의 REST 구현 • XML 보다는 JSON (당연히) • HATEOS (HTTP Link) : http://projects.spring.io/spring-hateoas/ • APIDocs & SandBox – Swagger • REST Test  SOAPUI SOAP UI Swagger
  • 37. 참고할만한 자료 • Stormpath.com API 디자인 • APIgee.com  API 디자인 가이드 문서