Erlang은 1986년 Ericsson이 통신 시스템을 위해 개발한 분산·내결함성 함수형 언어다. WhatsApp이 수십억 사용자를 처리하는 데 사용한 것으로 유명하며, BEAM VM 위에서 실행된다.
핵심 설계 철학
"Let It Crash" 철학:
오류를 예방하려 하지 않고, 오류 발생 시 빠르게 재시작
Supervisor 트리로 오류 격리 및 복구
9 nines 가용성:
Erlang/OTP 기반 시스템은 99.9999999% 가용성 달성 가능
(연간 다운타임 31ms 미만)
기본 문법
erlang
%% 모듈 정의
-module(math_utils).
-export([factorial/1, fib/1]).
%% 패턴 매칭으로 재귀 정의
factorial(0) -> 1;
factorial(N) when N > 0 -> N * factorial(N - 1).
fib(0) -> 0;
fib(1) -> 1;
fib(N) -> fib(N-1) + fib(N-2).
erlang
%% 경량 프로세스 생성
Pid = spawn(fun() ->
receive
{hello, From} ->
From ! {reply, "안녕하세요!"}
end
end),
%% 메시지 전송
Pid ! {hello, self()},
%% 응답 수신
receive
{reply, Msg} -> io:format("~s~n", [Msg])
end.
erlang
%% GenServer 행동
-behaviour(gen_server).
handle_call(get_state, _From, State) ->
{reply, State, State};
handle_cast({update, NewVal}, _State) ->
{noreply, NewVal}.
활용 사례
| 회사/시스템 | 규모 | 사용 이유 |
|---|
| WhatsApp | 수십억 메시지/일 | 경량 프로세스, 내결함성 |
| Discord | 수백만 동시 접속 | 실시간 통신 |
| Ericsson AXD301 | 99.9999999% 가용성 | 통신 장비 |
| CouchDB | 분산 DB | 내결함성 |
관련 개념