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. 저런 코드가 정상 동작하려면..
아래와 같은 상황이 보장되어야 합니다.
• 네트워크는 언제나 빠르고 장애가 없음.
• 서버는 클라이언트가 요청시 언제든 즉시 응답.
• 클라이언트는 언제든 서버와 바로바로 연결
그러나 현실은..
네트워크, 서버, 클라이언트 모두
느려지고, 각종 문제가 발생할 수 있습니다.
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
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가지-증거