메뉴

RUST 시작하기

2021-08-12 03:47:43

목차

RUST 설치

아래 명령을 실행하면, rust를 설치하기 시작한다. 이 실행명령은 macOS, 리눅스 기타 다른 유닉스 계열 OS에서 사용 할 수 있다.
# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Rust Language Server 설치

RLS(Rust Language Server)는 백그라운드에서 실행되는 Rust 언어지원 소프트웨어다. 이 서버는 IDE, 에디터 등에 Rust 프로그램에 대한 정보를 제공한다. 코드 자동완성, 리펙토링, 정의이동, 디버깅과 같은 개발을 위해서 필요한 다양한 기능들을 제공한다.

VSCode와 같은 IDE에서 자동완성 등의 기능을 사용하기 위해서는 반드시 설치해야 한다.

앞서 Rust를 설치했다면 rustup 명령을 이용해서 RLS를 설치 할 수 있다.

먼저 update명령을 이용해서 최신의 rustup 및 컴파일러를 사용 할 수 있도록 한다.
$ rustup update

아래 명령을 실행해서 RLS를 설치한다.
$ rustup component add rls rust-analysis rust-src

info: downloading component 'rls'
info: installing component 'rls'
info: downloading component 'rust-analysis'
info: installing component 'rust-analysis'
info: downloading component 'rust-src'
info: installing component 'rust-src'

VS Code 개발 환경 설정

나는 우분투 리눅스에서 개발한다. vscode로 개발 환경을 구성하기로 했다. vscode를 실행하고 CTRL+SHIFT+X로 원하는 확장을 찾을 수 있다. 이 중에서 Rust Language Server 기반의 확장을 설치했다. 이 녀석이면 일단 초기 환경 구성하는데에는 문제 없을 것 같다.

 vscode rust 확장

Hello World 프로젝트

Cargo는 Rust 패키지 관리자 프로그램이다. Cargo는 Rust 패키지 종속성을 검사해서 필요한 패키지를 다운로드/컴파일하고, 배포가능한 패키지를 만들며 crates.io(Rust의 패키지 registry)에 업로드하는 일을 한다.

Cargo 버전을 확인해보자.
$ cargo --version
cargo 1.57.0 (b2e52d7ca 2021-10-21)

Cargo로 HelloWorld 프로젝트를 만든다.
$ cargo new HelloWorld
     Created binary (application) `HelloWorld` package

HelloWorld 디렉토리가 만들어지고 프로젝트가 세팅된다. HelloWorld 디렉토리의 구조를 확인해보자.
.
├── Cargo.lock
├── Cargo.toml
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── rls
        ├── CACHEDIR.TAG
        └── debug
            ├── build
            ├── deps
            │   ├── HelloWorld-023c6110dcccde22.d
            │   ├── HelloWorld-c45f42deeef57572.d
            │   ├── libHelloWorld-023c6110dcccde22.rmeta
            │   ├── libHelloWorld-c45f42deeef57572.rmeta
            │   └── save-analysis
            │       ├── HelloWorld-023c6110dcccde22.json
            │       └── HelloWorld-c45f42deeef57572.json
            ├── examples
            └── incremental
                ├── HelloWorld-22cvwg2zw5sdt
                │   ├── s-g5jd4nc4sb-ypdld2-1jvra5pgtx3tl
                │   │   ├── dep-graph.bin
                │   │   ├── query-cache.bin
                │   │   └── work-products.bin
                │   └── s-g5jd4nc4sb-ypdld2.lock
                └── HelloWorld-2ox86mqa1nus1
                    ├── s-g5jd4ncnug-9mljrr-2yggdzs78wdgv
                    │   ├── dep-graph.bin
                    │   ├── query-cache.bin
                    │   └── work-products.bin
                    └── s-g5jd4ncnug-9mljrr.lock

13 directories, 19 files

Cargo.toml은 Rust 패키지 관리자를 위한 매니페스트(manifest) 파일이다. 여기에는 패키지이름, 버전, 종속성 정보가 들어있다. cargo.toml 파일을 확인해보자.
[package]
name = "HelloWorld"
version = "0.1.0"
edition = "2021"

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

[dependencies]
name을 "hello_world"로 바꾸자. Rust는 name을 카멜케이스로 사용할 경우 Warning을 출력하는데, 보기에 좋지 않다.

src 밑에 main.rs 파일을 확인 할 수 있다.
fn main() {
    println!("Hello, world!");
}

테스트를 위해서 코드를 수정했다.
fn main() {
    let somevalue="12345";
    println!("Hello, world! {}", somevalue);
}

cargo build를 이용해서 프로젝트를 빌드 할 수 있다.
$ cargo build
   Compiling hello_world v0.1.0 (/home/yundream/workspace/rust/HelloWorld)
   Finished dev [unoptimized + debuginfo] target(s) in 0.18s

cargo run으로 바이너리를 실행해보자.
# cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/hello_world`
Hello, world!

컴파일 성공했는데, "Finished dev"라는 메시지가 보일 것이다. 릴리즈가 아닌 디버깅 목적으로 빌드했다는 의미다. 릴리즈를 위한 빌드를 하려면 --release 옵셥을 주면 된다.
$ cargo build --release
   Compiling hello_world v0.1.0 (/home/yundream/workspace/rust/HelloWorld)
    Finished release [optimized] target(s) in 0.18s
빌드를 성공하면 release 디렉토리에 실행파일이 만들어진다.
$ ./target/release/hello_world 
Hello, world!

디버깅

VS Code 마켓플레이스에서 CodeLLDB를 찾아 설치하자. 아래와 같이 디버깅 할 수 있다.

 code 디버깅