간단하게 러스트 코드만 테스트해보고 싶다면 다음 사이트에 접속하면 된다.


https://play.rust-lang.org/ (러스트 플레이그라운드라는 곳이다)


러스트에 대해 본격적으로 배우고 싶다면 공식 입문서, 심지어 한국어 버전까지도 있다.


https://rinthel.github.io/rust-lang-book-ko/ (러스트 공식 입문서, 한국어 버전)


내 설명에서 부족하다 싶은 부분이 있으면 여기를 참고하면 된다.


현 시점에서 러스트 개발 환경은 크게 3가지로 나눌 수 있는 듯하다.


1. VS Code + 플러그인

2. JetBrains 제품들 (CLion, IntelliJ 등)

3. 텍스트 편집기 + 기본 CLI 툴


러스트는 컴파일러 오류의 설명이 자세하고 구체적인 편이라서

사실 CLI 툴만 있어도 개발은 가능한 수준이다.


현재 사람들이 많이 쓰이는 걸로 보이는 것은 vs code에 rust-analyzer 플러그인의 조합인 것 같다


JetBrains 제품들은 괜찮긴 하지만 일단 제품이 기본적으로 유료다.


그리고 vs code에 비해서 좀 무거운 느낌도 있는 듯하다.


난 일단은 vs code를 쓰고 있다.


vs code 설치 링크: https://code.visualstudio.com/



대부분 os는 윈도우를 쓸 거라고 생각하지만

일단 맥, 리눅스 등 다른 걸 쓸 수도 있기 때문에

자세한 사항이 알고 싶다면 공식 페이지를 참고 바란다

https://rinthel.github.io/rust-lang-book-ko/ch01-01-installation.html


러스트 프로그램의 구조에 대해 간단히 설명하겠다.


https://www.rust-lang.org/tools/install


위는 러스트의 관리 프로그램 rustup을 설치할 수 있는 페이지다.


rustup을 통해서 여러 가지 프로그램이 깔리지만


대표적인 것을 꼽자면 rustc와 cargo가 있다.



rustc는 러스트의 컴파일러다.


그리고 cargo는 러스트의 패키지 매니저다.



rustc는 cargo를 통해서도 사용할 수 있기 때문에,

cargo의 사용법에 집중하면 된다.


흔히 쓰는 cargo의 커맨드는 다음과 같다.

(참고로 vs code에서도 터미널 사용은 가능하다.)


cargo new hello ( hello라는 이름의 프로젝트 생성 )

hello 폴더를 만들고 그 안에 src 폴더, Cargo.toml 파일을 만든다.

Cargo.toml은 프로젝트에 관한 정보가 적힌 곳이다.

그리고 src 폴더 내에는 main.rs 파일이 있다.

프로젝트 생성 후엔 cd hello를 해야 다음 커맨드들을 사용할 수 있다.


cargo check (문법만 빠르게 검사)

빌드 과정은 거치지 않고 뭐가 틀렸는지만 검사해 본다

한창 작성 중일 때 요긴하게 사용할 수 있다.


cargo build (빌드)

실행은 하지 않고 빌드만 해둔다


cargo run (빌드 후 실행)

빌드 후 실행까지 한다.

이미 빌드되어 있다면 바로 실행한다.



cargo new를 하면 Cargo.toml의 내용이 다음과 같이 되어 있을 것이다


[package] name = "hello" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html' target="_blank">https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies]


주석에 있는 링크는 Cargo의 자세한 사용법이다

https://doc.rust-lang.org/cargo/reference/manifest.html' target="_blank">https://doc.rust-lang.org/cargo/reference/manifest.html


name과 version은 해당 패키지의 이름과 버전이다.

그리고 edition은 다름 아닌 러스트의 에디션이다.


2022년 기준으로 2015, 2018, 2021이 있다.


dependencies는 의존성인데,

이는 러스트의 정말 강력한 점 중 하나다.


프로젝트가 다른 라이브러리에 의존적일 때,

해당 프로젝트를 직접 받아야 하는 경우가 정말 많다.

하지만 러스트는 Cargo라는 공식 패키지 매니저가 있기 때문에

이를 통해서 다른 패키지를 간단하게 다운로드 받을 수가 있다.


패키지는 crates.io라는 사이트에서 찾게 된다.


https://crates.io/


의존성은 다음과 같이 표시한다.


[package] name = "hello" version = "0.1.0" edition = "2021" [dependencies] rand = "0.8.4" # 난수 생성 관련 패키지


러스트에서 package와 crate란 말이 사실 모호한 편인데,

내 생각에 package인 것이 crate가 될 수 있다고 생각한다.


즉, rand는 원래 이름도 버전도 있던 패키지였지만,

내가 쓰는 시점에서는 crate가 되는 것이다.


또 module이라는 개념도 있는데,

러스트에서는 파일을 분리한 게 단순히 텍스트의 분리가 아니라

모듈의 분리를 의미하기도 한다.


즉, 분리된 파일은 그 자체로 의미를 가진다.


package, crate, module, 이 3가지가 러스트의 핵심 개념이다.


vs code의 플러그인을 몇 가지 더 소개하고 끝내겠다


* Better TOML

rust-analyzer를 깔아도 toml 파일은 하이라이팅이 되어 있지 않다.

이 플러그인을 깔면 toml 파일도 신택스 하이라이팅을 할 수 있다.


* crates

Cargo.toml에 표기한 crate들이 최신 버전이 맞는지 확인할 수 있다.


* CodeLLDB

좀 더 원활한 디버깅이 가능


이렇게만 해도 사실 딱히 어느 ide 부럽지 않은 개발환경이 완성되고,

부족한 부분은 그저 rustc의 터미널 출력에 의존해도 된다


다른 언어를 하다가 러스트를 해 보면 느끼겠지만

컴파일 기준이 굉장히 빡빡한 편이라

컴파일을 성공시키기만 하면 나머지 버그는 정말 없는 편이다.


그리고 나는 그게 주는 안도감이 러스트의 가장 큰 장점이자 매력이라고 생각한다.


나는 러스트 개발자가 될 예정이 아니라 할지라도

러스트를 경험해 보는 게 의미가 있다고 생각한다.


왜냐하면 그 빡빡한 컴파일의 과정에서

처음엔 그 디자인을 강요하는 게 이해가 안 될 수도 있지만

곰곰히 생각하다 보면 나름대로의 이유가 있다는 걸 알게 되기 때문이다


그리고 그런 식의 깨달음은 다른 프로그래밍 언어에서도 응용할 수 있다

자유도가 높은 프로그래밍 언어일수록 그런 식의 자기통제는 필수적이라고 생각한다


하지만 장기적으로는... 러스트를 응용하는 정도가 아니라

그냥 러스트 자체가 널리 쓰였으면 좋겠다고 생각을 한다


러스트는 시스템 프로그래밍, 게임 프로그래밍, 웹 프로그래밍 등

다양한 분야에 뛰어들 수 있게 준비되어 있는 현대 프로그래밍 언어다


다만 러스트가 그렇게까지 널리 쓰이지 않는 이유는

디자인 철학이 낯설고, 탄생한지 자체가 얼마 안 돼서라고 생각한다


하지만 러스트의 가치는 점점 인정받고 있다


러스트의 존재가 표준이 됐을 땐 이미 레드오션이 되어 좀 늦을 수도 있다

난 그래서 사람들이 러스트를 잘 안 쓴다고 하는 지금이, 오히려 입문의 적기가 아닌가 싶다