생물학적 영감을 받은 프로그래밍 언어
Source: Dev.to
Motivation
저는 “프로그래밍 언어를 만들고 있다”고 말하는 사람들을 보면 늘 어색함을 느꼈습니다. 이런 발언 뒤에 숨은 오만함—“… 이것은 C보다 나을 거야!” 같은 말—이 문제인 것 같습니다. 저는 C보다 나은 무언가를 만들지는 못하겠지만, 프로그래밍 언어를 만들고 있습니다. 완성도가 높지는 않을 것이고, 제가 흥미롭지 않다고 생각하는 문제들을 해결해 주지는 않을 것이지만, 제게는 뭔가 도움이 될 수 있고, 다른 사람들도 저만큼 멋지다고 생각할 수도 있습니다.
Problems with Traditional Microservices
저는 프론트‑엔드 웹 애플리케이션부터 네이티브 모바일 앱, 백엔드 마이크로서비스까지 다양한 소프트웨어 프로젝트를 진행해 왔습니다. 특히 백엔드 개발에 매력을 느꼈지만, 반복되는 문제들을 계속 마주했습니다.
- 크기와 배포 오버헤드 – 마이크로서비스는 종종 너무 부피가 크거나 너무 작습니다. 마이크로서비스를 배포하는 데 드는 시간이 실제 변경 작업 자체보다 더 오래 걸릴 때가 많습니다. 대규모 애플리케이션에서는 마이크로서비스 간 범위 확장이나 낙관적인 아키텍처 결정이 문제가 됩니다. 컨테이너 오케스트레이션과 로컬 변경을 테스트하기 위해 필요한 수많은 의존성은 추가적인 골칫거리를 만들죠.
- 데이터 로지스틱스 – 데이터가 어디서 시작해 어디서 끝나는지, 애플리케이션을 통해 어떻게 흐르고 변형되는지를 보고 싶습니다. 마이크로서비스는 충족해야 할 많은 장벽과 계약을 도입합니다. 데이터의 전체 수명 주기를 추적하는 것은 특히 메시지 스트리밍 플랫폼이 관여될 때 매우 어려워집니다. 데이터가 손을 떠나 흐릿한 메시지 브로커로 들어가면, 그 흐름에 대한 통찰을 잃게 됩니다. 설사 다른 마이크로서비스로 향한다 하더라도 말이죠.
The Mycelium VMN and Spore Language
Mycelium은 생물학에서 영감을 받은 가상 머신 네트워크(VMN)이며, 순수 함수형 언어 Spore를 실행합니다—적어도 현재 계획은 그렇습니다.
- 각 Spore 함수는 VM 내에서 독립적인 단위로 배포되고 네트워크를 통해 전파되어 사실상 “나노‑서비스” 역할을 합니다.
- 각 함수가 순수하기 때문에 함수형 언어에서 기대할 수 있는 메모이제이션, 비동기 안전성, 모듈성, 확장성 등을 얻을 수 있습니다.
- 함수는 의미론적 해시를 사용해 관리되므로, 실제 함수 내용이 바뀔 때만 재배포가 트리거됩니다(문장 순서 변경, 주석 추가 등은 재배포를 일으키지 않음).
- 네트워크는 사용량과 가용 자원을 기반으로 함수를 자동으로 배포합니다. “마이크로서비스”가 실제 사용 패턴에 따라 자동으로 형성·재구성되며, 요구사항이 변하기 전의 낙관적 가정에 의존하지 않게 됩니다. 함께 실행되는 코드는 함께 연결된다!
- VM 네트워크 자체도 사용량과 자원 가용성에 따라 재구성되며, 개별 노드 장애부터 대규모 데이터센터 정전까지 모든 상황을 처리합니다. 이러한 자체 재구성 메커니즘은 자연에서 균사체 네트워크가 스스로 조직되는 방식을 모방한 것입니다(이름도 그래서 Mycelium).
Current Status
작성 시점에서 Spore는 급히 만든 (그리고 부분적으로만—하지만 동작하는!) 바이트코드 인터프리터에 불과합니다. Mycelium은 전체 시스템을 구현하기 위한 아이디어를 검증하는 실험 단계에 있습니다.
Future Plans
몇 년 동안 이 아이디어들을 머릿속에 떠돌게 했습니다. 이제야 세상에 내보낼 때가 왔습니다. 저는 여유 시간에 언어와 VMN을 구축하면서, 진행 과정과 아이디어, 프로세스를 이 블로그에 기록할 계획입니다. 서문에서 언급한 문제들에 대한 제 해결책 중 몇 가지는 꽤 흥미롭다고 생각합니다!
관심이 있거나 진행 상황을 확인하고 기여를 제안하고 싶다면, 제 GitHub에서 확인해 보세요.