Erlang을 들여다 본지가 그리 오래되진 않았지만, 짧은 기간동안 Erlang에 대해 소감?은 이렇다.
장점 : a. 프로세스 생성이 매우 간단하다.
b. 통신 프로그램 생성이 매우 간단하다.
c. 변수가 없기 때문에 프로세스간 충돌 및 메모리 덤프와 같은 치명적인 오류가 발생하지 않는다.
d. 코딩량이 적다.
단점 : a. 변수가 존재하지 않아(공식적으로는 있지만, 사실상 상수이다.) 기존의 랭귀지 개념과 많은 차이가 있다.
b. 간단히 처리할 수 있는 문제도 rpc(remote processor call) 프로시져를 생성해야 하는 경우가 있다.
c. String 처리에 취약하다.
d. 버전별 호환성이 약하다.
e. 참조할 수 있는 자료가 부족하다
참조 싸이트 :
https://github.com/
http://wiki.trapexit.org/
http://www.erlang.org/
하여튼, Erlang 연구 기간내내 괴롭혔던 List 변수에 대해 어느 정도 성과가 있었다.
샘플로 만들어본 Chatting Server에선 한 Client에서 보낸 메세지를 연결된 다른 Client들 모두에게 전송해야 하고, 그러기 위해서는 연결된 Client들의 Accept socket을 리스트로 저정해야 한다.
그런데 이 리스트형 변수가 말썽이다, 사실상의 변수가 존재하지 않기 때문에 기존 랭귀지적 개념으로 도저히 해결할 수 없는 문제에 부딪히게 된다.
그래서 결국은 이 변수의 역할을 담당할 별도의 RPC 프로세서를 만들어야 한다.
전체적인 시스템 구성은 아래와 같다.
변수처리 RPC 프로세스 라고 명명한 저 부분이 다른 랭귀지에서는 변수로 처리할 수 있는 모듈이다.
즉, Erlang은 변수 처리를 위해 변수의 역할을 담당할 하나의 프로세스가 필요하다.
( 병렬처리를 위해 병렬처리에서 문제가 되는 부분인 공유메모리 부분을 없애버렸더니, 이런 복잡한 과정이 필요하게 된 것 같다. )
Window 채팅 클라이언트는 C++(win32)로 심플하게 제작했다.
그리고 Telnet으로도 접속하여 테스트 할 수 있다.
Erlang Chat Server가 실제 채팅서버이고, Erlang 변수처리 RPC 프로세스가 리스트형 변수의 역할을 하는 모듈이다.
일단 이 리스트형 변수 RPC프로세스 소스를 보자,
좌하단 - Erlang 채팅서버
상단 - win32로 만들어진 채팅 Application
우하단 - 윈도우 터미널 창에서 Telnet 으로 접근한 채팅
위와 같은 채팅 프로그램은 기본중에 기본인 프로그램이지만, Erlang에서는 기본이 아니더라...
중요한것은 좌하단 채팅서버의 로그에서 보듯이 연결된 Client 소켓을 리스트로 관리할 수 있다는 것이다.
여러가지 시행착오를 거쳤지만, 그중에서도 리스트 관리를 위해 C 로 개발한 외부 I/F를 끌어온것도 있다.
( 이 부분은 나중에 별도로 Post 함. )
채팅서버 자체는 Echo 루틴이나 별 다른게 없기 때문에 이 부분도 생략함.
P.S : Erlang과 관련된 자료가 매우 희귀하기에 이 자료는 Erlang 개발자에게 많은 도움이 되지 않을까 싶다..
'Erlang' 카테고리의 다른 글
Erlang Web Server V0.1 (0) | 2012.04.12 |
---|---|
Erlang List 변수 처리-로직 변경 (0) | 2012.04.09 |
Erlang 리스트에서 검색값 가져오기 (0) | 2012.04.04 |
Erlang Parsing (0) | 2012.04.04 |
[Erlang] Server/Client (0) | 2012.02.06 |