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