[Rust] ๊ฐ๋ ๋ถํฐ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ๊น์ง ์ฐจ๊ทผ์ฐจ๊ทผ ์์ํด๋ณด๊ธฐ
์์ฆ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ง์ด ๋์ค๊ณ ์์ต๋๋ค. ๊ตฌ๊ธ์ Golang, ๋ชจ์ง๋ผ์ Rust ๋ฟ๋ง ์๋๋ผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ Clojure, Rescript ๋ฑ ๋ค์ํ ์ธ์ด๊ฐ ๋ง์ด ๋์ค๊ณ ์๋๋ฐ์. ํนํ ์ต๊ทผ์๋ ๊ตฌ๊ธ์์ C++ ๋ํญ ์ธ์ด๋ก Carbon์ด๋ผ๋ ์ธ์ด๊น์ง๋ ๋์์ต๋๋ค.
์ด๋ฒ์ ๋ค๋ฃฐ ์ฃผ์ ๋ ๋ฐ๋ก ๋ชจ์ง๋ผ์ Rust์ธ๋ฐ์. ์ต๊ทผ ๋ฆฌ๋ ์ค ์ปค๋ ๊ฐ๋ฐ์๋ Rust ์ธ์ด๊ฐ ๊ณต์ ์ฑํ๋์ด ํ๋๊ฐ ๋๊ณ ์๋ Rust์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
What is Rust?
์ ๊ฐ ์ฒ์ Rust ์ธ์ด๋ฅผ ๋ค์์ ๋๋ 3๋ ์ , YouTube์ ์ผ๋น๋ ๋ฐฉ์ก์์์์ต๋๋ค. ๊ทธ ๋๋ถํฐ ์ญ์ฑ ์๋ฌด๊ฒ๋ ํด์ค์ง ์์์์ต๋๋ค๋ง Golang๊ณผ Rust ๋ ์ค ์์ฒญ ์ ์ธ์ง์ ํ์๊ธฐ ๋๋ฌธ์ด์์ฃ . ํ์ง๋ง ์ด์ ๋ ์์ ์๊ฒ Rust ์ธ์ด๋ฅผ ์ฌ์ฉํด๋ด๋ ๋ ๊ฒ ๊ฐ์ ์๊ธฐ๊ฐ ์ค๊ฒ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋จผ์ Rust๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค ํ๋๋ก Mozilla์์ 2010๋ ์ ๊ณต๊ฐํ ์ธ์ด์ ๋๋ค. type-safety, concurrencyํ ์ธ์ด๋ก ๋์์ธ ๋์์ผ๋ฉฐ ์์คํ ๋ ๋ฒจ๊ณผ ๋ฐ์ ํ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ์ฌ๋๋ค์๊ฒ ์์ฃผ ์ ํฉํ ์ธ์ด์ ๋๋ค.
๋ ์์ธํ ๋ด์ฉ์ ์๋์ ๋งํฌ์์ ์ข ๋ ์์๋ณผ ์ ์์ต๋๋ค.
https://rinthel.github.io/rust-lang-book-ko/ch00-00-introduction.html
์ต๊ทผ์๋ Linux, OpenCV, Turbopack(JS์ ๋ฒ๋ค๋ฌ) ๋ฑ์์ ๋ค์ํ๊ฒ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ Node.js์ express์ธ ์น ํ๋ ์์ํฌ๋ ์ถ์๋์ด ๋์ฑ ๊ทธ ๊ธฐ์ธ๋ฅผ ๋ํ๊ฐ๊ณ ์์ต๋๋ค.
Install Rust
๊ทธ๋ผ ์ด์ Rust๋ฅผ ์ค์นํด๋ณด๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ฐ๋ถํฌ ๋ฆฌ๋ ์ค ํ๊ฒฝ์์ Rust๋ฅผ ์ค์นํด๋ณผ ๊ฒ์ ๋๋ค.
$ sudo apt install rustc cargo
APT ํจํค์ง ๋งค๋์ ๋ฅผ ์ด์ฉํด rustc์ cargo๋ฅผ ์ค์นํฉ๋๋ค. ์ฌ๊ธฐ์ cargo๋ Rust์ ๋น๋ ๋๊ตฌ์ ๋๋ค.
$ rustc --version
rustc --version ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด rust ๋ฒ์ ์ด ์ ๋จ๊ณ ์๋์ง ํ์ธํด๋ด ์๋ค. ์ ๋จ๊ณ ์๋ค๋ฉด ์ค์น๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ๊ฒ์ ๋๋ค.
Run Visual Studio Code
VScode์์ Rust๋ฅผ ์์ํด๋ณด๊ฒ ์ต๋๋ค. VScode์์ Rust๋ฅผ ์์ํ๋ ค๋ฉด rust-analyzer๋ผ๋ ํ๋ฌ๊ทธ์ธ์ด ํ์ํฉ๋๋ค.
https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer
Visual Studio Code์ extensions๋ฅผ ์ด์ฉํด์๋ ์ค์นํ ์ ์์ต๋๋ค.
Visual Studio Code๋ฅผ ์คํํ๊ณ ์ผ์ชฝ ์ฌ์ด๋๋ฐ์์ extensions๋ฅผ ํด๋ฆญํ ๋ค์ rust-analyzer๋ฅผ ๊ฒ์ํฉ๋๋ค.
Run IntelliJ IDEA or CLion
IntelliJ IDEA or CLion์์ Rust๋ฅผ ์์ํ๋ ค๋ฉด Rust ํ๋ฌ๊ทธ์ธ์ด ํ์ํฉ๋๋ค.
https://plugins.jetbrains.com/plugin/8182-rust
ํน์ IDE์ Plugins ๋ฉ๋ด์์๋ ์ค์นํ ์ ์์ต๋๋ค.
Marketplace๋ฅผ ํด๋ฆญํด Rust๋ฅผ ๊ฒ์ํ๋ฉด ๋งจ ์๋จ์ Rust ํ๋ฌ๊ทธ์ธ์ด ํ์๋ฉ๋๋ค.
Init Project
์ด์ ํ๋ก์ ํธ๋ฅผ ์์ฑํด ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. Rust ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋๋ Rust ๋น๋ ๋๊ตฌ์ธ cargo๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค.
$ cargo init [project name]
cargo init ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ๋ฉด ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ํ๋ ์์ฑํ ์ ์์ต๋๋ค.
ํ์ง๋ง cargo.toml ํ์ผ์ ๋ณด๋ฉด Plain Text ํฌ๋งท์ ํํ๋ก ๋์ต๋๋ค. ๊ทธ๋์ VScode์์๋ ๋ ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ์ด ํ์ํฉ๋๋ค.
Better TOML ์ ๊ฒ์ํ๊ณ ์ค์นํด๋ด ๋๋ค.
๊ทธ๋ฌ๋ฉด cargo.toml์ด ์ข ๋ ์ด์๊ฒ ๋์ต๋๋ค.
Build & Run
๊ฐ๋จํ ์ฐ๋ฆฌ๊ฐ init์ผ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋น๋, ์คํํ๋ ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
$ cargo build
ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ์์ ํฐ๋ฏธ๋์ ์ด๊ณ cargo build๋ฅผ ์ ๋ ฅํ๋ฉด ํ๋ก์ ํธ๊ฐ ์ปดํ์ผ ๋๊ณ ์คํ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ, ๋ง์ฝ ํ๋ก์ ํธ ์ด๋ฆ์ด CAMEL CASE๋ก ๋์ด ์๋ค๋ฉด Rust์์๋ warning์ด ๋ํ๋๋ฉฐ SNAKE CASE๋ก ํ ๊ฒ์ผ๋ก ๊ถ๊ณ ํฉ๋๋ค. ํ๋ก์ ํธ ์ด๋ฆ์ Snake case๋ก ๋ณ๊ฒฝํด๋ด ๋๋ค.
๊ทธ๋ฌ๋ฉด debug ๋๋ ํฐ๋ฆฌ์ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์? ๋ญ๊ฐ ์ด๋์ ๋ง์ด ๋ณธ ๋ฏํ ๋น๋ ๋ฐฉ๋ฒ์ด์ฃ
$ cargo build --release
cargo build์ release ์ต์ ์ ์ถ๊ฐํ๋ฉด ์ปดํ์ผ ์ต์ ํ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ด๋๋ฆฌ๊ฐ ๋ง๋ค์ด์ง ๋ ์ต์ ํ ๋ ํํ์ ๋ฐ์ด๋๋ฆฌ๊ฐ ์์ฑ๋์ง๋ง ์ปดํ์ผ ์๋๋ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ต์ข ์ ์ผ๋ก ๋ฐฐํฌ๋ ๋ฐ์ด๋๋ฆฌ์ ๋ํด์๋ง ์ ์ฉํ๋ ์ต์ ์ ๋๋ค.
์ด๊ฒ๋ ์ด๋๊ฐ์์ ๋ง์ด ๋ณธ ๋ฐฉ์์ด์ฃ ? ๋ฐ๋ก Visual Studio์์ ๋ณด์ จ์ ๊ฒ ๊ฐ์๋ฐ์. Visual Studio์์ C++ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ปดํ์ผํ๋ฉด debug ๋๋ ํฐ๋ฆฌ์, ๋ง์ง๋ง์ผ๋ก ์ต์ข ๋ฐ์ด๋๋ฆฌ ๋ฐฐํฌ์์๋ release ์ต์ ์ ์ฌ์ฉํด ์ปดํ์ผ ํ์ ๋์ ๋ชจ์ต๊ณผ ๋์ผํ ํํ๋ฅผ ๋๊ณ ์์ต๋๋ค.
$ ./target/debug/{binary_name}
์ด์ target์ ์๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์คํํด๋ด ๋๋ค. ๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด ๊ธฐ๋ณธ ์ฝ๋์ธ Hello World๊ฐ ์ฐํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ง์ target ๋๋ ํฐ๋ฆฌ์์ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์คํํ์ง ์๊ณ cargo ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
$ cargo run
cargo run ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ๋ฉด ๋น๋์ ๋๋ฒ๊น ์ ๋์์ ์งํํด์ค์ผ๋ก์จ ๋น๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ค๋ฅ๊ฐ ๋ํ๋๊ณ , ์์ ์ปดํ์ผ ๋ ๊ฒฐ๊ณผ๊ฐ ์๋ค๋ฉด ์ปดํ์ผ์ ํ์ง ์๊ณ ๋ฐ๋ก ์คํํ๊ฒ ๋ฉ๋๋ค.
๋ง์น๋ฉฐ...
์์ฃผ ๊ฐ๋จํ ๋ชจ์ต์ผ๋ก Rust ์ธ์ด๋ฅผ ๋ง๋๋ดค์ต๋๋ค. ์ ๊น ์ฌ์ฉํด๋ณด๋ ์ปดํ์ผ๋ฌ์ ๋ชจ์ต๊ณผ ์ฌ์ฉ๋ฒ์ด C++ ์ปดํ์ผ ๋ฐฉ์๊ณผ ๋งค์ฐ ํก์ฌํ๋ฐ์. ๋ค๋ง ๋น๋ ๋๊ตฌ์ ๋ํ ์ฌ์ฉ์ Python Poetry์ ์ ์ฌํ ๋ชจ์ต์ด์์ต๋๋ค.
๋ค์ ํฌ์คํธ์์๋ Cargo ๋น๋ ๋๊ตฌ์ ๋ํด์ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.