SlideShare uma empresa Scribd logo
1 de 23
erlang swap 서버 만들기
       윤재진
오늘 다루는 주제

erlang 소개

기본문법

기본 Fun 생성 방법

간단한 분산 콜 방법

간단한 동시성 처리 방법
다루지 않는 것들


application 으로 만드는 방법

OTP

죽지않는 서버 suporvisor 서버 만들기
erlang 이란 ?
erlang 의 발음은 얼랭

erlang 을 만든 사람은 Joe Amstrong

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

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

1998 년 오픈소스 전환됨

OTP(Open Telecom Platform) 이란 기본적인 통신관련 견고
한 프레임워크 제공함
erlang 의 특징
Pure Functional Program Language

모든 값들은 상수이다 .

= 이란 부등식이다 .

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

ETS

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

DETS

   erlang 에서 ETS 을 분산적으로 처리하는 것
erlang 에 사용된 대표적
      인 오픈소스

Riak

RabbitMQ

MochiWeb

CouchDB
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]

       ㅇㅇ
erlanng type


문자열 (String)

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

  다른점은 문자열도 list 임

  [97,98,99] = “abc”
패턴매칭
얼랭은 모든 변수가 상수이기 때문에 패턴매칭이 매우 중요함 .

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

  [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]
가드
가드 예제

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

  f(X,Y) -> X.

True 가드

  if

        Guard-> Expressions;

        Guard-> Expressions;

        ...

  end
case 와 if 식
case 식

       case Expression of

             Pattern1 [when Guard1] -> Expr_seq1;

             ..

       end

if 식

       if

             Guard1 -> Expr_seq;

             ...

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

  try Expression of

        Pattern1 -> Expression1;

        ...

  catch

        ExceptionType : ExPattern1 -> ExPression;

  after

        AfterExpressions

  end
구두점
,

    and 표현됨 .

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

;

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

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

.

    식이나 함수 등이 끝나는걸 표시
함수
사용자 함수 만드는 방법

        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]).
퀵정렬

qsort([]) -> [];

qsort([Pivot|T]) ->

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

   ++ [Pivot] ++

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


파일명이 모듈명

-module( 파일명 ).

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

  -export([ 함수명 /arity,...]).
병행성
Pid = spwan(Fun)

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

Pid ! Message

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

receive ... end

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

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

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

프로세스 등록 및 전달방법

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

     hello ! {hello, “hello”}
간단한 분산처리
동일한 호스트에서 하나는 클라이언트 , 다른 하나는 서버 .

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

  실행방법

     erl -sname 노드이름

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

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

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

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

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



https://github.com/jaejin/swap_server_example
앞으로 ...


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

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


빌드툴

  rebar : maven 과 비슷한 프로그램

Editor

  Emacs + Erlang.el + flymake
Q&A
참고문헌



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

Mais conteúdo relacionado

Mais procurados

포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1Hoyoung Jung
 
정규표현식 Regular expression (regex)
정규표현식 Regular expression (regex)정규표현식 Regular expression (regex)
정규표현식 Regular expression (regex)Sunyoung Kim
 
포인터의 기초(1)
포인터의 기초(1)포인터의 기초(1)
포인터의 기초(1)Hoyoung Jung
 
Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기Daegwon Kim
 
정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)Juhee Kim
 
Python datatype
Python datatypePython datatype
Python datatype건희 김
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 
Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기Yong Joon Moon
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기Yong Joon Moon
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summaryHoChul Shin
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기Yong Joon Moon
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 Yong Joon Moon
 
Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Insuk (Chris) Cho
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러우경 성
 
Java mentoring of samsung scsc 0
Java mentoring of samsung scsc   0Java mentoring of samsung scsc   0
Java mentoring of samsung scsc 0도현 김
 
파이썬 함수
파이썬 함수파이썬 함수
파이썬 함수Gibson Kim
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 

Mais procurados (20)

포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1
 
정규표현식 Regular expression (regex)
정규표현식 Regular expression (regex)정규표현식 Regular expression (regex)
정규표현식 Regular expression (regex)
 
