- Rust는 올해 10주년을 맞이하며, 향후 기초(Foundational) 소프트웨어 개발의 핵심 언어로 자리매김하고 있음
- 기초 소프트웨어는 운영체제 커널, 클라우드 플랫폼, 임베디드 장치, CLI 도구 등 모든 것의 기반이 되는 계층을 의미
- Rust는 C/C++ 수준의 성능과 신뢰성을 제공하면서도 메모리 안전성을 보장하는 타입 시스템으로 장벽을 낮췄음
- Rust의 사명은 단순히 기반 영역에 국한되지 않고, Dioxus, Tauri, Leptos와 같은 프로젝트를 통해 상위 애플리케이션 개발에도 파급 효과를 주고 있음
- 향후 언어 상호 운용성, 타입 시스템 확장, 생태계 강화 등을 핵심 투자 영역으로 계획하고 있음
Rust의 비전: 기초 소프트웨어
- Rust의 핵심 비전은 기초 소프트웨어를 보다 쉽게 작성·유지할 수 있게 하는 것임
- 기초 소프트웨어란 모든 시스템의 기반이 되는 운영체제 커널, 클라우드 인프라, 임베디드 장치, CLI 도구 등을 포함
- 이미 Windows와 Linux 커널, VSCode 검색 엔진 ripgrep, Deno, Python uv 패키지 매니저 등 다양한 곳에서 채택되고 있음
- 이러한 소프트웨어는 성능·신뢰성·생산성이 동시에 중요함
- 기반이 무너지면 상위 계층 전체가 영향을 받기 때문에 안정성이 필수
- 성능 저하는 상위 계층의 성능 한계로 이어지므로 최소한의 오버헤드 필요
기초 소프트웨어의 성능, 신뢰성, 생산성
- 기초 소프트웨어는 모든 소프트웨어와 마찬가지로 다양한 요구가 있으나, 모든 요소가 더욱 중요함
- 신뢰성은 최우선 과제임. 기초가 무너지면 그 위에 있는 모든 것이 실패하는 구조임
- 성능 오버헤드는 상위 계층 성능의 한계를 결정하므로 최소화해야 함
- 기존에는 이러한 요구사항을 충족하는 데 두 가지 선택지가 있었음
- C/C++ : 큰 자유를 제공하지만 이에 상응하는 완벽성이 요구됨
- Java, Go 등 고수준 언어: 성능 유지를 위한 특별한 코딩 방식 필요, 추상화와 편의성 사용에 제약을 받음
- Rust는 제로-코스트 추상화와 메모리 안전성을 보장하는 타입 시스템의 결합으로 기존 방식을 바꿈
- 고수준 코드를 안전하게 작성하면서 저수준 성능과 메모리 안정성을 동시에 달성하는 도구가 됨
진입장벽 낮추기와 개발자 역량 강화
- Rust 발표에서 타입 시스템과 정적 검사를 "시금치" (좋지만 먹기 싫은 것)로 비유하는 경우가 많음
- 현실적으로 타입 시스템은 개발자에게 강력한 무기임
- 초보자는 타입 시스템을 배우며 성공적인 소프트웨어 구조 학습이 가능함
- 전문가는 자체 구조 설계에서 실수를 더 빨리 발견할 수 있음
- Yehuda Katz의 "집중 상태에서 만드는 추상화가 피로한 나의 미래를 돕는다"는 발언도 이를 잘 요약함
비기초 소프트웨어 영역
- Rust의 미션이 기초 소프트웨어에 초점이 맞춰졌다 해도 그 외 영역이 무시되는 것은 아님
- Dioxus, Tauri, Leptos 등 프로젝트는 Rust를 활용해 GUI, 웹페이지 같은 고수준 애플리케이션 영역으로도 확장하고 있음
- Rust의 주요 강점은 본질적으로 기초 소프트웨어에 집중되어 있지만, 이러한 시도들은 무시해서는 안됨
스트레칭 목표와 성장
- 기초 소프트웨어는 저수준 세부 제어를 필요로 하므로, 일반적으로 접근성과 사용성(ergonomics) 은 중요하지 않게 여겨지는 경향이 있음
- 필요한 세부 제어가 있는 만큼, 오히려 더 사용성이 중요함
- 개발자가 정말 중요한 부분에만 집중할 수 있게 도와주면 생산성이 크게 향상됨
- Rust의 고수준 적용을 추진하는 프로젝트들은 Rust 프로그래밍을 더욱 편리하게 개선할 기회를 제공함
- 이러한 개선점이 기초 소프트웨어 개발에도 고스란히 반영됨
- 핵심은 제어권과 신뢰성을 잃지 않고 사용성을 높이는 것
전체 스택 지원의 중요성
- Rust에서 고수준 애플리케이션 개발을 쾌적하게 만드는 또 다른 이유는 전체 스택을 하나의 기술로 구축할 수 있기 때문
- 처음에는 Rust를 데이터 플레인 서비스 등 일부에만 사용하려던 개발자들이, 전 영역에 확장하는 경우가 많아짐
- Rust가 생산성이 높고, 하나의 언어로 라이브러리와 코드 공유가 가능하기 때문임
- 본질적으로 단순한 코드는 어느 언어로 작성해도 단순함
점진적 심화(Iterative Deepening)의 경험
- 이상적으로는 Rust 사용자 첫 경험이 단순하고, 프로젝트가 진전됨에 따라 점진적으로 더 많은 제어를 국지적으로 확장할 수 있어야 함
- 이는 단순해 보이지만 실제로 매우 어려운 과제임
- 많은 프로젝트가 초심자 진입장벽이 크거나, 높은 제어 단계를 배우는 데 많은 지식을 요구하여 실패함
- Rust가 항상 성공하는 것은 아니지만, 이를 개선하기 위해 지속적으로 노력 중임
앞으로의 계획
- 본 글은 이 시리즈의 첫 글로 이후 네 번에 걸쳐 Rust가 기초 소프트웨어에 더 적합해지기 위해 필요한 투자 영역을 제시할 계획임
- 언어 상호 운용성(smooth language interop) 과 확장성(extensibility)
- 타입 시스템을 통한 목표 명확화(clarity of purpose)
- 생태계 강화: 더 나은 가이드라인, 도구, Rust Foundation 활용
- 마지막 글에서는 Rust 오픈소스 조직 운영에 대해, 기여 및 유지보수가 최대한 접근성 높고 즐거운 활동이 되기 위한 방안을 다룰 예정