Rust 붐은 온다
Rust를 시작한지 3주가 조금 넘었다.
프론트엔드 개발자에게 요구되는 역량이 풀스택으로 범위가 확장되면서, 조금 더 “실력있는 개발자”로서 성장해야 되겠단 생각이 들었고, 저수준 언어를 배우며 개발에 대한 사고 범위가 확장될 것이란 믿음이 있었던 나는 Rust를 공부하기 시작했다.
왜 하필 Rust냐 하면, 단지 끌려서라고 밖에 대답할 수가 없다.
이유를 굳이굳이 찾아본다면, 프론트엔드 생태계에서 사용되는 많은 라이브러리들, 예를들어 swc, turbopack, biome, rsvg, deno와 같은 많은 최신 도구들이 Rust로 작성되고 있다는 점에서 내가 속한 생태계에서 영향력을 주기에 좋은 언어라 판단해서인 것 같다.
보이지 않았던 것들
Rust를 공부하면서 몇가지 새로운 관점에 대해서 열리기 시작했다고 느껴진다.
두가지 말해본다면, 상수의 컨벤션과 문자열 최적화가 있겠다.
상수 컨벤션
개발 공부를 하던 초창기, 재작년 우아한테크코스 프리코스 시절 과제에 다음 요구사항이 있었다.
상수는 대문자 스네이크 케이스를 사용하라
const EXAMPLE_CONSTANT = "상수입니다"
나에게 상수의 의미는 JS에서
const 로 선언된 것을 의미했다. 하지만 과제를 진행하면서 많은 개발자분들이 상수임에도 대문자 스네이크 케이스를 사용하지 않았다.그때 당시 몇몇 사람들에게 이를 여쭈었고, 명쾌하게 답변 들은 기억은 없다. 다만 “팀별로 정할 수 있는 컨벤션 중 하나” 혹은 “하기 나름”정도로 결론을 내리고 넘어갔던 기억이 있다.
하지만 Rust를 배우며 새로운 시각을 배웠다.
정적 언어에서 사용되는
const 즉 컴파일 단계에서 결정되는 상수에서 대문자 케이스를 사용한다는 것, 즉 자바스크립트에서의 const는 “상수”일 수 있지만 “불변 변수”일 수도 있다는 점이다.// TypeScript const MAX_SIZE = 100; // 재할당 불가 const name = "Alice"; // 재할당 불가
// Rust const MAX_SIZE: u32 = 100; // 컴파일 타임 상수 let name = "Alice"; // 런타임 불변 변수
Rust를 배우며 알게된 점은, 대문자 스네이크 케이스는 원래 “컴파일 타임 상수”를 위한 컨벤션이라는 것. 따라서 나는 JS를 배우며 실제로 메모리에 할당되어 변하지 않는 진짜 상수와 불변 변수를 구분하지 못했던 것이었다.
인터프리터 언어인 JS에서, 전역 컨텍스트에 선언된
const정도가 실질적인 상수라고 볼 수 있을 것이다.두번째로는 문자열
JS에서는 문자열을 새로 할당하게 되면 메모리에 새로 할당되지만, Java, Rust같은 언어는 문자열 재할당에서 최적화를 한다는 사실이다.
// JavaScript/TypeScript - 매번 새로운 메모리 할당 let str = "Hello"; str += " World"; // 새로운 문자열 객체 생성 str += "!"; // 또 다시 새로운 객체 생성
// Rust - 메모리 최적화 let mut s = String::from("Hello"); s.push_str(" World"); // 기존 메모리에 추가 s.push_str("!"); // 불필요한 복사 없이 확장
JS에서의 문자열은 불변 객체로, 수정이 발생하면 새로운 문자열이 생성되고 기존 문자열 가비지컬렉션에 등록 으로 이루어진다.
JS에서 메모리 효율성을 최적화한 문자열 수정을 구현하려면 어떻게 해야할까?
// 비효율적인 방식 - 매번 새 문자열 생성 let result = ""; for (let i = 0; i < 1000; i++) { result += "Hello "; } // 최적화된 방식 - 배열에 담아서 한 번에 결합 const parts = []; for (let i = 0; i < 1000; i++) { parts.push("Hello "); } const result = parts.join("");
대략적으로 JS/TS에서 문자열을 만든다고 했을때 최적화 하는 시나리오는 위와 같다. 배열에 넣어둠으로써, 메모리를 재사용하는 효과를 가지게 할 수 있다.
이런 예시를 보면서 저수준 언어의 효율성과 JS의 한계를 명확히 인지하는 것이 내가 Rust를 공부하는 의지를 강화하고 있는 중이다.
더 나은 개발자가 되려면
다시 돌아가, 왜 내가 Rust를 배우냐에 대해 곰곰히 생각해본다면, 코더의 영역에서 머무르지 않기 위해서 라고 느낀다.
프론트에서 많은 영역이 AI로 대체되고 있다. v0, lovable같은 노코드/로우코드 플랫폼이 등장하며 비전문자들도 웹 인터페이스를 만들 수 있는 시장이 되고 있다.
AI를 도구로 사용하는 개발자가 되기 위해서 컴퓨터 사이언스를 깊게 이해하고자 한다. 그 과정에서 Rust를 학습하는 것이 지금까지는 꽤나 재밌고, 매력적인 과정으로 느껴진다.
조금 더 매력적인 개발자로서 비춰지기 위해서 노력하지만, 그럼에도 내 자신을 잃고 싶지 않다는 마음을 가지고 있었으면 한다.