Skip to main content

๐Ÿฆ€ Rust, ์ด์ œ ๋ฆฌ๋ˆ…์Šค ๋ฉ”์ธ๋ผ์ธ์— ์ •์‹ ํŽธ์ž…! โ€“ ์™œ ์ค‘์š”ํ•œ๊ฐ€?

Published 3 min readMarkdown

# ๐Ÿ“Œ ์„œ๋ก  โ€“ โ€œ์™œ ์ง€๊ธˆ Rust์ธ๊ฐ€?โ€

๋ฆฌ๋ˆ…์Šค ์ปค๋„์€ 30๋…„ ๋„˜๊ฒŒ C ์–ธ์–ด๋งŒ์„ ์‚ฌ์šฉํ•ด ์™”์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ตœ๊ทผ ๋ณด์•ˆ ์ทจ์•ฝ์ ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์˜ค๋ฅ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด์„œ, โ€œ์•ˆ์ „ํ•œ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ดโ€์— ๋Œ€ํ•œ ์š”๊ตฌ๊ฐ€ ์ปค์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๊ทธ๋•Œ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด Rust์ž…๋‹ˆ๋‹ค. 2024๋…„, ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋ฉ”์ธ๋ผ์ธ์— Rust๊ฐ€ ์ •์‹์œผ๋กœ ํฌํ•จ๋˜์—ˆ๋‹ค๋Š” ์†Œ์‹์€ ๊ฐœ๋ฐœ์ž๋ฟ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ๋„ ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Rust๊ฐ€ Linux ๋ฉ”์ธ๋ผ์ธ์— ๋“ค์–ด๊ฐ„ ๋ฐฐ๊ฒฝ, ์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€, ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€ํ™”๋ฅผ ์ดˆ๋ณด์ž๋„ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์–ธ์–ด๋กœ ํ’€์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


# ๐Ÿ”Ž ๋ณธ๋ก 

# 1๏ธโƒฃ Rust๊ฐ€ ์„ ํƒ๋œ ์ด์œ  โ€“ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ & ํ˜„๋Œ€์  ๊ธฐ๋Šฅ

| C ์–ธ์–ด | Rust |

|--------|------|

| ํฌ์ธํ„ฐ ์—ฐ์‚ฐ ์ž์œ ๋กœ ์ธํ•œ ๋ฒ„๊ทธ ์œ„ํ—˜ | ์†Œ์œ ๊ถŒ(Ownership) ์‹œ์Šคํ…œ์œผ๋กœ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ ์ฐจ๋‹จ |

| ์ˆ˜๋™ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ํ•„์š” | ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ(Borrow Checker) ์ œ๊ณต |

| ์ตœ์‹  ์–ธ์–ด ๊ธฐ๋Šฅ ๋ถ€์กฑ | ํŒจํ„ด ๋งค์นญ, ์ œ๋„ค๋ฆญ, ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ๋“ฑ ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ |

๋ฆฌ๋ˆ…์Šค ์ปค๋„ ํŒ€์€ ์ˆ˜๋งŽ์€ ๋ณด์•ˆ ๋ฒ„๊ทธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์‹ค์ˆ˜์—์„œ ๋น„๋กฏ๋œ๋‹ค๋Š” ์ ์„ ๊ฐ•์กฐํ–ˆ์Šต๋‹ˆ๋‹ค. Rust๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋Œ€๋ถ€๋ถ„์˜ ์˜ค๋ฅ˜๋ฅผ ์žก์•„๋‚ด๋ฏ€๋กœ, ์ปค๋„ ์ˆ˜์ค€์—์„œ๋„ ์•ˆ์ •์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# 2๏ธโƒฃ ๋ฉ”์ธ๋ผ์ธ์— ํฌํ•จ๋œ ์ฒซ ๋ฒˆ์งธ ๋ชจ๋“ˆ์€?

2024๋…„ 5์›”, drivers/usb ๋””๋ ‰ํ„ฐ๋ฆฌ ์•„๋ž˜์— Rust ๊ธฐ๋ฐ˜ USB ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋“œ๋ผ์ด๋ฒ„๋Š” ๊ธฐ์กด C ๊ตฌํ˜„๊ณผ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด์„œ๋„, ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์™€ ๊ฐ™์€ ํ”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ

rust

// ๊ฐ„๋‹จํ•œ USB ๋””๋ฐ”์ด์Šค ์ดˆ๊ธฐํ™” ์˜ˆ์‹œ

fn init_device(dev: &mut UsbDevice) -> Result<(), UsbError> {

    // ์•ˆ์ „ํ•˜๊ฒŒ ๋ฒ„ํผ๋ฅผ ํ• ๋‹นํ•˜๊ณ , ์ž๋™ ํ•ด์ œ

    let buf = vec![0u8; dev.max_packet_size];

    dev.read(&mut buf)?;

    Ok(())

}

์ด์ฒ˜๋Ÿผ ์‹ค์ œ ์ปค๋„ ์ฝ”๋“œ์— Rust๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ์Šต์„ ๋ณด๋ฉด, โ€œRust๋Š” ์•„์ง ์‹คํ—˜ ๋‹จ๊ณ„์ธ๊ฐ€?โ€ ํ•˜๋Š” ์˜๋ฌธ์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