포인터의 기초(1)
포인터의 기초(1)포인터의 기초(1)
포인터의 기초(1)
 
Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기
 
정규표현식(Regular expressions)
정규표현식(Regular expressions)정규표현식(Regular expressions)
정규표현식(Regular expressions)
 
Python datatype
Python datatypePython datatype
Python datatype
 
Regex
RegexRegex
Regex
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기
 
Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러
 
Java mentoring of samsung scsc 0
Java mentoring of samsung scsc   0Java mentoring of samsung scsc   0
Java mentoring of samsung scsc 0
 
파이썬 함수
파이썬 함수파이썬 함수
파이썬 함수
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 

Destaque

Scalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed SystemsScalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed Systemshyun soomyung
 
Anomy chat platform
Anomy chat platformAnomy chat platform
Anomy chat platform동철 박
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniqueshyun soomyung
 
Developing web apps using Erlang-Web
Developing web apps using Erlang-WebDeveloping web apps using Erlang-Web
Developing web apps using Erlang-Webfanqstefan
 
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016Amazon Web Services Korea
 
아챗에서 변태 분석 개발기
아챗에서 변태 분석 개발기아챗에서 변태 분석 개발기
아챗에서 변태 분석 개발기동철 박
 
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)강 민우
 
Golang 으로 vision api 적용하기
Golang 으로 vision api 적용하기Golang 으로 vision api 적용하기
Golang 으로 vision api 적용하기동철 박
 
하둡완벽가이드 Ch6. 맵리듀스 작동 방법
하둡완벽가이드 Ch6. 맵리듀스 작동 방법하둡완벽가이드 Ch6. 맵리듀스 작동 방법
하둡완벽가이드 Ch6. 맵리듀스 작동 방법HyeonSeok Choi
 
아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...
아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...
아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...Amazon Web Services Korea
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11흥배 최
 
[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들MinGeun Park
 
개발자를 위한 R로 wordcloud 10분만에 만들기
개발자를 위한 R로 wordcloud 10분만에 만들기개발자를 위한 R로 wordcloud 10분만에 만들기
개발자를 위한 R로 wordcloud 10분만에 만들기동철 박
 
U2 product For Wiseeco
U2 product For WiseecoU2 product For Wiseeco
U2 product For Wiseeco호진 하
 
하둡완벽가이드 Ch9
하둡완벽가이드 Ch9하둡완벽가이드 Ch9
하둡완벽가이드 Ch9HyeonSeok Choi
 
Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정HyeonSeok Choi
 
차니의 IT 이야기 #2- 개발자 경력 관리 조언 (윤석찬)
차니의 IT 이야기 #2- 개발자 경력 관리 조언 (윤석찬)차니의 IT 이야기 #2- 개발자 경력 관리 조언 (윤석찬)
차니의 IT 이야기 #2- 개발자 경력 관리 조언 (윤석찬)Channy Yun
 

Destaque (20)

Scalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed SystemsScalable Web Architecture and Distributed Systems
Scalable Web Architecture and Distributed Systems
 
Anomy chat platform
Anomy chat platformAnomy chat platform
Anomy chat platform
 
Dependency Breaking Techniques
Dependency Breaking TechniquesDependency Breaking Techniques
Dependency Breaking Techniques
 
Developing web apps using Erlang-Web
Developing web apps using Erlang-WebDeveloping web apps using Erlang-Web
Developing web apps using Erlang-Web
 
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016
 
아챗에서 변태 분석 개발기
아챗에서 변태 분석 개발기아챗에서 변태 분석 개발기
아챗에서 변태 분석 개발기
 
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)
[IGC 2016] 아마존 구승모 - 게임 제작을 위한 Amazon의 편리한 도구들 (게임리프트와 럼버야드)
 
Golang 으로 vision api 적용하기
Golang 으로 vision api 적용하기Golang 으로 vision api 적용하기
Golang 으로 vision api 적용하기
 
