참고 https://learnyousomeerlang.com/designing-a-concurrent-application#A-Test-Drive 컴파일 하기 표준 erlang의 구조는 다음과 같다. 이 때 Emakefile을 하나 만들어주고 아래 내용을 추가해준다. {'src/*/*', [debug_info, {i, "src"}, {i, "include"}, {outdir, "ebin"}]}. 이 Emakefile은 src/*/*아래에 있는 모든 erl 파일을 컴파일해서 ebin/에 넣을 수 있도록 해준다. 만약 src 바로 아래에 있는 파일만 컴파일 하고 싶다면 src/*로 처리해주면 된다. $ cd /dev/erlang-study $ erl -make 컴파일을 하기 위해서는 다음 명령어를 사용하면 ..
참조 https://learnyousomeerlang.com/designing-a-concurrent-application 들어가기 전 이전 게시글에서는 딱딱한 예제들만 이용해왔다. 이번 게시글에서는 erlang을 이용한 간단한 동시성 어플리케이션을 하나 작성한다. 1. Understanding the Problem 요구사항은 다음과 같다. 이벤트를 추가함. 이벤트에는 마감일, 이벤트 이름, 설명이 추가됨. (Name, Description, to_go) 이벤트 마감일이 되면 경고를 전송 이벤트 이름으로 이벤트 검색 및 취소. Persistence Disk 없음. 코드가 실행되는 동안 코드를 업데이트 할 수 있어야 함. 어플리케이션과의 상호 작용은 Command Line을 통해서 이루어짐. 추후에는 다른..
참고 https://learnyousomeerlang.com/a-short-visit-to-common-data-structures#wont-be-too-long Record % record 정의하기 -record(robot, {name, % 기본값 undefined type=industrial, % 기본값 industrial hobbies, % 기본값 undefiend details=[]} % 기본값 [] ). % record 생성하기 first_robot() -> #robot{name="Mechatron", type=handmade, details=["Moved by a small man inside]}. % record = Named tuple #robot{name="Mechatron", type=..
참고 https://learnyousomeerlang.com/errors-and-processes#links Link Link는 erlang의 두 프로세스를 연결해주는 기능이다. 연결된 두 프로세스 중 하나의 프로세스라도 죽으면, link된 다른 프로세스도 죽는다. 한 프로세스는 여러 프로세스와 Link 관계가 될 수 있다 Link 개념은 아래 경우에 굉장히 유용하게 사용할 수 있다. 에러를 가진 프로세스는 죽었지만, Link된 프로세스는 죽지 않는 경우. 그러나 종속성을 가진 모든 프로세스가 죽어야 하는 경우 이런 경우에 종속성을 가진 모든 프로세스를 죽여서 Fast Fail을 달성하기 위해서 굉장히 유용한 개념이다. 이 작업은 Link를 이용해서 달성할 수 있다. 위 그림처럼 얼랭 프로세스들을 Lin..
참고 https://learnyousomeerlang.com/more-on-multiprocessing 상태를 가지지 않는 프로세스 fridge1() -> receive {From, {store, Food}} -> From ! {self(), ok}, fridge1(); {From, {take, Food}} -> From ! {self(), not_found}, fridge1() end. 위는 냉장고로 동작하기 위해 만든 함수다. 이 함수는 두 가지 기능을 지원한다. store take 함수는 메세지를 기다리고, 받은 메시지에 store, take 같은 atom이 있으면 그에 상응하는 행동을 한다. 16> P3 = spawn(kitchen2,fridge1, []). 17> P3 ! {self(), {st..