나는 최근에 썸타입 학습 및 리팩토링 가이드 작업을 준비하면서 살펴본 Gleam 의 타입 시스템이 꽤 마음에 들었다. 그러면서 동시에 어플리케이션 레이어는 기존에 있는 에코 시스템 - 예를 들면, Node.js, erlang/elixir. Gleam 은 이 두 시스템으로 export 가능하다. - 을 사용하고 도메인 안쪽은 글림을 사용하면 어떨까 고민해보고 있다. 그러던 중 발견한 레딧의 포스트를 정리한다. ( 그리고 나는 아주 오래전부터 얼랭/빔 에코시스템을 동경하고 있다. )
https://www.reddit.com/r/elixir/comments/1f2hu7q/my_first_experience_with_gleam_language/
이 글은 Gleam과 Elixir의 타입 시스템·경험 차이를 토론하며, Elixir의 “점진적 타입”과 Gleam의 “정적·완전 타입”이 서로 다른 장단을 가진다고 설명합니다.
핵심 요약
이 Reddit 스레드는 Gleam을 처음 써본 경험을 바탕으로, Gleam과 Elixir의 타입 철학·개발 경험(DX)·생태계 차이를 정리하고, Elixir가 도입하려는 점진적 타입 시스템이 Gleam의 정적·완전 타입 시스템과 목표와 기능 면에서 다르다는 점을 강조합니다. 특히 Elixir의 리드 개발자인 josevalim과 Gleam 제작자인 lpil의 코멘트가 방향성을 분명히 합니다.
기본 개념부터
- Gleam: BEAM(엘릭서/얼랭 VM) 위에서 돌아가는 정적 타입 언어. 타입 시스템이 언어 설계의 중심이며 JS로도 컴파일 가능. 문법이 간결하고 타입 안정성을 강하게 추구.
- Elixir: BEAM 위의 동적 언어. 생산성과 동시성(OTP), 관용적 패턴을 중시. 현재 정식 타입 시스템은 없고, 점진적(gradual) 타입 도입을 연구 중.
주된 논점 정리
- 표준 라이브러리·생태계
- Go와 비교하면 Gleam의 표준 라이브러리는 아직 얇고 초창기라서, 유틸성 작업에 외부 라이브러리를 더 찾아야 한다는 인상이 있음.
- OTP 지원은 Elixir가 성숙하고 Gleam은 아직 보완 중이라는 의견이 존재.
- 타입 시스템의 철학 차이
- lpil: Elixir의 타입은 Gleam과 “공통점이 거의 없고” 다른 경험을 주게 될 것.
- josevalim: 점진적 타입의 핵심은 ‘dynamic이 없다고 가정하면 정적 프로그램처럼 동작해야 한다’는 것.
▫ Elixir는 기존 관용을 폭넓게 지원해야 하므로, “더 많은 프로그램을 타입으로 표현할 수 있는 표현력”을 목표로 함.
▫ 반면 타입 추론 같은 기능은 부족할 수 있어, 어떤 기준으로 보느냐에 따라 “누가 더 풍부한 기능인지” 평가는 달라진다.
- “왜 Gleam인가?”에 대한 시각
- Elixir가 타입을 갖추더라도 목표·철학·문법·DX가 다르면 언어의 느낌은 달라진다.
- Kotlin vs Java, TypeScript vs JS처럼 다양성이 가치가 있는 사례로 비유.
- JS 타깃 컴파일, 문법 선호, 즉시 타입 안정성을 원하는 개발자 등 Gleam을 선택할 합리적 이유가 존재.
비유로 이해하기
도로/교통 비유:
- Elixir(점진적 타입)는 기존 도시(관용·동적 코드)를 유지하면서 교통 신호(타입)를 점진적으로 추가해 흐름을 방해하지 않게 개선하는 방식.
- Gleam(정적 타입)은 신도시를 처음부터 교통 설계(타입 규칙) 중심으로 지어, 규칙이 엄격하지만 안정성이 높은 느낌.
공구함 비유:
- Elixir는 다양한 공구가 섞여 있고 필요한 곳에 점차 게이지·규격을 붙여 체계화.
- Gleam은 처음부터 규격화된 공구 세트로 시작해 사용 시점의 혼란을 줄임.
예시로 차이를 감각적으로
- Elixir: 기존 Phoenix 앱에 타입을 “필요한 경계(예: 외부 API 응답, 핵심 도메인)”부터 넣어 점진적으로 안정성을 높이는 전략이 어울림.
- Gleam: 새로 만드는 서비스/라이브러리에서 컴파일 타임 안정성·간결 문법을 중시한다면, 처음부터 정적 타입 기반으로 모델링하기에 적합.
언제 어떤 선택?
-
Gleam을 고려할 때:
- 컴파일 타임 안정성, 간결 문법, JS 타깃, 순수 함수적 스타일을 선호.
- 새로운 코드베이스를 타입부터 탄탄히 설계하고 싶다.
-
Elixir를 유지/강화할 때:
- 풍부한 OTP/생태계, 관용적 코드, 빠른 DX.
- 기존 서비스에 타입을 “필요한 곳부터” 도입하는 점진적 접근.
결론적으로, 두 언어는 목표와 경험이 다릅니다. Elixir의 점진적 타입은 넓은 관용과 높은 표현력을 지향하고, Gleam은 처음부터 강한 정적 타입 안정성을 제공합니다. 당신의 프로젝트 맥락(새로운 코드베이스 vs 기존 Elixir 앱, 타입 우선 설계 vs 관용·생태계 우선)에 따라 선택이 달라지는 문제입니다.
Read more →