๐Ÿฆ€Rust

๊ณ ํผ์— ๋Œ€ํ•ญํ•  ๊ท€์—ฌ์›€์€ ํŽ˜๋ฆฌ์Šค ๋„ˆ๋ฐ–์— ์—†์–ด

2 minute read

Overview : ๊ด‘ํ™œํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๋„ ์ฃผ์ธ์ด ์žˆ๋‹ค๋ฉด ์–ด๋–จ๊นŒ

์šฐ์„ ์€ ํ•„์ž๋Š” Rust์— ๋Œ€ํ•œ ์†Œ๊ฐœ๋ฅผ ํ• ๋งŒํ•œ ์ž๊ฒฉ์ด ์—†์Œ์„ ์šฐ์„  ์•Œ๋ฆฐ๋‹คใ…  ํ•˜์ง€๋งŒ ์ƒ๋‹น์‹œ๊ฐ„ C++๋ฅผ ์ด์šฉํ•œ ์ž„๋ฒ ๋””๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋„ˆ๋ฌด๋‚˜๋„ ์•„์‰ฝ๊ณ  ์–ด๋ ค์› ๋˜ ๋ฌธ์ œ๋ฅผ Rust๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„์ง€๋„ ๋ชจ๋ฅธ๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ ๋งŽ์€ ๊ด€์‹ฌ์„ ๊ฐ€์ง„ ๊ฒƒ์€ ์‚ฌ์‹ค์ด๋‹ค. ๋งŒ์•ฝ ๋‹น์žฅ์€ ์จ๋จน์„ ์ˆ˜ ์—†๋”๋ผ๋„ ๊ผญ ํ•˜๋‚˜์ฏค ๊ฐ–๊ณ  ์‹ถ์€ ํ•„์‚ด๊ธฐ๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ Rust๋ฅผ ํƒํ•  ๊ฒƒ์ด๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Rustacean์ด ๋˜์–ด์„œ ํ•„์‚ด๊ธฐ๋ฅผ ์จ๋จน์„ ์ˆ˜ ์žˆ๋Š” ์„ธ์ƒ์ด ์˜ค๊ธธโ€ฆ

Install

www.rust-lang.org
์„ค์น˜๋Š” ์•„์ฃผ ์‰ฝ๋‹ค. ์œ„ ์‚ฌ์ดํŠธ์—์„œ ๊ฐ ์šด์˜์ฒด์ œ์— ๋งž๊ฒŒ ๋‹ค์šด์„ ๋ฐ›์•„ ์„ค์น˜ํ•˜๋ฉด ๋ฌธ์ œ์—†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Windows์˜ ๊ฒฝ์šฐ(Visual Studio๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด) compile์‹œ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—,

error: linker link.exe not found
note: The system cannot find the file specified. (os error 2)
note: the msvc targets depend on the msvc linker but link.exe was not found
note: please ensure that VS 2013, VS 2015 or VS 2017 was installed with the Visual C++ option
error: aborting due to previous error

๊ทธ๋Ÿฐ ๊ฒฝ์šฐ ์•„๋ž˜ ๋งํฌ์—์„œ Visual C++ ๊ฐœ๋ฐœ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.
https://visualstudio.microsoft.com/ko/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16

Cargo

rust๋ฅผ ์„ค์น˜ํ•˜๋ฉด cargo๋ผ๋Š” Package Manager๊ฐ€ ๊ฐ™์ด ์„ค์น˜๋˜๋Š”๋ฐ,
ํ„ฐ๋ฏธ๋„์—์„œ ์•„๋ž˜ ํ‚ค์›Œ๋“œ๋กœ ์„ค์น˜์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

cargo โ€”version

Cargo๋Š” ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ, ๋ฐฐํฌ, ๋ฒ„์ „๊ด€๋ฆฌ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ•ด์ฃผ๋Š”๋ฐ,
C๋‚˜ C++์ฒ˜๋Ÿผ low level์„ ๋‹ค๋ฃจ๋Š” ์–ธ์–ด์ธ๋ฐ๋„ ํŽธ๋ฆฌํ•œ web๊ธฐ์ˆ  ๋งˆ๋ƒฅ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ต‰์žฅํžˆ ์ธ์ƒ์ ์ด์—ˆ๋‹ค.

