Rust 설치 및 개발환경 설정

이제부터는 Rust 언어와 관련한 내용들을 공부하고 정리해보려고 합니다.

Rust 첫번째 포스트는 설치 및 개발환경 설정 방법입니다. 어떤 플랫폼이든지 "Hello, World!"만 찍으면 개발의 반은 한 것이라는 말이 있죠.

Rust는 문서화가 가장 잘 되어있는 언어 중 하나이기 때문에 공식문서에서 안내하는 가장 빠른 방법으로 따라가보겠습니다.

rustup: Rust 버전 매니저

JS, Node 진영의 nvm, n이나 파이썬 진영의 pyenv, conda, 자바 진영의 jabba 등 메이저 언어들은 저마다 버전 매니저가 잘 발달해왔습니다.

다만,이러한 유팁리티들은 대부분 공식적으로 기획되거나 진행되는 것이 아닌 서드파티 프로그램이기 때문에 프로그램의 설계, 구성 방법 등이 저마다 다양하고 일관적이지 않습니다.

이런 점에서, Rust 공식 버전 매니저인 rustup은 Rust 개발환경을 구성할 때 새로 적응하지 않아도 되고 일관적인 프로세스를 가진다는 이점이 있습니다.

맥 Rust 설치

맥 혹은 리눅스에서는 아래 명령어를 입력해서 rustup을 설치할 수 있습니다.

$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

윈도우 Rust 설치

윈도우 사용자는 따로 rustup-init.exe 실행파일을 다운받아 진행할 수 있습니다.

아래는 공식 홈페이지에서 제공하는 다운로드 링크입니다.

rustup-init.exe 다운로드

Rust 생태계 기본 유틸 목록

rustup이 진행되는 동안 다음과 같이 출력될텐데요. 모두 Rust 생태계의 기본적인 유틸이기 때문에 하나씩 확인해보자면 다음과 같습니다.

  • cargo: Rust 프로젝트의 패키지 매니저 (JS의 npm)
  • clippy: Rust 코드 린터, 코드 품질 검수 (JS의 ESLint)
  • rust-docs: Rust 공식 문서
  • rust-std: Rust 표준 라이브러리
  • rustc: Rust 컴파일러 (JS의 V8 엔진 일부)
  • rustfmt: Rust 코드 포맷터 (JS의 Prettier)
Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

...

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: aarch64-apple-darwin
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

info: profile set to 'default'
info: default host triple is aarch64-apple-darwin
info: syncing channel updates for 'stable-aarch64-apple-darwin'
info: latest update on 2023-11-16, rust version 1.74.0 (79e9716c9 2023-11-13)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
info: downloading component 'rust-std'
info: downloading component 'rustc'
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
info: installing component 'rust-std'
info: installing component 'rustc'
info: installing component 'rustfmt'
info: default toolchain set to 'stable-aarch64-apple-darwin'

  stable-aarch64-apple-darwin installed - rustc 1.74.0 (79e9716c9 2023-11-13)


Rust is installed now. Great!

To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).

To configure your current shell, run:
source "$HOME/.cargo/env"

설치가 완료되면, 터미널 에뮬레이터를 재실행 후 아래 코드로 설치를 확인합니다.

$ rustc --version

rustc 1.74.0 (79e9716c9 2023-11-13)

만약, rustc 명령어를 찾을 수 없다면 $HOME/.cargo/bin 디렉토리가 $PATH에 제대로 추가되었는지 확인해보세요. 위에서 설치한 앱들의 실행파일은 모두 여기에 위치해 있습니다.

rustc: Rust 컴파일러

이제, Rust 컴파일러와 기타 유틸을 설치했으니, 제대로 동작하는지 확인할 차례입니다.

Rust 파일은 .rs 확장자를 갖습니다.

Rust 파일 생성, 컴파일 그리고 실행

아래와 같이 새 Rust 파일을 생성하고 간단한 코드를 입력해보세요. 에디터로 입력해도 좋습니다.

$ touch test.rs

$ echo 'fn main() {
    println!("Hello, world!");
}' > test.rs

$ cat test.rs
fn main() {
    println!("Hello, world!");
}