하둡완벽가이드 Ch6. 맵리듀스 작동 방법
하둡완벽가이드 Ch6. 맵리듀스 작동 방법하둡완벽가이드 Ch6. 맵리듀스 작동 방법
하둡완벽가이드 Ch6. 맵리듀스 작동 방법
 
아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...
아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...
아마존의 관리형 게임 플랫폼 활용하기: GameLift (Deep Dive) :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS ...
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
 
[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들[1116 박민근] c++11에 추가된 새로운 기능들
[1116 박민근] c++11에 추가된 새로운 기능들
 
개발자를 위한 R로 wordcloud 10분만에 만들기
개발자를 위한 R로 wordcloud 10분만에 만들기개발자를 위한 R로 wordcloud 10분만에 만들기
개발자를 위한 R로 wordcloud 10분만에 만들기
 
U2 product For Wiseeco
U2 product For WiseecoU2 product For Wiseeco
U2 product For Wiseeco
 
Hadoop overview
Hadoop overviewHadoop overview
Hadoop overview
 
하둡완벽가이드 Ch9
하둡완벽가이드 Ch9하둡완벽가이드 Ch9
하둡완벽가이드 Ch9
 
Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정
 
Erlang
ErlangErlang
Erlang
 
차니의 IT 이야기 #2- 개발자 경력 관리 조언 (윤석찬)
차니의 IT 이야기 #2- 개발자 경력 관리 조언 (윤석찬)차니의 IT 이야기 #2- 개발자 경력 관리 조언 (윤석찬)
차니의 IT 이야기 #2- 개발자 경력 관리 조언 (윤석찬)
 
Apache hive
Apache hiveApache hive
Apache hive
 

Semelhante a Erlang을 이용한 swap 서버

스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오Taeoh Kim
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법SeongHyun Ahn
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R BasicsYoonwhan Lee
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7mil23
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfkd19h
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdfjinwookhong
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초진수 정
 
Tensorflow
TensorflowTensorflow
Tensorflowchs71
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
2015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌32015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌3ssuseraf62e91
 
Project#7 Group Codes Hwp
Project#7 Group Codes HwpProject#7 Group Codes Hwp
Project#7 Group Codes HwpKimjeongmoo
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍준혁 이
 

Semelhante a Erlang을 이용한 swap 서버 (20)

스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
3주차 스터디
3주차 스터디3주차 스터디
3주차 스터디
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 
2012 Ds 01
2012 Ds 012012 Ds 01
2012 Ds 01
 
이산치 과제7
이산치 과제7이산치 과제7
이산치 과제7
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf2012 Dm A0 07 Pdf
2012 Dm A0 07 Pdf
 
자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초자바스크립트 기초문법~함수기초
자바스크립트 기초문법~함수기초
 
Tensorflow
TensorflowTensorflow
Tensorflow
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
Haskell study 4
Haskell study 4Haskell study 4
Haskell study 4
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
2015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌32015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌3
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
Project#7 Group Codes Hwp
Project#7 Group Codes HwpProject#7 Group Codes Hwp
Project#7 Group Codes Hwp
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
 
7그룹 코드
7그룹 코드7그룹 코드
7그룹 코드
 

Erlang을 이용한 swap 서버

  • 1. erlang swap 서버 만들기 윤재진
  • 2. 오늘 다루는 주제 erlang 소개 기본문법 기본 Fun 생성 방법 간단한 분산 콜 방법 간단한 동시성 처리 방법
  • 3. 다루지 않는 것들 application 으로 만드는 방법 OTP 죽지않는 서버 suporvisor 서버 만들기
  • 4. erlang 이란 ? erlang 의 발음은 얼랭 erlang 을 만든 사람은 Joe Amstrong Ericsson 사에서 스위칭 소프트웨어에서 사용하기 위해 개 발 80 년대에는 전화국 스위칭 시스템에 무정지 작동 시스템으 로 돌아감 1998 년 오픈소스 전환됨 OTP(Open Telecom Platform) 이란 기본적인 통신관련 견고 한 프레임워크 제공함
  • 5. erlang 의 특징 Pure Functional Program Language 모든 값들은 상수이다 . = 이란 부등식이다 . 분산환경을 기반으로 언어가 설계되어 있다 . ETS erlang 에서 기본적으로 제공하는 key-value 테이블 제공 DETS erlang 에서 ETS 을 분산적으로 처리하는 것
  • 6. erlang 에 사용된 대표적 인 오픈소스 Riak RabbitMQ MochiWeb CouchDB
  • 7. 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] ㅇㅇ
  • 8. erlanng type 문자열 (String) java 에서 사용한 문자열과 통일하게 사용함 다른점은 문자열도 list 임 [97,98,99] = “abc”
  • 9. 패턴매칭 얼랭은 모든 변수가 상수이기 때문에 패턴매칭이 매우 중요함 . = 이란 대입이 아닌 부등식에서 출발함 . [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]
  • 10. 가드 가드 예제 f(X,Y) when is_integer(X), X>Y -> X+Y; f(X,Y) -> X. True 가드 if Guard-> Expressions; Guard-> Expressions; ... end
  • 11. case 와 if 식 case 식 case Expression of Pattern1 [when Guard1] -> Expr_seq1; .. end if 식 if Guard1 -> Expr_seq; ... end
  • 12. 예외 try..catch 로 자바와 비슷함 try Expression of Pattern1 -> Expression1; ... catch ExceptionType : ExPattern1 -> ExPression; after AfterExpressions end
  • 13. 구두점 , and 표현됨 . 한 함수에서 여러줄을 처리할때는 사용 . ; 함수를 여러절로 나눌때 사용 수학에서 표현하는 방식과 동일 . 식이나 함수 등이 끝나는걸 표시
  • 14. 함수 사용자 함수 만드는 방법 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]).
  • 15. 퀵정렬 qsort([]) -> []; qsort([Pivot|T]) -> qsort([X || X <- T, X <- Pivot]) ++ [Pivot] ++ qsort([X || X <- T, X >= Pivot]).
  • 16. 모듈 파일명이 모듈명 -module( 파일명 ). 모듈 밖에서 함수 호출하게 할려면 -export([ 함수명 /arity,...]).
  • 17. 병행성 Pid = spwan(Fun) Fun 을 평하가흔 병행 프로세스 생성 Pid ! Message 식별자가 Pid 인 프로세스 메시지 보내기 receive ... end 프로세스로 전송된 메시지를 받는다 . 얼랭에선 일반적인 스레드 방식으로 병행성을 처리 하지 않는다 . 얼랭에선 client - server 로 메시지를 주고 받아서 병행성을 처리 한다 . 프로세스 등록 및 전달방법 register(hello, spwan(fun area_server:loop/0)). hello ! {hello, “hello”}
  • 18. 간단한 분산처리 동일한 호스트에서 하나는 클라이언트 , 다른 하나는 서버 . swap 예제 README.md 에 예제 있음 . 실행방법 erl -sname 노드이름 동일 LAN 상에서 서로 다른 머신에 있는 클라이언트 서버 erl -name 노드이름 -setcookie 쿠키명 erl -sname 노드이름 @host -setcookie 쿠키명’ host 명은 DNS 가 아닌 동일 LAN 상이라서 /etc/hosts 에 등록해야 함 서로다른 서버에서 쿠기명을 동일하게 해야함
  • 20. 앞으로 ... 프론트를 단순한 소켓으로 했지만 mochiweb 과 같은 웹애플리케션으로 하는 방법 프론트를 쓰리트나 mochiweb 연결체로 두고 erlang 에서는 죽지않게 비즈니스만 교체할 수 있도록 하는것 괜찮을꺼 같음
  • 21. 추가적인 정보들 빌드툴 rebar : maven 과 비슷한 프로그램 Editor Emacs + Erlang.el + flymake
  • 22. Q&A
  • 23. 참고문헌 프로그래밍 얼랭 , 저 : 조 암스트롱 , Insight