์นด๊ณ ๋Š” ๋Ÿฌ์ŠคํŠธ์˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด์ž ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค.
์นด๊ณ ๋Š” ๋Ÿฌ์ŠคํŠธ ์ฝ”๋“œ์˜ ๋นŒ๋“œ, ์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(dependencies) ๋‹ค์šด๋กœ๋“œ ๋ฐ ๋นŒ๋“œ ๋“ฑ์„ ๋Œ€์‹  ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Cargo๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 4๊ฐ€์ง€์˜ ์ผ์„ ํ•œ๋‹ค

  1. ํ”„๋กœ์ ํŠธ์˜ ์ •๋ณด๋“ค์„ ๋‘ ๊ฐœ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  2. ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ์„ ๊ฐ€์ ธ์˜ค๊ณ  ๋นŒ๋“œํ•œ๋‹ค.
  3. ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋นŒ๋“œ ๋  ์ˆ˜ ์žˆ๋„๋ก rustcํ˜น์€ ๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ธ์ž๋ฅผ ๋งž์ถฐ ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค.
  4. ๊ทœ์น™์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ๊ณ  ์ž‘์—…๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด Rust project๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค
    ์ถœ์ฒ˜: https://jen6.tistory.com/86

Create Project

๊ทธ๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ Hello World๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

cargo new {Project๋ช…} โ€”bin
ํ„ฐ๋ฏธ๋„์—์„œ ์œ„์™€ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด, ํ˜„์žฌ๊ฒฝ๋กœ์— ํ”„๋กœ์ ํŠธ ํด๋”๊ฐ€ ์ƒ๊ธด๋‹ค.

ํ”„๋กœ์ ํŠธ ํด๋”์—๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ์ธ Cargo.toml, .gitignore, src ๋””๋ ‰ํ† ๋ฆฌ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ,

src์—๋Š” main.rs๋ผ๋Š” ์†Œ์Šค์ฝ”๋“œ์™€,

fn main() {  
    println!("Hello World");  
}  

ํ—ฌ๋กœ์šฐ์›”๋“œ ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

์ฒซ ์ฝ”๋“œ์ด๋‹ˆ ๊ฐ„๋‹จํ•œ ์„ค๋ช…์„ ํ•˜์ž๋ฉด,
println!์˜ ๋А๋‚Œํ‘œ๋Š” ๋งคํฌ๋กœ๋ผ๋Š” ๋œป์ด๋‹ค. ๋‚˜์ค‘์— ์•Œ์•„๋ณธ๋‹ค.

intent๋Š” ํƒญ์ด ์•„๋‹Œ ์ŠคํŽ˜์ด์Šค๋ฐ” 4๋ฒˆ์œผ๋กœ ๊ทœ์น™์ด ์ •ํ•ด์ ธ์žˆ์œผ๋ฉฐ,
snake case convention rule์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, ์†Œ๋ฌธ์ž์™€ ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ์กฐํ•ฉํ•œ ๋ฐฉ์‹์ด๋‹ค.

์ž„๋ฒ ๋””๋“œ๊ฐ™์•„์„œ ์‹ซ์ง€๋งŒ ํƒ€์ดํ•‘์ด ํ›จ์”ฌ ์‰ฝ๊ณ , ํ•œ๊ฒฐ๊ฐ™๊ธฐ๋งŒํ•˜๋‹ค๋ฉด ์‚ฌ์‹ค ์–ด๋–ค ๋ฐฉ์‹์ด๋“  ์ด์œ ๊ฒƒ ๊ฐ™๋‹ค.

Compile

์ด์ œ rs ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•ด๋ณด์ž. Rust๋Š” ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์ปดํŒŒ์ผ ์–ธ์–ด์ด๋‹ค.

rustc .\main.rs

์‹คํ–‰์‹œ ์ปดํŒŒ์ผ์—๋Ÿฌ๊ฐ€ ์—†๋‹ค๋ฉด exe ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ (์œˆ๋„์šฐ์˜ ๊ฒฝ์šฐ) exe ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ฉด Hello World๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
์ด๊ฒƒ์€ rust์˜ ๊ธฐ๋ณธ ์ปดํŒŒ์ผ ๋ฐฉ์‹์ด๊ณ  Cargo๋ฅผ ํ†ตํ•ด์„œ ๋” ํŽธํ•˜๊ฒŒ ์ง„ํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ”„๋กœ์ ํŠธ ํด๋” ๊ฒฝ๋กœ์—์„œ,
cargo build
๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด target ํด๋”์— ์‚ฐ์ถœ๋ฌผ์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

๊ทธ ์™ธ์—๋„,
cargo check
์ด๊ฒƒ์€ ์ปดํŒŒ์ผ์„ ํ•˜๋˜ ์‹คํ–‰ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ๋น ๋ฅด๋ฉฐ, ์ปดํŒŒ์ผ ๊ฐ€๋Šฅ์—ฌ๋ถ€๋งŒ์„ ํŒŒ์•…ํ•˜๊ธฐ์— ์ข‹๋‹ค.

cargo run
๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ด ๋ช…๋ น์€ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰์„ ๋™์‹œ์— ์ง„ํ–‰ํ•ด์ค€๋‹ค.