Skip to content

โ† ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐ€์ด๋“œ ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

๐Ÿฆ€ Rust ์ƒ์„ธ ๊ฐ€์ด๋“œ โ€‹

"๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ๊ณผ ๊ทนํ•œ์˜ ์„ฑ๋Šฅ์„ ๋™์‹œ์— ์ •๋ณตํ•œ ์ฐจ์„ธ๋Œ€ ๊ฐ•์ฒ  ์—”์ง„"


๐Ÿ’ก 1. 30๋…„์ฐจ ์„ ๋ฐฐ์˜ ์‰ฌ์šด ์„ค๋ช… โ€‹

๊ณผ๊ฑฐ์— ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์—ฐ์‚ฐ์ด ๊ฐ•๋ ฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” C์–ธ์–ด๋‚˜ C++์„ ์ผ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ C/C++์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ• ๋‹นํ•˜๊ณ  ์ง€์›Œ์ฃผ์–ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด์ปค๋“ค์˜ ๋†€์ดํ„ฐ๊ฐ€ ๋˜๋Š” ๋ณด์•ˆ ๊ตฌ๋ฉ(๋ฉ”๋ชจ๋ฆฌ ์˜ค์—ผ, ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ ์žฌ์‚ฌ์šฉ ๋“ฑ)์ด ์ˆ˜์—†์ด ๋šซ๋ฆฌ๊ณค ํ–ˆ์Šต๋‹ˆ๋‹ค.

Rust(๋Ÿฌ์ŠคํŠธ) ๋Š” ๋ฐ”๋กœ ์ด ์ง€์ ์—์„œ C++ ์ˆ˜์ค€์˜ ์••๋„์ ์ธ ์†๋„๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ, "์ปดํŒŒ์ผ๋Ÿฌ ๋ ˆ๋ฒจ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์„ 100% ๊ฒ€์ฆ" ํ•ด๋‚ด๋Š” ๋†€๋ผ์šด ์‹œ์Šคํ…œ ์–ธ์–ด๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋Ÿฌ์ŠคํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋งค์šฐ ํ˜น๋…ํ•˜๊ธฐ๋กœ ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค. "์†Œ์œ ๊ถŒ(Ownership)" ๊ณผ "๋Œ€์—ฌ(Borrowing)" ๋ผ๋Š” ๋…์ฐฝ์ ์ธ ๊ทœ์น™์„ ๊ฐ•์ œํ•˜์—ฌ, ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์— ์œ„ํ•ด๋ฅผ ๊ฐ€ํ•˜๋Š” ์˜์‹ฌ์Šค๋Ÿฌ์šด ์ฝ”๋“œ๋Š” ๋นŒ๋“œ(์ปดํŒŒ์ผ)์กฐ์ฐจ ์‹œ์ผœ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋น„์œ ํ•˜์ž๋ฉด: ๋ฏธ์„ธํ•œ ํ ์ง‘์ด๋‚˜ ์กฐ๋ฆฝ ์‹ค์ˆ˜๊ฐ€ ์กฐ๊ธˆ์ด๋ผ๋„ ๋ฐœ๊ฒฌ๋˜๋ฉด ์•„์˜ˆ ์กฐ๋ฆฝ ๊ธฐ๊ณ„ ๊ฐ€๋™์„ ๋ฉˆ์ถ”๊ณ  ๊ฒฝ๋ณด์Œ์„ ์ง€๋ฅด๋Š” ์ตœ์ฒจ๋‹จ ์ •๋ฐ€ ์ž๋™ํ™” ๊ณต์žฅ ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ 2. ์–ด๋””์— ์ฃผ๋กœ ์“ฐ์ด๋‚˜์š”? โ€‹

  1. ๊ณ ์„ฑ๋Šฅ ์—”์ง„ ๋ฐ ๋ธŒ๋ผ์šฐ์ € ์ฝ”์–ด: ์›น ๋ธŒ๋ผ์šฐ์ € ์—”์ง„, ์šด์˜์ฒด์ œ(Linux ์ปค๋„ ์ฝ”์–ด ๋“ฑ) ๋ฐ ๊ณ ์„ฑ๋Šฅ ๋ฏธ๋””์–ด ํ”„๋กœ์„ธ์„œ ์„œ๋ฒ„ ๋ชจ๋“ˆ.
  2. ๋ธ”๋ก์ฒด์ธ & ์Šค๋งˆํŠธ ์ฝ˜ํŠธ๋ž™ํŠธ: ํŠธ๋žœ์žญ์…˜์˜ ์ •ํ™•์„ฑ๊ณผ ์ฒ ํ†ต๊ฐ™์€ ์•ˆ์ „์„ฑ์ด ํ•„์ˆ˜์ ์ธ ํ˜„๋Œ€ ๋ธ”๋ก์ฒด์ธ ๋…ธ๋“œ ๊ฐœ๋ฐœ์˜ ์ ˆ๋Œ€๊ฐ•์ž์ž…๋‹ˆ๋‹ค.
  3. WebAssembly (Wasm): ์›น ๋ธŒ๋ผ์šฐ์ € ์œ„์—์„œ ํฌํ† ์ƒต, 3D ์บ๋“œ ๋“ฑ ๋ฐ์Šคํฌํ†ฑ ์•ฑ ๋ฒ„๊ธˆ๊ฐ€๋Š” ์„ฑ๋Šฅ์„ ๋ Œ๋”๋งํ•  ๋•Œ ์“ฐ์ž…๋‹ˆ๋‹ค.

