http://www.erlang.org




과거에는 CPU가 새로운 나오면 기존 소프트웨어는 아무런 변경 없이 새로운 CPU의 성능을 마음껏 즐길 수 있었다. 새로운 CPU는 클럭 속도를 더 빠르게 만들고, 주어진 명령어를 개발자가 모르게 더 빠르게 실행시켰기 때문이다. 이런 기술로는 명령 수준 병렬화(Instruction Level Parallelism)가 대표적이다.


이제 반도체 기술의 한계로 인해 인텔이 주도했던 클록 속도 경쟁은 막을 내렸다. 과거 실리콘 밸리의 번영을 주도한 무어의 법칙(Moore's Law)이 끝났다는 위기감도 있었다. 하지만 CPU 벤더들은 클록 속도를 대체할 새로운 카드로 멀티코어를 내놓았다. 무어의 법칙은 클럭 속도가 아닌 코어 개수를 의미하게 되었다.


소프트웨어 개발자에게 멀티코어는 불행한 소식이다. 멀티코어에 대한 고려 없이 작성된 프로그램은 코어가 100개가 되도 성능이 전혀 개선되지 않기 때문이다. 멀티코어를 활용할 수 있는 멀티쓰레드 프로그래밍은 올바르게 작성하기 어렵기로 유명하다. 인텔과 마이크로소프트는 멀티코어 시대의 새로운 프로그래밍 모델을 제시하기 위해 막대한 돈을 연구비로 쏟아 붓고 있는 실정이다.


이렇게 프로그래밍 환경이 바뀌는 가운데 새롭게 주목받고 있는 언어가 얼랭(Erlang)이다. 얼랭은 멀티코어에 적합한 프로그래밍 모델을 가지고 있다. 동시성, 분산 처리, 결함 허용 등을 중요 요구사항으로 만들어진 얼랭은 1980년 후반 에릭슨(Ericcson)에서 개발되어 에릭슨의 다양한 네트워크 장비 개발에 사용된 함수형 언어이다.


얼랭의 프로그래밍 모델을 독특하다. 공유 메모리 없이 수많은 얼랭 프로세스(운영체제의 프로세스와 다른 얼랭의 경량 프로세스)가 서로 메시지를 주고받으며 자신에게 주어진 임무(task)를 수행하는 모델이다. 공유 메모리가 없기 때문에 멀티쓰레드 프로그래밍의 악몽인 데드락, 레이스 컨디션이 발생하지 않는다. 더불어 사이드 이펙트(side effect)가 없는 함수 언어의 특징은 병렬 프로그래밍과 궁합이 잘 맞다.


최근 루비온레일스 쪽에서 유명하신 김석준님의 번역으로 『프로그래밍 얼랭』(Programming Erlang: Software for a Concurrent World)의 번역본이 나왔다. 『프로그래밍 얼랭』은 얼랭 프로그래밍의 성경과도 같은 책이다. 작년 12월 마소에 내가 기고한 “병렬 프로그래밍과 얼랭”이라는 꼭지에서도 유일한 참고 도서로 조 암스트롱(Joe Armstrong)의 『프로그래밍 얼랭』을 든바 있다. 이 책은 함수 언어 얼랭의 기본기부터 멀티 코어 프로그래밍까지 차근차근 풀어가고 있다. 함수 언어나 멀티쓰레드 프로그래밍을 전혀 모르는 개발자도 쉽게 이해할 수 있다.


새로운 언어를 배우면 사고의 폭이 넓어진다. 실용주의 프로그래머(Pragmatic Programmer)는 매년 새로운 언어를 하나 배우라고 권장하고 있다. 1980년대 개발된 얼랭은 오히려 최근에 더 주목받고 있는 매력적인 언어이다. 얼랭은 프로그래밍 언어 차원에서 병렬성, 결함 허용성, 안정성을 논하고 있으며, 얼랭 개발자는 자연스럽게 이런 개념을 채득해 나갈 수 있다. 올해 아직 어떤 새로운 언어를 배울지 고르지 못했다면, 얼랭을 배워보면 어떨까?



References