피드로 돌아가기
GeekNewsBackend
원문 읽기
let-go - Go로 만든 7ms 기동 Clojure 계열 언어
Go 기반 Clojure 방언 let-go: 7ms 콜드 스타트와 10MB 경량 바이너리 구현
AI 요약
Context
JVM 기반 Clojure의 무거운 런타임과 느린 기동 속도를 해결하기 위한 대안 탐색. Go의 단순한 코어 라이브러리와 채널 추상화를 활용하여 Clojure의 표현력을 유지하면서도 배포 효율성을 극대화한 런타임 필요성 대두.
Technical Solution
- Go 런타임을 호스트로 채택하여 단일 정적 바이너리 배포 구조 설계
- Go의 Struct, Function, Channel 등 핵심 타입을 왕복 처리하는 데이터 인터페이스 구현
- 런타임 빌드 기반의 Go 라이브러리 연동 방식을 통한 외부 의존성 관리
- Core.async API와 호환되는 Go 채널 추상화를 통한 비동기 처리 최적화
- 불필요한 기능 확장을 제한하여 10MB 이하의 초경량 바이너리 크기 유지
Impact
- Cold Start 시간 6~7ms 달성 (중앙값 6.5ms)
- 런타임 바이너리 크기를 10MB 이내로 최적화
Key Takeaway
특정 언어의 생산성(Lisp-style)과 특정 런타임의 효율성(Go)을 결합할 때, 인터페이스의 상호운용성 범위와 바이너리 크기 사이의 Trade-off를 정의하는 것이 설계의 핵심임.
실천 포인트
- 런타임 기동 속도가 중요한 서버리스/엣지 환경에서 Go 기반 DSL 도입 검토 - 외부 라이브러리 래핑 방식(AOT vs Runtime Build)에 따른 상호운용성 비용 분석 - 경량화를 위해 런타임에 포함할 핵심 기능 세트를 최소 단위로 정의