23
erlang swap 서서 서서서 서서서

Erlang을 이용한 swap 서버

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Erlang을 이용한 swap 서버

erlang swap 서버 만들기윤재진

Page 2: Erlang을 이용한 swap 서버

오늘 다루는 주제

erlang 소개

기본문법

기본 Fun 생성 방법

간단한 분산 콜 방법

간단한 동시성 처리 방법

Page 3: Erlang을 이용한 swap 서버

다루지 않는 것들

application 으로 만드는 방법

OTP

죽지않는 서버 suporvisor 서버 만들기

Page 4: Erlang을 이용한 swap 서버

erlang 이란 ?

erlang 의 발음은 얼랭

erlang 을 만든 사람은 Joe Amstrong

Ericsson 사에서 스위칭 소프트웨어에서 사용하기 위해 개발

80 년대에는 전화국 스위칭 시스템에 무정지 작동 시스템으로 돌아감

1998 년 오픈소스 전환됨

OTP(Open Telecom Platform) 이란 기본적인 통신관련 견고한 프레임워크 제공함

Page 5: Erlang을 이용한 swap 서버

erlang 의 특징

Pure Functional Program Language

모든 값들은 상수이다 .

= 이란 부등식이다 .

분산환경을 기반으로 언어가 설계되어 있다 .

ETS

erlang 에서 기본적으로 제공하는 key-value 테이블 제공

DETS

erlang 에서 ETS 을 분산적으로 처리하는 것

Page 6: Erlang을 이용한 swap 서버

erlang 에 사용된 대표적인 오픈소스

Riak

RabbitMQ

MochiWeb

CouchDB

Page 7: Erlang을 이용한 swap 서버

erlang type

atom

소문자로 된 문자열

enum 과 비슷하지만 숫서나 이런게 없이 그냥 문자열 그 자체

a, true, hello...

변수 ( 상수 )

대문자로 시작하는 문자열

A = 1, This = 3, L = [1,2,3], Tuple={1,2,3}, Str =”String”

튜플

c 의 구조체와 비슷하지만 익명이 다른

P = {10,45}.

Person = {person, {name, joe}, {height, 1.82}}.

List

일반적인 fp 랭귀지의 리스트와 통일함 .

java 에서 사용한 리스트랑은 다름 .

L = [1,2,3]

ㅇㅇ

Page 8: Erlang을 이용한 swap 서버

erlanng type

문자열 (String)

java 에서 사용한 문자열과 통일하게 사용함

다른점은 문자열도 list 임

[97,98,99] = “abc”

Page 9: Erlang을 이용한 swap 서버

패턴매칭얼랭은 모든 변수가 상수이기 때문에 패턴매칭이 매우 중요함 .

= 이란 대입이 아닌 부등식에서 출발함 .

[A,B,C] = “abc”.

A == 97.

Person = {person , {name, jaejin}}.

{_,{_,Name}} = Person.

Name == jaejin.

[Head|Tail] = [1,2,3,4].

Head == 1, Tail == [2,3,4]

Page 10: Erlang을 이용한 swap 서버

가드가드 예제

f(X,Y) when is_integer(X), X>Y -> X+Y;

f(X,Y) -> X.

True 가드

if

Guard-> Expressions;

Guard-> Expressions;

...

end

Page 11: Erlang을 이용한 swap 서버

case 와 if 식

case 식

case Expression of

Pattern1 [when Guard1] -> Expr_seq1;

..

end

if 식

if

Guard1 -> Expr_seq;

...

end

Page 12: Erlang을 이용한 swap 서버

예외try..catch 로 자바와 비슷함

try Expression of

Pattern1 -> Expression1;

...

catch

ExceptionType : ExPattern1 -> ExPression;

after

AfterExpressions

end

Page 13: Erlang을 이용한 swap 서버

구두점

,

and 표현됨 .

한 함수에서 여러줄을 처리할때는 사용 .

;

함수를 여러절로 나눌때 사용

수학에서 표현하는 방식과 동일

.

식이나 함수 등이 끝나는걸 표시

Page 14: Erlang을 이용한 swap 서버

함수사용자 함수 만드는 방법

fibo(0) -> 1;

fibo(1)->1;

fib(N)->fibo(N) + fibo(N).

arity

그 함수가 가지는 인수의 수

위의 fibo 함수의 arity 는 1

표시 방법은 fibo/1

자바에서 오버로우딩이 여기에서 기본적으로 사용함

sum(L) -> sum(L,0).

sum([],N) -> N;

sum([H|T], N) -> sum(T, H+N).

익명의 함수

Z = fun(X) -> 2*x end.

lists:foldl(fun(X,Sum)->X+Sum end, [1,2,3,4]).

Page 15: Erlang을 이용한 swap 서버

퀵정렬

qsort([]) -> [];

qsort([Pivot|T]) ->

qsort([X || X <- T, X <- Pivot])

++ [Pivot] ++

qsort([X || X <- T, X >= Pivot]).

Page 16: Erlang을 이용한 swap 서버

모듈

파일명이 모듈명

-module( 파일명 ).

모듈 밖에서 함수 호출하게 할려면

-export([ 함수명 /arity,...]).

Page 17: Erlang을 이용한 swap 서버

병행성Pid = spwan(Fun)

Fun 을 평하가흔 병행 프로세스 생성

Pid ! Message

식별자가 Pid 인 프로세스 메시지 보내기

receive ... end

프로세스로 전송된 메시지를 받는다 .

얼랭에선 일반적인 스레드 방식으로 병행성을 처리 하지 않는다 .

얼랭에선 client - server 로 메시지를 주고 받아서 병행성을 처리 한다 .

프로세스 등록 및 전달방법

register(hello, spwan(fun area_server:loop/0)).

hello ! {hello, “hello”}

Page 18: Erlang을 이용한 swap 서버

간단한 분산처리

동일한 호스트에서 하나는 클라이언트 , 다른 하나는 서버 .

swap 예제 README.md 에 예제 있음 .

실행방법

erl -sname 노드이름

동일 LAN 상에서 서로 다른 머신에 있는 클라이언트 서버

erl -name 노드이름 -setcookie 쿠키명

erl -sname 노드이름 @host -setcookie 쿠키명’

host 명은 DNS 가 아닌 동일 LAN 상이라서 /etc/hosts 에 등록해야함

서로다른 서버에서 쿠기명을 동일하게 해야함

Page 19: Erlang을 이용한 swap 서버

swap 서버 예제

https://github.com/jaejin/swap_server_example

Page 20: Erlang을 이용한 swap 서버

앞으로 ...

프론트를 단순한 소켓으로 했지만 mochiweb 과 같은 웹애플리케션으로 하는 방법

프론트를 쓰리트나 mochiweb 연결체로 두고 erlang 에서는 죽지않게 비즈니스만 교체할 수 있도록 하는것 괜찮을꺼 같음

Page 21: Erlang을 이용한 swap 서버

추가적인 정보들

빌드툴

rebar : maven 과 비슷한 프로그램

Editor

Emacs + Erlang.el + flymake

Page 22: Erlang을 이용한 swap 서버

Q & A

Page 23: Erlang을 이용한 swap 서버

참고문헌

프로그래밍 얼랭 , 저 : 조 암스트롱 , Insight