핵심 요약
- 겉모습만 보고 엘릭서를 루비와 유사한 언어로 오해하는 시선이 많지만, 두 언어의 런타임과 실행 모델은 완전히 다릅니다.
- 루비가 단일 힙 기반 객체 상태 변경 위주라면, 엘릭서는 독립된 메모리와 메시지 전달을 쓰는 BEAM 가상머신 기반의 함수형 동시성 언어입니다.
- 두 언어 모두 개발자 경험을 중시하지만 엘릭서는 통신 시스템의 무중단 신뢰성을 목표로 한 얼랭의 장애 대비 철학을 계승하고 있습니다.
요약 루비(Ruby)와 문법 겉모습이 비슷하다는 이유로 엘릭서(Elixir)를 "사실상 루비의 연장선"으로 취급하는 시선이 흔하지만, 실행 모델과 프로그래밍 패러다임, 설계 철학 면에서 두 언어는 본질적으로 완전히 다릅니다.
가장 결정적인 차이는 실행 모델에 있습니다. 루비는 모든 스레드가 단일 힙(Heap) 메모리를 공유하며 모놀리식 콜 스택을 기반으로 객체를 다룹니다. 반면 엘릭서는 얼랭(Erlang)의 BEAM 가상 머신 위에서 동작하며 독립적인 경량 '프로세스'를 기본 단위로 삼습니다. 이 프로세스는 OS 프로세스나 스레드가 아니라 완전히 독립된 힙을 갖는 실행 단위로, 각 프로세스의 가비지 컬렉션이 독립적으로 일어나며 서로 메모리를 공유하지 않고 메시지 전달 방식으로만 소통합니다.
코드 스타일과 프로그래밍 관용구도 정반대입니다. 루비는 상태 변경(Mutation) 중심의 객체지향 언어이며, 이 때문에 애플리케이션 레벨의 동시성 프로그래밍이 매우 까다로워 대규모 웹 서비스에서도 프로세스를 포크하는 방식에 크게 의존합니다. 반면 엘릭서는 불변성(Immutability)과 함수 추상화를 기본으로 하는 함수형 프로그래밍 언어입니다. 동시성을 전제로 태어났기 때문에 단순한 프로그램조차 손쉽게 병렬 코어를 활용할 수 있습니다.
두 언어 모두 개발자 편의성과 읽기 쉬운 문법을 중시하지만, 배경 철학은 완전히 다릅니다. 에릭슨 전화 교환기의 신뢰성 보장을 위해 태어난 얼랭 가문에 뿌리를 둔 엘릭서는 장애와 실패를 대비하고 격리하는 철학(Let it crash) 위에 구축되어, 수개월 혹은 수년간 무중단으로 돌아가야 하는 분산 시스템에 특화되어 있습니다.
Sponsored · 광고