1. 분산 어플리케이션 서버를 효율적으로 구축하기 위한 방안

1) RPC(Remote Procedure Call) : 한 컴퓨터가 프로그램을 실행하기 위해 거리에 상관없이 특정 컴퓨터에 서브프로그램을 불러내는 기술을 말한다. 객체지향 개념적으로 보면 멀리 떨어진 컴퓨터에 특정 객체를 불러오는 행위를 말한다.






그림 1) RPC 개념(http://www.cs.fsu.edu/~xyuan/cop5611/lecture2.html)


 컴파일된 클라이언트 측에서 사용하는 코드를 이를 stub이라 부르고, 컴파일된 서버 측에서 사용하는 코드를 skeleton이라 부른다. 그리고 스텁이 서버에 접근하기 위해 인터페이스를 사용한다.

 - 단점 : 인터페이스 변경 시 매번 IDL을 컴파일해야 함.


2) IDL(Interface Definition Language) :  서로 다른언어로 구현된 프로그램 or 객체가 통신을 하기 위해서 통신을 할 수 있도록 지원하는 언어이다. 이 책에서는 Thrift, Avro를 다뤘다.


개념정리 : http://www.cyworld.com/uchi000/3175980


3) 데이터 타입 : 원격 메소드를 호출 시 주고 받는 데이터(파라미터, 반환값 등)가 int, char[]과 같이 대부분의 프로그래밍 언어에서 제공하는 기본 데이터 타입만을 제공하는 방식과 struct, class와 같은 사용자 정의 데이터 타입을 제공하는 방식으로 구분할 수 있다.


4) 플랫폼(언어) 의존성 : RPC 솔루션이 동일 언어만 가능한지 아닌지 고려해야 한다.


5) 결론

- 가장 이상적인 RPC 구현은 IDL이 없고 사용자 정의 데이터 타입을 자유롭게 사용하고, 다양한 프로그래밍 언어를 사용하는 것이다.  하지만 현실적으로 어려워 RPC 지원 솔루션 중 시스템 요구 사항에 적합한 솔루션을 선택하는 것이 중요하다.


2. Thrift

정의 : 다양한 언어를 지원하는 RPC 서버와 이 서버에서 제공하는 서비스를 호출하는 클라이언트 코드를 생성해주는 소프트웨어 프레임워크이다.  Thrift 개발자는 프로그래밍 언어별 소켓 서버에 대한 구현을 알 필요 없으며 RPC기반이기 때문에 함수 호출 형태로 원격 서버에서 제공하는 서비스를 호출할 수 있고, 사용자 정의 데이터 타입을 이용할 수 있다.


그림 2)  IDL개념도

http://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=%2Fcom.ibm.cics.ts31.doc%2Fdfhpj%2Ftopics%2Fdfhpjfe.htm


 개발자가 작성한 IDL 파일을 Thrift에서 제공하는 코드 생성기를 이용해 코드로 생성하면 서버측 개발자와 클라이언트 측 개발자가 모두 사용할 수 있는 코드로 만들어진다. 서버 측 개발자는 생성된 코드를 이용해 Thrift에서 제공하는 서버 측 데몬 프로그램 라이브러리를 이용하여 프로그램을 만들고, 클라이언트 개발자는 생성된 코드와 Thrift에서 제공하는 라이브러리를 이용해 서버 측 프로그램을 호출하는 코드를 작성한다.



3.  thrift 예제 helloServer

- 너무 고생했다. 책에서는 0.5 버전인데 지금은 0.8버전으로 쓰려다보니 THsHaServer에서 생성자가 정의되지 않았다고 난리를 치는 바람에 구글링 한시간만에 다른코드로 대체해서 결국 돌렸다. ㅡㅡ 오랜만에 다시하는거다 보니 생소하다. 하지만 첫번째 예제 끝!


그림 3) helloServer 동작


그림 4) hellClient동작


코드설명 : 서버는 thrift에 변수 나이, 이름을 선언하고 컴파일?하여 몇 천줄의 helloService.java 파일을 만들어 주었다.(이름은 제 마음대로) 이 클래스는 소켓프로그래밍 할 수 있도록 인터페이스를 제공하게 해주었다. 그리고 thrift에서 제공한 라이브러리를 가지고 API사용하여 소켓프로그래밍을 구현했다. Client는 API사용하고 인자 4가지 호스트(루프백), 포트번호, 이름, 나이를 인자로 받아 보내는 역할을 한다.


4. 데이터 직렬화란?

- 파일의 데이터를 읽어올 때나 네트워크를 통해 전송시 스트림 형태로 전송을 하는것을 말함.(일렬로 쭈욱~~~ 나열)

  왜냐하면 외부 프로세스와 통신을 하거나 데이터를 파일로 저장하려면 직렬화를 해야하기 때문이다.


  Thrift는 RPC(Remote Procedure Call) 요청을 안정적으로 처리하면서 이기종 간 RPC호출을 지원하는 개념이고,

  Avro데이터 직렬화를 기본 개념으로 하여 RPC 호출을 이기종 간에 가능하게 하는 개념으로 접근한다.


+ Recent posts