[01. 준비 과정] - Cargo

Kurt·2023년 9월 2일

[Rust Language]

목록 보기
4/24
post-thumbnail

개요

Rust의 빌드 시스템 및 패키지 매니저인 Cargo(카고)를 배우고 이용한다
Java로 예를 들자면 Maven이나 Gradle 같은 것이라고 생각하면 된다


Cargo란?

Cargo는 코드를 빌드하고, 해당 코드가 의존하고 있는 라이브러리를 다운로드 한다
리눅스 패키지를 오프라인 환경에 다운로드 해야했던 작업들을 생각해보면.. 위와 같은 사실만으로 Cargo를 사용해야하는 충분한 이유가 되리라 생각한다


Cargo 설치

2번째 글에서 우리는 rustup을 설치하였는데 이때 Cargo가 같이 설치된다
설치 된 것을 확인하기 위해 다음과 같은 명령어를 이용하여 확인할 수 있다

$ cargo --version
cargo 1.72.0 (103a7ff2e 2023-08-15)

Cargo 실습

Cargo를 사용하여 새 프로젝트를 생성하고 이전 글에서 작성하였던 'Hello, world!' 프로젝트와 얼마나 차이가 나는지 확인


프로젝트 생성

시나리오

  1. projects 디렉터리로 이동
  2. 실행 가능한 바이너리(혹은 application) 생성
  3. 파일 리스트 확인
# 1. 현재 위치 확인
$ pwd
/home/kurt/Rust/projects

# 2. 실행 가능한 바이너리(혹은 application) 생성
$ cargo new hello_cargo --bin
     Created binary (application) `hello_cargo` package

# 3. 파일 리스트 확인
$ cd hello_cargo/
$ ls *
Cargo.toml

src:
main.rs

시나리오 해석

  1. cargo new hello_cargo --bin 명령
    cargo new 명령으로 새로운 cargo 프로젝트를 생성하며, --bin 인자가 실행 가능한 application을 만들어주는데(흔히 바이너리라고 함) 해당 프로젝트의 이름을 'hello_cargo'로 한다.
  2. 파일 리스트 확인
    hello_cargo 디렉터리 안에는 2개의 파일과 하나의 디렉터리가 존재한다
    Cargo.toml 파일과 src 디렉터리 안에 있는 main.rs 파일이다.

Cargo.toml 파일

Cargo.toml 파일 내용은 다음과 같다.

$ cat Cargo.toml
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

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

[dependencies]

위 파일은 TOML(Tom's obvious, Minimal Language) 포맷으로 작성되었는데. 이 파일은 Cargo의 환경설정 포맷이다.

1. [package]

첫번째 라인 [package]는 이후의 문장들이 패키지 환경설정이라는 것을 나타내는 섹션의 시작지점이다.
그 다음으로 3개의 라인은 Cargo가 프로그램을 컴파일하기 위해 필요로하는 정보에 대한 설정이다: 순서대로 이름, 버전, 작성자 순이다.

2. [dependencies]

마지막 라인 [dependencies]는 우리의 프로젝트의 의존성 리스트를 적을 수 있는 섹션의 시작이다. Rust에서는 코드의 패키지를 크레이트(Crate)라고 부른다.

src/main.rs 파일

src/main.rs 파일 내용은 다음과 같다.

fn main() {
    println!("Hello, world!");
}

Cargo는 'Hello, world' 프로그램을 작성해놨을 것이다.
우리가 이전에 작성하였던 것과 차이점은 Cargo가 코드를 src 디렉터리 안에 위치시켰다는 점과, 최상위 디렉터리에 Cargo.toml 파일을 가진다는 것 2가지다.


Cargo 프로젝트 빌드 및 실행

Cargo 프로젝트 빌드

다음 명령어로 cargo 프로젝트를 빌드할 수 있다.

$ cargo build
   Compiling hello_cargo v0.1.0 (/home/kurt/Rust/projects/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.16s

위 커맨드를 사용하면 target 디렉터리가 생성되며, 해당 디렉터리 아래 실행 파일이 생성된다.

Cargo 프로젝트 실행

다음 명령어로 cargo 프로젝트를 실행할 수 있다.

$ ./target/debug/hello_cargo
Hello, world!

Cargo run

빌드 파일을 실행하는 다른 방법으로는 cargo run 명령이 있다.

$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/hello_cargo`
Hello, world!

위에서 출력된 것과 같이 cargo run은 cargo build와 다르게 빌드 이후 바로 실행을 해주기 때문에 필요할 때 사용한다면 좋을 것이다.

Cargo check

코드가 컴파일되는지를 빠르게 확인하기 위한 명령어이며, 위 명령어를 사용하면 실행파일은 생성하지는 않는다.
프로그램을 작성하다가 컴파일 되는지를 확인하기 위해서 주기적으로 cargo check 명령을 실행한다고 한다.

정리

  • cargo buildcargo check를 사용하여 프로젝트를 빌드할 수 있다.
  • cargo run을 사용하여 프로젝트를 빌드하고 실행할 수 있다.

Cargo 릴리즈 빌드

최종적으로 개발이 완료된 이후 배포할 준비가 된다면 cargo build --release 명령을 사용하여 최적화와 함께 컴파일 할 수 있다.

cargo build VS cargo build --release

cargo build --release명령은 그냥 cargo build명령과 다르게 target/debug가 아닌 target/release에 실행 파일을 생성하게 된다.
최적화 작업은 프로그램 코드를 컴파일하는데 드는 시간을 길게 하지만 Rust 코드를 더 빠르게 만들어준다. 이것이 두 개의 서로 다른 프로파일이 있는 이유이다.
cargo build는 빠르게 그리고 자주 빌드하기 위한 개발용도
cargo build --release는 최종 프로그램을 빌드하기 위한 용도이다.


현재 시리즈는 다음 링크를 공부한 내용을 기록하고 있습니다.
> The Rust Programming Language <


profile
내 인생이라는 프로젝트의 최고 버전을 만들기 위해

0개의 댓글