RUST: 0. 시작, "Hello World!"

iwtkmn_0219·2022년 11월 11일
0

RUST

목록 보기
1/1
post-thumbnail

https://rust-book.cs.brown.edu/ 를 기반으로 RUST를 독학하는 벨로그 시리즈입니다.
공유보다 공부한 내용을 정리하고, 복습하는 것을 목적으로 합니다.
RUST 설치 경로: https://www.rust-lang.org/tools/install (공식사이트)

이번 포스팅에서는 RUST에서는 "Hello World!"를 어떤 방식으로 출력하는지, RUST가 기본적으로 어떤식으로 동작하는지 그리고 cargo라는 도구는 어떤 도구인지에 대해서 간단히 다루겠습니다.

0. "Hello, World!"

RUST에서는 "Hello, World!"를 다음과 같이 출력합니다.

// main.rs (rust의 파일 형식)
fn main () {
	print!("Hello, World!");
}

만약 여러분이 C/C++과 같은 다른 언어들을 다루어 보았다면 어느정도 익숙할 것 입니다. fn은 함수를 뜻하고, mainmain.rs에서 가장 먼저 실행하는 함수임을 알 수 있을 것 입니다. 또 print!는 특정 값을 출력해주는 역할임을 추측할 수 있을 것 입니다.

하나 짚고 넘어갈 점은 print!는 함수가 아닙니다. !가 붙은 것은 RUST macro라고 불립니다. 이에 대해서는 추후에 다루도록 하겠습니다.

1. RUST는 컴파일과 실행을 각각 실시합니다.

RUST에서는 컴파일과 실행을 각각 실행합니다. 파이썬과 같은 동적 프로그래밍 언어의 경우에는 컴파일과 실행이 동시에 이루어졌을 것 입니다. 이러한 언어들과 다르게 RUST는 실행 전에 소스코드를 기계어로 바꾸는 과정(컴파일)이 필요합니다. 이를 흔히 ahead-of-time compiled 언어라고 합니다. 대표적으로 gcc가 해당 형식을 따릅니다.

RUST파일이 담긴 디렉토리에서 컴파일은 다음과 같이 진행할 수 있습니다.

rustc main.rs
-------------
rustc <파일명>

이후 실행은 다음과 같이 진행할 수 있습니다.

./main.exe or ./main
--------------------
./<실행파일명>

2. Cargo?

Cargo는 러스트의 빌드 시스템 및 패키지 매니저입니다. 이를 통해 조금 더 큰 프로젝트에 대해 관리할 때 보다 편하게 관리할 수 있습니다.

Cargo를 통해 프로젝트를 생성하는 방법은 다음과 같습니다.

cargo new <프로젝트명> --bin

이후 생성된 디렉토리를 열어보면 다양한 파일들이 생성되어있는 것을 확인할 수 있습니다.

2-1. src

cargo는 소스파일들이 src 디렉토리에 있을 것으로 알아서 판단합니다.

2-2. Cargo.toml

Cargo.toml은 Cargo의 환경설정 포맷을 담는 파일입니다.

2022년 11월 11일을 기준으로 만들어지는 Cargo.toml파일은 다음과 같이 구성되어 있습니다.

[package]
name = "new_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]

[package] 에는 Cargo가 프로그램을 컴파일하기 위해 필요로 하는 정보들이 작성됩니다. 현재 프로젝트의 이름, 버전 등이 작성됩니다.

[dependencies]

[dependencies] 에는 의존성들이 작성됩니다. RUST에서는 코드의 패키지를 crate(크레이트)라고 합니다. 추후에 crate에 관해 이야기하면서 의존성에 대한 이야기도 함께 하도록 하겠습니다.

3. Cargo 프로젝트를 빌드, 실행하는 법

우리는 Cargo 를 이용하여 기존에 main.rs를 실행하던 방식보다 더 나은 방식으로 main.rs를 실행할 수 있습니다.

첫 번째 방법

우선 다음을 이용하여 프로젝트를 빌드할 수 있습니다.

$ cargo build

이를 통해 현재 디렉토리가 아닌 target/debug/<프로젝트명>.exe를 생성합니다.

다음을 통해 실행 파일을 실행할 수 있습니다.

$ ./target/debug/hello_cargo  # Mac or Linux
or
$ .\target\debug\hello_cargo.exe  # Windows

두 번째 방법

우리는 위의 두 과정을 한 번에 할 수도 있습니다.

$ cargo run

'cargo run'은 프로젝트를 실행하기 전에 빌드를 한 번 거치고, 실행파일을 찾아 실행합니다.

참고

추가적으로 RUST는 cargo check라고 하는 커멘드를 제공합니다. 이는 단순히 컴파일되는지를 확인만해줍니다.(실행파일을 생성하지는 않음) 해당 커멘드를 사용하는 이유는 실행파일이 생성되지 않기에 build에 비해서 빠르게 작동하기 때문입니다. 매번 build를 사용하는 것보다 check를 사용하여 코드가 작동하는지 확인하는 것이 개발 속도를 높여줄 것입니다.

4. 릴리즈 빌드하는 법

마지막으로 릴리즈 버전을 빌드하는 방법입니다.

$ cargo build --release

개발이 완료되어 배포할 준비가 끝이 났다면 위의 커멘드를 통해 최적화와 함께 이를 컴파일할 수 있습니다. 해당 커멘드를 처음 사용하게 되면, target/release 디렉토리를 생성하고 하위에 실행파일 및 부가적인 파일들을 생성할 것입니다. 릴리즈 버전은 디버그 버전에 비해 컴파일 시간이 더 오래 걸린다는 것을 기억해야합니다.

0개의 댓글