이제, test.rs 파일을 컴파일해보겠습니다.

$ rustc test.rs

$ ls
test.rs     test*

정상적으로 컴파일했다면 test라는 실행 파일이 생성되었을텐데요.

다음과 같이 실행합니다.

$ ./test
Hello, world!

Rust 코드를 정상적으로 컹파일하고 실행했습니다. 실행 방법은 Java나 코틀린 등 여타 컴파일 언어와 다를 바 없습니다.

cargo: Rust 빌드 시스템이자 패키지 매니저

마지막으로 Rust 프로젝트가 복잡해질수록 많은 일을 대신해줄 Cargo에 대해서 알아봅니다.

Cargo는 JS 진영의 npm이나 Java 진영의 gradle처럼 Rust 프로젝트와 빌드, 패키지 매니징을 비롯한 다양한 역할을 합니다.

여기서는 기본적인 사용법 및 구성만 확인해보겠습니다.

새 프로젝트 생성

대부분의 Rust 프로젝트는 cargo로부터 시작합니다.

아래 명령어는 새 Rust 프로젝트를 git 기반으로 생성합니다.

$ cargo new --vcs=git test-project
     Created binary (application) `test-project` package
     
$ ls test-project
Cargo.toml  src/

새로 만들어진 프로젝트 내부를 보면, 위와 같은데요. 이 중, Cargo.toml 파일이 package.json과 같은 역할을 합니다.

package.json 파일의 JSON, Dockerfile 파일의 YAML 형식처럼 Cargo.toml 파일은 TOML 형식에 따르며, YAML과 유사합니다.

그럼 Cargo.toml 파일 내부를 한 번 보겠습니다.

$ cd test-project && cat Cargo.toml
[package]
name = "test-project"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

여기서, [package], [dependencies] 처럼 대괄호 [] 표시된 단어는 TOML 파일의 섹션 헤딩이며, 하나의 섹션([package])은 다음 섹션 헤딩([dependencies])이 나오기 전까지 위치한 모든 변수를 포함합니다.

현재 Cargo.toml 파일은 2가지 섹션을 갖고 있으며 각각 프로젝트 전반의 설정과 이 프로젝트의 의존성 목록을 포함합니다.

프로젝트 빌드

프로젝트를 구성하는 소스코드는 src 디렉토리 내부에 저장됩니다.

현재 src 내부에는 main.rs 파일이 저장되어 있는데요. 프로젝트를 빌드할 때 가장 먼저 실행되는 파일입니다.

이러한 패턴은 Java, 코틀린, Swift 등 많은 컴파일 언어들이 채택하는 방식이기 때문에 익숙할 것입니다.

프로젝트 빌드를 위한 명령어는 다음과 같습니다. 프로젝트 내에서 실행해주세요.

$ cargo build 
   Compiling test-project v0.1.0 (/Users/oozy/projects/test-project)
    Finished dev [unoptimized + debuginfo] target(s) in 0.78s

Rust 프로젝트는 하나 이상의 바이너리 파일을 빌드하는데요. 이 파일은 프로젝트 내 target/debug 폴더에 위치합니다.

기본값인 debug 모드로 빌드해서 해당 폴더에 위치해 있는데요. 실행해보겠습니다.

$ target/debug/test-project
Hello, world!

프로젝트 실행과 검사

위와 같은 2단계를 한 번에 하는 명령어도 있습니다.

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/test-project`
Hello, world!

동일한 결과를 확인할 수 있습니다.

마지막으로, 빌드하기 전에 현재 프로젝트가 정상적으로 빌드가 가능한지 확인하는 명령어도 있는데요.

$ cargo check
    Checking test-project v0.1.0 (/Users/oozy/projects/test-project)
    Finished dev [unoptimized + debuginfo] target(s) in 0.27s 

큰 프로젝트일수록 빌드 시간을 아끼면서 코드를 확인할 수 있는 유용한 명령어입니다.

지금까지, Rust 설치와 개발환경 설정에 대해 알아보았습니다.

앞으로, Rust에 대해 하나씩 알아가는 기초가 되는 작업이기 때문에 충분히 경험해보시기 바라며 이번 포스트가 도움이 되었길 바랍니다.