# 3๏ธโƒฃ ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ง„์ž… ๋ฐฉ๋ฒ•

  1. Rust ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์ตํžˆ๊ธฐ โ€“ ownership, borrowing, match ๋“ฑ ํ•ต์‹ฌ ๊ฐœ๋…์„ ๋จผ์ € ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

  2. Linux ์ปค๋„ ๋นŒ๋“œ ํ™˜๊ฒฝ ์„ค์ • โ€“ make defconfig && make -j$(nproc) LOCALVERSION=-rust ๋กœ Rust ์ง€์› ์ปค๋„์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

  3. ๊ฐ„๋‹จํ•œ ๋ชจ๋“ˆ ์ž‘์„ฑ โ€“ rust_mod ํ…œํ”Œ๋ฆฟ์„ ํ™œ์šฉํ•ด โ€œHello, Rust!โ€ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”.

bash

git clone https://github.com/rust-for-linux/rust-mod

cd rust-mod

make

sudo insmod rust_hello.ko

์œ„ ๊ณผ์ •์„ ๋”ฐ๋ผ ํ•˜๋ฉด, C์™€ Rust๋ฅผ ๋™์‹œ์— ๋‹ค๋ฃจ๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ง์ ‘ ์ฒดํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# 4๏ธโƒฃ ์•ž์œผ๋กœ ๊ธฐ๋Œ€๋˜๋Š” ๋ณ€ํ™”

  • ์ ์ง„์  ํ™•๋Œ€: ํ˜„์žฌ๋Š” USB, ํŒŒ์ผ์‹œ์Šคํ…œ ๋“ฑ ์ผ๋ถ€ ์„œ๋ธŒ์‹œ์Šคํ…œ์—๋งŒ ์ ์šฉ๋˜์ง€๋งŒ, ํ–ฅํ›„ ๋„คํŠธ์›Œํ‚น, ์Šค์ผ€์ค„๋Ÿฌ ๋“ฑ ํ•ต์‹ฌ ์˜์—ญ์—๋„ Rust๊ฐ€ ๋„์ž…๋  ์ „๋ง์ž…๋‹ˆ๋‹ค.

  • ๋ณด์•ˆ ๊ฐ•ํ™”: ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์„ ๊ฐ–์ถ˜ Rust ๋ชจ๋“ˆ์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก, ์ปค๋„ ์ „์ฒด์˜ ๋ณด์•ˆ ์ˆ˜์ค€์ด ์ƒ์Šนํ•ฉ๋‹ˆ๋‹ค.

  • ์ปค๋ฎค๋‹ˆํ‹ฐ ์„ฑ์žฅ: Rust for Linux ํ”„๋กœ์ ํŠธ๊ฐ€ ํ™œ๋ฐœํžˆ ์ง„ํ–‰๋˜๋ฉด์„œ, ์ƒˆ๋กœ์šด ๋ฌธ์„œ์™€ ํŠœํ† ๋ฆฌ์–ผ์ด ์ง€์†์ ์œผ๋กœ ๊ณต๊ฐœ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.


# ๐Ÿš€ ๊ฒฐ๋ก  โ€“ ์ง€๊ธˆ ๋ฐ”๋กœ Rust์™€ Linux ์ปค๋„์— ๋ฐœ์„ ๋“ค์—ฌ๋ณด์„ธ์š”!

๋ฆฌ๋ˆ…์Šค ๋ฉ”์ธ๋ผ์ธ์— Rust๊ฐ€ ์ •์‹ ํŽธ์ž…๋œ ๊ฒƒ์€ โ€œ์•ˆ์ „ํ•œ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐโ€ ์‹œ๋Œ€์˜ ์‹œ์ž‘์„ ์•Œ๋ฆฌ๋Š” ์‹ ํ˜ธํƒ„์ž…๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž๋ผ๋„ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๋งŒ ์ตํžˆ๋ฉด, ๊ณง๋ฐ”๋กœ ์ปค๋„ ๋ชจ๋“ˆ ๊ฐœ๋ฐœ์— ๋„์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ–‰๋™ ์œ ๋„

  • ์˜ค๋Š˜ ๋‹น์žฅ Rust ๊ณต์‹ ๋ฌธ์„œ(https://www.rust-lang.org/ko)์™€ Linux ์ปค๋„ ๋นŒ๋“œ ๊ฐ€์ด๋“œ๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

  • ๊ฐ„๋‹จํ•œ โ€œHello, Rust!โ€ ๋ชจ๋“ˆ์„ ์ง์ ‘ ์ปดํŒŒ์ผํ•˜๊ณ , ์‹œ์Šคํ…œ์— ๋กœ๋“œํ•ด ๋ณด๋Š” ๊ฒฝํ—˜์„ ํ†ตํ•ด ์‹ค์ „ ๊ฐ๊ฐ์„ ํ‚ค์šฐ์„ธ์š”.

  • ๋ธ”๋กœ๊ทธ ๋Œ“๊ธ€์ด๋‚˜ ์ปค๋ฎค๋‹ˆํ‹ฐ(์˜ˆ: r/programming, rust-for-linux)์—์„œ ์งˆ๋ฌธ์„ ๋‚จ๊ธฐ๋ฉด, ์นœ์ ˆํ•œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋‹ต๋ณ€ํ•ด ์ค๋‹ˆ๋‹ค.

Rust, Linux ๋ฉ”์ธ๋ผ์ธ, ์ปค๋„ ๊ฐœ๋ฐœ์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ์•ž์œผ๋กœ์˜ IT ํŠธ๋ Œ๋“œ๋ฅผ ์ฃผ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ์‹œ์ž‘ํ•˜๋ฉด, ๋‚ด๋…„์—๋Š” ์—ฌ๋Ÿฌ๋ถ„๋„ ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ปค๋„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐ŸŽ‰

No comments yet. Be the first to comment.

More from this blog