본문 바로가기

erlang

erlang Garbage collection 저번 포스팅에서 말했듯, Erlang은 기본적으로 JVM과 다른 garbage Collection을 갖고 있습니다. Erlang의 Garbage Collection은 process당 GC를 수행합니다. 그래서 JVM과 같은 Application에 대한 Stop the world 현상이 없습니다. 그리고, Soft realtime을 보장합니다. 먼저, erlang garbage collection을 보기 전에, 먼저 erlang process의 memory 구조를 알아 봅시다. 1. Erlang Process 메모리 구조 출처 : https://hamidreza-s.github.io/erlang%20garbage%20collection%20memory%20layout%20soft%20realtime/201.. 더보기
erlang CrashDump Viewer & CrashDump 추출 erlang에거 CrashDump는 매우 중요한 역할을 합니다. 지금 어떠한 프로세스가 많인 메모리를 차지하는지, 메일박스는 얼마나 차있는지, Actor구조는 어떻게 되어 있는지, 매우 중요한 요소중에 하나가 됩니다. 그러나, Crash Dump는 erlang VM이 Crash가 되었을 때 나타는 거라, 불편하기도 합니다. 그런데 이번에 회사 선배님께 알게된 좋은 팁이 있어서 공유 합니다. kill보통 "kill -9 {PID}"로 프로그램을 강제 종료할 때 쓰는 Linux에서 kill은 프로그램에 signal을 날려주는 역할을 합니다. 여기에 User Signal이 있는데, 만약 프로그램이 User Signal을 정의 해 두었으면 그것에 대한 콜백을 받아 동작합니다. 여기서 erlang은 User Si.. 더보기
OTP의 기본 gen_server 오늘은 OTP의 가장 기초적인 gen_server에 대해 한번 알아봅시다. gen_server는 모든 OTP server의 기본이 되는 것이라서 이것만 잘 알아도 erlang Code를 알아보는데 큰 도움이 됩니다. 먼저 우리가 gen_server로 무엇을 하고 싶은 지부터 생각해봅시다. 저번의 게시물을 리뷰 해봅시다. 여기서 보듯이 우리는 “서버를 켜고 → Request를 받아 그것을 처리하고 → 할 일을 다 했으면 서버를 내리고” 싶습니다. 매우 간단한 원리 입니다.(사실 여기서 요청을 하는 것을 처리하는 게 복잡한거지! 라고 하면 할말이 없긴 합니다.) 어찌 되었든 이러한 간단한 생각을 바탕으로 만들어진 것이 gen_server입니다. 그럼 "서버를 켜는 루틴, Request를 받아 그것을 처리하는.. 더보기
erlang io:format과 같은 String Format 처음에 erlang을 시작했을 때, String Format이 매우 특이해서 놀랐습니다. 보통, '%'나 '\'를 많이 쓰는데 erlang은 '~'를 사용합니다. erlang Document에 자세히 나와있지만, 간단하고 많이 사용하는것을 한번 알아보겠습니다. erlang Document는 다음을 참고하시면 됩니다.http://erlang.org/doc/man/io.html#format-2 ~c C는 ASCII Code형식을 받습니다. 여기서 ~x.yc라는 형식을 쓸 수 있는데, 여기서 x는 구문이 차지할 칸수이고, y는 반복할 횟수입니다. 여기서 x가 -이면, 왼쪽 정렬을 하게 됩니다. 예제를 보면 쉽게 이해 할 수 있습니다. 1> io:format("|~10.5c|~-10.5c|~5c|~n",[$a,.. 더보기
erlang에서 _Var와 Var의 차이 erlang의 많은 예제 코드를 보면 _Var형식의 변수명들이 있습니다. 사실 저는 _Var형식의 변수명을 안좋아 해서.. 그냥 왜 저렇게 하지? 라는 생각이 있었는데.. 사실 이유가 있었더라고요...매우 기초적이라서 포스팅 쓰기도 거시기 한데, 일단 저처럼 모르는 사람이 있을수도 있으니까..일단 '_'는 다들 아실껍니다. Scala도 그렇지만 wildcard 변수 명입니다. 만약 _라고 하면, 이 변수는 Pattern Matching이나, 기타 다른 이유 때문에 있는 것이지 절대 다시 사용하지 않는다는 뜻 입니다.그렇다면 _Var는 어떤 것일까요? 보통 erlang Compiler는 함수에서 사용되지 않는 변수가 있으면 다음과 같은 Warning을 발생시킵니다. 1> c(ex1).ex1.erl:22: .. 더보기
erlang OTP란 1. erlang OTP란erlang OPT는 Open Telecom Platform의 약자입니다. 여기서 Telecom이라는 부분 때문에 오해를 사는 부분이 있는데,erlang OTP는 매우 generic한 Actor Model입니다. Akka Document에도 알 수 있듯, 대표적인 Actor Model인 Akka에도 erlang OTP를 계승 발전하여 만든 부분이 많습니다.(Akka의 원래 이름도 Scala OTP였습니다. 그 흔적은 다음에서 찾을 수 있습니다. https://github.com/jboner/scala-otp) 그렇다면 Akka의 조상 격인 erlang OTP에 대해서 설명을 시작하겠습니다.(그렇다고 erlang/OTP가 구식이라는 것은 아닙니다. 현재 erlang과 OTP는 계속.. 더보기