โš–๏ธ 3. ์žฅ์ ๊ณผ ๋‹จ์  (์„ ๋ฐฐ์˜ ์†”์ง ํ•œ๋งˆ๋””) โ€‹

  • ์žฅ์  (ํƒ€ํ˜‘ ์—†๋Š” ๊ฒฌ๊ณ ํ•จ):
    • Garbage Collector๊ฐ€ ์—†์Œ: ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ์“ฐ๋ ˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ์น˜์›Œ ์†๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ์ฒญ์†Œ๋ถ€(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ)๊ฐ€ ์—†๋Š”๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ์•ˆ์ „ํ•˜๊ณ  ๋น ๋ฆ…๋‹ˆ๋‹ค.
    • ๋™์‹œ์„ฑ ๋ฒ„๊ทธ ์ œ๋กœ: ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ ์Šค๋ ˆ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—‰ํ‚ค๋Š” ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition)๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์  (์‚ด๋ฒŒํ•œ ์ปดํŒŒ์ผ๋Ÿฌ):
    • ๊ณต๋ถ€ ๋‚œ์ด๋„ ๊ทน์ƒ: "์ปดํŒŒ์ผ๋Ÿฌ์™€ ์‹ธ์›Œ์„œ ์ด๊ฒจ์•ผ ํ•œ๋‹ค"๋Š” ๋ง์ด ์žˆ์„ ์ •๋„๋กœ ์ดˆ๋ณด์ž๊ฐ€ ๋…ํ•™ํ•  ๋•Œ ์†Œ์œ ๊ถŒ ์—๋Ÿฌ ๋•Œ๋ฌธ์— ์ขŒ์ ˆ์„ ๊ฐ€์žฅ ๋งŽ์ด ๊ฒช์Šต๋‹ˆ๋‹ค.

๐Ÿš€ 4. ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ์ฒซ๊ฑธ์Œ ์ฝ”๋“œ โ€‹

๋Ÿฌ์ŠคํŠธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ์œ ํ•˜๊ณ  ๋นŒ๋ ค์ฃผ๋Š” ๋…ํŠนํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

rust
fn main() {
    // 1. s1 ๋ณ€์ˆ˜๊ฐ€ ํ—ฌ๋กœ ๋ฌธ์ž์—ด์˜ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    let s1 = String::from("Hello, Rust!");

    // 2. ์†Œ์œ ๊ถŒ์„ ๋นŒ๋ ค์ฃผ๊ธฐ(์ฐธ์กฐ) ์œ„ํ•ด & ๊ธฐํ˜ธ๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.
    print_message(&s1); 

    // 3. ์†Œ์œ ๊ถŒ์„ ์™„์ „ํžˆ ์–‘๋„(Move)ํ•˜๋ฉด ๋” ์ด์ƒ ์ด์ „ ๋ณ€์ˆ˜๋Š” ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    let s2 = s1; 
    // println!("{}", s1); // โŒ ์—๋Ÿฌ ๋ฐœ์ƒ! s1์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ด๋ฏธ s2๋กœ ์ด์‚ฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
    
    println!("์†Œ์œ ๊ถŒ ์ด์‚ฌ ์™„๋ฃŒ: {}", s2);
}

fn print_message(msg: &String) {
    println!("์ž„์‹œ ๋Œ€์—ฌํ•ด ์ฝ์Œ: {}", msg);
}

๐ŸŽฏ 5. ์ดˆ๋ณด์ž ์ถ”์ฒœ ๊ณต๋ถ€ ๋ฐฉํ–ฅ โ€‹

  1. ๋Ÿฌ์ŠคํŠธ๋Š” ์ ˆ๋Œ€๋กœ ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์„ ํƒํ•˜์ง€ ๋งˆ์„ธ์š”. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‚˜ ํŒŒ์ด์ฌ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์žก์€ ๋’ค ๋„์ „ํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ณต์‹ ํ•™์Šต์„œ์ธ The Rust Programming Language ๋ฒˆ์—ญํŒ์„ ์ฒœ์ฒœํžˆ ์ฝ์–ด๋ณด๋ฉฐ '์†Œ์œ ๊ถŒ๊ณผ ๋Œ€์—ฌ' ๊ฐœ๋…์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ง์ ‘ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ๊ณ  ๋บ„ ๋•Œ ์ผ์–ด๋‚˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ •๋…ํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด์„ธ์š”. ๋Ÿฌ์ŠคํŠธ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ์นœ์ ˆํ•˜๊ฒŒ ๊ต์ • ๊ฐ€์ด๋“œ๋ฅผ ์ค๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ง€์‹DB โ€” ๋” ๋‚˜์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ์œ„ํ•ด