Rust๋ C++์ ๋์ฒดํ ์ ์์๊น?
Rust๋ C++์ ๋์ฒดํ ์ ์์๊น? ๊ด๋ จ
Rust. ์ต๊ทผ ๋ ๋ง(Reddit)์ด๋ ํด์ปค๋ด์ค(HackerNews)๋ฅผ ๋ณด๋ฉด ์์ฃผ ๋น๋ฒํ๊ฒ ์ ํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค.
์ด ์ธ์ด๋ C++์ ๋์ฒดํ ์ ์๋ ์ธ์ด๋ก ์ ๋ช ํ๋ฐ์. C++์ ์ค๋ ์ฌ์ฉ์ ์ ์ฅ์์ Rust๊ฐ ๊ณผ์ฐ ์ด๋ค ๋ฉ์ปค๋์ฆ์ผ๋ก C++์ ๋์ฒดํ๊ณ ์ ํ๋์ง ์์๋๋ฉด ์ข์ ์์ ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
๊ณผ์ฐ Rust๋ ์ด๋ค ํน์ง์ด ์๊ธธ๋, ์ด๋ ๊ฒ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์๋ ๊ฑธ๊น์?
Rust! ์ด๋ค ์ธ์ด์ธ์ง ์์๋์?
Rust๋ ๋๊ฐ ๋ง๋ค์์๊น?
Rust๋ ์ง๋ 2010๋ , ๋ชจ์ง๋ผ ์ฌ๋จ์ ํ์์ผ๋ก ๊ฐ๋ฐ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค. ๋ชจ์ง๋ผ ์ฌ๋จ์ ํ์ด์ดํญ์ค์ ์ฌ๋๋ฒ๋ ๊ฐ์ ์ ๋ช ํ ์คํ ์์ค ํ๋ก์ ํธ๋ก ์ ์๋ ค์ ธ ์์ต๋๋ค. ์ด๊ธฐ ๊ฐ๋ฐ์๋ ๊ทธ๋ ์ด๋ ํธ์ด(Graydon Hoare)๋ก ๋ชจ์ง๋ผ์์ ๊ทผ๋ฌดํ๋ฉฐ Rust์ ๊ธฐ๋ณธ ์์ด๋์ด๋ฅผ ๊ตฌ์ํ๊ณ ๊ตฌํํ๊ธฐ ์์ํ๋ค๊ณ ํฉ๋๋ค. ํธ์ด์ ๊ฐ์ธ ํ๋ก์ ํธ์๋ Rust๋ ๊ณง ๋ชจ์ง๋ผ ์ฌ๋จ์ ๊ณต์์ ์ธ ์ง์์ ๋ฐ๊ฒ ๋์๊ณ , 2020๋ Rust ์ฌ๋จ์ด ์ค๋ฆฝ๋๋ฉฐ ์ธ์ด ๊ฐ๋ฐ๊ณผ ์ํ๊ณ๊ฐ ๋์ฑ ํ๋ฐํด์ก์ต๋๋ค.
์ด๋ฌํ Rust๋ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก, ํนํ C์ C++์ ๋จ์ ์ ๋ณด์ํ๊ณ ์ ํ๋ ๋ชฉ์ ์์ ํ์ํ์ต๋๋ค. ๋ ๋์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ, ํนํ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์์ ์ฑ์ ํต์ฌ ๋ชฉํ๋ก ๊ฐ๋ฐ๋์์ฃ .
Rust์ 5๊ฐ์ง ํน์ง์ ์์๋ด ์๋ค
Rust์ ์ฃผ์ ํน์ง์ ์ด๋ ์ต๋๋ค.
- ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ: ์ปดํ์ผ ์์ ์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํจ์ผ๋ก์จ ๋ฐํ์์ ๋ฐ์ํ ์ ์๋ ์ฌ๋ฌ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ์ฐจ๋จํฉ๋๋ค.
- ๋ฐ์ด๋ ์ฑ๋ฅ: C, C++๊ณผ ์ ์ฌํ ์์ค์ ๊ณ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์์ ์ฑ: ๋ฐ์ดํฐ ๊ฒฝํฉ์ ๋ฐฉ์งํ๊ณ ์์ ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค.
- ๊ณ ์ ์์ ๊ถ ์์คํ : ๊ณ ์ ํ ์์ ๊ถ ์์คํ ์ธ โ๋น๋ฆผ ๊ฒ์ฌ๊ธฐ(Borrow Checker)โ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํจ์จ์ฑ์ ๊ทน๋ํํฉ๋๋ค.
- ํ๋ถํ ํ์ ์์คํ ๊ณผ ํจํด ๋งค์นญ: ๋ค์ํ ํ์ ์์คํ ๊ณผ ํจํด ๋งค์นญ์ ์ ์ฉํด ์ฝ๋์ ์์ ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ฐ ๊ธฐ์ฌํฉ๋๋ค.
์ด์งธ์ ์ค๋ฆฌ์ฝ ๋ฐธ๋ฆฌ์์ ์ด๋ ๊ฒ ํซํ ๊น์?
Rust๋ ์ค๋ฆฌ์ฝ ๋ฐธ๋ฆฌ์ ์ฃผ์ ๊ธฐ์ ๋ค๋ก๋ถํฐ ๊ด์ฌ์ ๋ฐ๊ณ ์์ต๋๋ค. ๋์ฌ, ๋ง์ดํฌ๋ก์ํํธ, ๋ฆฌ๋ ์ค ์ปค๋ฎค๋ํฐ, ์๋๋ก์ด๋ ํ๋ก์ ํธ ๋ฑ ์ฌ๋ฌ ๊ณณ์์ ๊ฐ๋ฐ ์ธ์ด๋ก Rust๋ฅผ ์ ํํ๊ณ ์์ฃ . ํนํ ์๋ก ๋์ ํ ๊ธฐ์ ์ ๊ฒฐ์ ํ๋ ๊ด์ ์ด ์๋ ๊ธฐ์กด C++ ์ฝ๋๋ฅผ ์ฌ์์ฑ ํ๋ ์ ํ์ง๋ก ๋ง์ด ์ฐ์ด๊ณ ์์ต๋๋ค. (์ฐธ๊ณ ๊ธ)
์ฌ๋ฌ ๊ฐ์ง Rust์ ํน์ง ์ค์์๋ ์๋ ํน์ง์ด ํฐ ์ํฅ์ ์ฃผ์์ ๊ฒ๋๋ค.
- ์์ ์ฑ: ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ๊ณผ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์์ ์ฑ์ ๋ณด์ฅํ์ฌ ์ํํธ์จ์ด์ ์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ: ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก์ C++์ ๋๋ฑํ ์ฑ๋ฅ์ ์ ๊ณตํ๋ฉด์๋, ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค.
- ์์ฐ์ฑ: Rust์ ๊ฐ์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ท์น๊ณผ ๋ฌธ๋ฒ, ๋ํ ์ค์์ ์ฌ์ง๋ฅผ ์ค์ด๋ ๊ท์น์ ์ด๊ธฐ ํ์ต ๋น์ฉ์ด ํฌ์ง๋ง, ์ด์ ์ ์ํ ๊ฐ๋ฐ์๋ค์ ์์ฐ์ฑ๊ณผ ์์ ์ฑ์ ์ฌ๋ ค์ค๋๋ค.
C++ vs. Rust. ๊ทธ๋์ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ์?
ํ๋ํ๋ ์ง์ด๋ณด๋ฉฐ ์ฐจ์ด์ ์ ์์๋ณผ๊น์?
- .C์ C++: C์ C++์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์๊ตฌํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํด์ผ ํ๋๋ฐ์. ๊ทธ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋์, ์๋ชป๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ(์: ๋๊ธ๋ง ํฌ์ธํฐ, ๋ฒํผ ์ค๋ฒํ๋ก์ฐ) ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
- .Rust: Rust๋ ๊ณ ์ ํ ์์ ๊ถ ์์คํ โ๋น๋ฆผ ๊ฒ์ฌ๊ธฐ(Borrow Checker)โ๋ฅผ ์ ์ฉํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ด ์์คํ ์ ์ปดํ์ผ ํ์์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ๋ณด์ฅํ๊ณ , ๋๊ธ๋ง ํฌ์ธํฐ๋ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ๋ํ ์๋ช ์ฃผ๊ธฐ(Lifetime) ์์คํ ์์ ์ฐธ์กฐ๊ฐ ์ ํจํ ๊ธฐ๊ฐ์ ๋ช ์์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ๊ฐํํฉ๋๋ค.
- .C์ C++: ์ด ์ธ์ด๋ฅผ ์ฐ๋ฉด ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ๋ **๋ฐ์ดํฐ ๊ฒฝํฉ ์กฐ๊ฑด(race condition)**์ ๋ฐฉ์งํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ฌด์๋ณด๋ค ๊ฐ๋ฐ์๊ฐ ์ง์ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํด์ผ ํ๋๋ฐ, ์๋ชป๋ ๋๊ธฐํ๋ ์น๋ช ์ ์ธ ๋ฒ๊ทธ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
- .Rust: Rust ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ Send์ Sync ํธ๋ ์์ผ๋ก ์์ ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค. ์ด ํธ๋ ์๋ค์ ํ์ ์์คํ ์ ์ํด ๊ฐ์ ๋๋ฉฐ, ๋ฐ์ดํฐ ๊ฒฝํฉ ์กฐ๊ฑด์ ์ปดํ์ผ ํ์์ ๋ฐฉ์งํฉ๋๋ค. ๋ํ **์์ ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ(fearless concurrency)**๋ฅผ ์ฅ๋ คํ๋ฉฐ, ๋ฐ์ดํฐ ๊ฒฝํฉ ์์ด ๋ณ๋ ฌ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- .C์ C++: C๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ๊ทธ๋๋ C++๋ ์์ธ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ง๋ง, ์๋ชป ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ํด์น ์ ์์ต๋๋ค.
- .Rust: Rust๋ Result์ Option์ด๋ผ๋ ํ์ ์ผ๋ก ๋ช ์์ ์ธ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํฉ๋๋ค. ์ด ํ์ ๋ค์ ์ฌ์ฉํ๋ฉด ํจ์๊ฐ ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํ ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ช ํํ๊ฒ ํํํ ์ ์์ผ๋ฉฐ, ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ฌ ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ํ Rust๋ ๋น์ ์ ์ข ๋ฃ๊ฐ ํ์ํ ๋ panic! ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํด ๋ช ์์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ค๋จ์ํต๋๋ค. ์ด๋ก์จ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๋ช ํํ๊ฒ ํ๊ณ , ์์์น ๋ชปํ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ ์ ์์ฃ .
- .C์ C++: C์ C++๋ ์ค๋๋ ์ธ์ด์ ๋๋ค. ๋ฐ๋ผ์ ํ๋์ ์ธ ๊ฐ๋ฐ ํจํด์ ์ ์ฉํ๊ธฐ ์ด๋ ต๊ณ , ๋ฌธ๋ฒ์ ๋ณต์กํ๋ฉฐ, ์ฝ๋ ์ ์ง๋ณด์๊ฐ ์ด๋ ต์ต๋๋ค.
- .Rust: Rust๋ ์ต๊ทผ์ ๋ง๋ค์ด์ง ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ ๋งํผ, ๋ชจ๋ํ ๋ฌธ๋ฒ์ ์ฑํํด ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์์ต๋๋ค. ๋งคํฌ๋ก ์์คํ , ํจํด ๋งค์นญ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ ฅํ ํ์ ์์คํ ์ด ๋ํ์ ์ธ ์์์ ๋๋ค. ์ฌ๊ธฐ์ Cargo๋ผ๋ ๋น๋ ๋ฐ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ์ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ , ๋น๋ ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค.
- .C์ C++: C์ C++๋ ๋ฎ์ ์์ค์ ์ ์ด๋ฅผ ์ง์ํฉ๋๋ค. ์ด๋ฌํ ์ ์ด๋ ๋ฒ๊ทธ์ ์์ ์ฑ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค.
- .Rust: Rust๋ ๊ณ ์ฑ๋ฅ์ ์ ์งํ๋ฉด์๋ ์์ ํ ์ถ์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์ ๋ก ๋น์ฉ ์ถ์ํ ์์น์ผ๋ก ๋ฐํ์ ์ค๋ฒํค๋ ์์ด ์์ ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์์ ์ฝ๋๋ก Rust์ ํน์ง์ ์์ธํ ์์๋ด ์๋ค
1. ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ํ๋ ์ธ์ด์์๋ ์์ ์ธ์ด๋ง ๊ฐ์ง ํน์ง์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ด๋ฆฌํ๋ฉด ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค. ๋์ ์ค์์ ์ฌ์ง๊ฐ ์์ฃ .
์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํด์ ๋ฅผ ํด์ผ ํ๋ ๊ฒ์ C++ ๋ฌธ๋ฒ์ ๋จ์ ์ ๋๋ค. ๋ฌผ๋ก C++์ ๊ฒฝ์ฐ์๋ ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฐ๋ฉด ๋ณด๊ฐ๋๊ธด ํ์ง๋ง, ๊ฐ์ ๋ ๊ท์น์ ์๋๋๋ค. ๋ฐ๋ผ์ C++์ ํ์ค์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ท์น์์๋ ์์ฐํ ๋จ์ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ delete ํค์๋๋ฅผ ํ์ฉํ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ถ๋ถ์ ๋๋ฝํ๋ค๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
์์ ์ฝ๋์์ my_object
๋ use_my_class
ํจ์ ๋์์ ์๋์ผ๋ก ์๋ฉธํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋ฉ๋๋ค. ์ด์ฒ๋ผ Rust์ ์์ ๊ถ ์์คํ
์ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ฌ์ค ์ด๋ฌํ ๊ท์น์ C++์ ์ค๋งํธ ํฌ์ธํฐ, ๊ทธ๋ฆฌ๊ณ ์๋ฐ ๋ฑ ๋ ํผ๋ฐ์ค ์นด์ดํ
๊ธฐ๋ฐ์ Garbage Collection์ผ๋ก ์ ๊ตฌํ๋์ด ์์ต๋๋ค. ์๋ค๋ฅผ ๊ฒ ์๋ค๊ณ ๋๋ ์๋ ์๊ฒ ์ฃ .
๊ทธ๋ฌ๋ ์ฐจ์ด๊ฐ ์๋ค๋ฉด, Rust๊ฐ ์ง๊ธ๋ณด๋ค ์ฃผ๋ชฉ์ ๋ ๋ฐ์์ ๊ฒ๋๋ค. Rust์ ์์ ๊ถ ์์คํ ์ ๋ํด ๋ ์์ธํ ์์๋ด ์๋ค.
2. ์๋ช ์ฃผ๊ธฐ์ ์์ ๊ถ ์์คํ
C++์์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ์์ด๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ํ, ๋์ผํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ๋ฌ ํฌ์ธํฐ๊ฐ ์ฐธ์กฐํ ๋ ๋ฐ์ํ ์ ์๋ ๋๊ธ๋ง ํฌ์ธํฐ(Dangling Pointer, ์ฃผ์ธ ์์ ํฌ์ธํฐ) ๋ฌธ์ ๋ ์กด์ฌํฉ๋๋ค.
Rust๋ ์์ ๊ถ ์์คํ ์ ํตํด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ์ฌ๊ธฐ์ **์์ ๊ถ(Ownership)**์ด๋, ๊ฐ ๊ฐ์ ์ค์ง ํ๋์ ์์ ์๋ง ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์์ ์๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๊ฐ์ ์๋์ผ๋ก ํด์ ๋๋ค๋ ๊ฒ์ ๋ปํฉ๋๋ค.
์ด๋ฌํ ์์คํ ์ ๋น๋ฆผ๊ณผ ์๋ช ์ฃผ๊ธฐ๋ก ๊ตฌํ๋์ฃ .
- ๋น๋ฆผ(Borrowing): ๊ฐ์ ์ฐธ์กฐํ ๋๋ ๋ถ๋ณ ์ฐธ์กฐ(
&T
)์ ๊ฐ๋ณ ์ฐธ์กฐ(&mut T
)๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ์๋ช ์ฃผ๊ธฐ(Lifetime): ์ฐธ์กฐ์ ์ ํจ ๊ธฐ๊ฐ์ ์ปดํ์ผ ํ์์ ๊ฒ์ฌํ์ฌ ์์ ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
C++์์๋ ์ฐธ์กฐ๋ฅผ ํตํด ๋น๋ฆผ์ ๊ตฌํํ์ง๋ง, Rust์์๋ ๋ถ๋ณ ์ฐธ์กฐ(&T
)๋ก ๋น๋ฆผ์ ๊ตฌํํ๊ณ ์์ ๊ถ์ ์ฎ๊ธฐ์ง ์์ต๋๋ค. ๋ฌด์๋ณด๋ค ์ด๋ฌํ Rust์ ์์ ๊ถ ์์คํ
๊ณผ ์๋ช
์ฃผ๊ธฐ ๊ท์น์ ์ปดํ์ผ ํ์์ ์ฐธ์กฐ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ์ฌ ์์ ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
3. ๋ฐ์ดํฐ ๊ฒฝํฉ(Race) ๋ฐฉ์ง
Rust์ ์์ ๊ถ ์์คํ ๊ณผ ์๋ช ์ฃผ๊ธฐ ๊ฐ๋ ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์์ ์ฑ์์ ๋ง์ ์ฅ์ ์ ์ ๊ณตํฉ๋๋ค. ํนํ, Rust์ ํ์ ์์คํ ๊ณผ ๋น๋ฆผ ๊ฒ์ฌ๊ธฐ(Borrow Checker)๋ ๋ฐ์ดํฐ ๊ฒฝํฉ์ ๋ฐฉ์งํจ์ผ๋ก์จ ์์ ํ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ์ฃ .
๋ฐ์ดํฐ ๊ฒฝํฉ์ด๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋๋ค. ์ด๋ฐ ๋ฐ์ดํฐ ๊ฒฝํฉ์ด ๋ฐ์ํ๋ฉด ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ ํ๋ก๊ทธ๋จ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. Rust๋ ์ปดํ์ผ ํ์์ ๋ฐ์ดํฐ ๊ฒฝํฉ์ ๋ฐฉ์งํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ก์จ ๋์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ๋์์ ์ถ๊ตฌํ ์ ์์ต๋๋ค.
์ฝ๋ ์๋จ์ Arc
, Mutex
๊ฐ ๋ณด์ด์๋์? Arc
(Atomic Reference Counting) ๊ฐ๋
์ ์ฌ๋ฌ ์ค๋ ๋ ๊ฐ์ ์์ ๊ถ์ ์์ ํ๊ฒ ๊ณต์ ํ ์ ์๊ฒ ํฉ๋๋ค. ๋ํ Mutex
๋ ์ํธ ๋ฐฐ์ ๋ก ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํฉ๋๋ค.
์ด์ฒ๋ผ Rust์ ํ์
์์คํ
์ Arc์ Mutex๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๊ฒฝํฉ์ ๋ฐฉ์งํฉ๋๋ค. Arc
๋ ์์ ํ๊ฒ ์ฐธ์กฐ๋ฅผ ๊ณต์ ํ๊ณ , Mutex
๋ ๋ฐ์ดํฐ ์ ๊ทผ์ ๋๊ธฐํํ์ฌ ๊ฒฝํฉ์ ๋ฐฉ์งํฉ๋๋ค.
4. ์์ ๊ถ๊ณผ ๋น๋ฆผ ์์คํ ์ ์์ ์ฑ
Rust์ ์์ ๊ถ๊ณผ ๋น๋ฆผ ์์คํ ์ ๋ฐ์ดํฐ ๊ฒฝํฉ์ ๋ฐฉ์งํ ๋ฟ๋ง ์๋๋ผ, ์ปดํ์ผ ํ์์ ๋ฐ์ดํฐ ์ ๊ทผ์ ์์ ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ด๋ ๋ฐํ์์ ๋ฐ์ํ ์ ์๋ ๋ง์ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํฉ๋๋ค.
ํนํ Rust์ ๋น๋ฆผ ๊ท์น์ ๋ถ๋ณ ์ฐธ์กฐ(&T
)์ ๊ฐ๋ณ ์ฐธ์กฐ(&mut T
)๋ฅผ ๋ช
ํํ๊ฒ ๊ตฌ๋ถํฉ๋๋ค. ์ด๋ฌํ ๊ท์น์ผ๋ก ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ๋ฐ์ดํฐ ๊ฒฝํฉ์ ๋ฐฉ์งํฉ๋๋ค.
Rust์์ ๋ถ๋ณ ์ฐธ์กฐ์ ๊ฐ๋ณ ์ฐธ์กฐ๋ ๋์์ ์กด์ฌํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ์์ ํ ๋์์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ปดํ์ผ๋ฌ ์ญ์ ์ด๋ฌํ ๊ท์น์ ๊ฐ์ ํ์ฌ, ๋ถ๋ณ ์ฐธ์กฐ์ ๊ฐ๋ณ ์ฐธ์กฐ๊ฐ ๋์์ ์กด์ฌํ์ง ์๋๋ก ํฉ๋๋ค.
5. Send
์ Sync
ํธ๋ ์
Rust์ Send
์ Sync
ํธ๋ ์์ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์์ ์์ ์ฑ์ ๋ณด์ฅํ๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๋ง์ฝ ํ์
์ด Send ํธ๋ ์์ ๊ตฌํํ๋ฉด, ํด๋น ํ์
์ ๊ฐ์ด ๋ค๋ฅธ ์ค๋ ๋๋ก ์์ ํ๊ฒ ์ด๋ํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ฉด Sync ํธ๋ ์์ ๊ตฌํํ๋ฉด, ํด๋น ํ์
์ ๊ฐ์ด ์ฌ๋ฌ ์ค๋ ๋์์ ๋์์ ์ ๊ทผํ ์ ์์ฃ .
์ ์ฝ๋์์ vec![1, 2, 3]
์ Send
ํธ๋ ์์ ๊ตฌํํ๋ฏ๋ก ์ค๋ ๋ ์ฌ์ด๋ฅผ ์์ ํ๊ฒ ์ด๋ํ ์ ์์ต๋๋ค. ๋ํ Rust ์ปดํ์ผ๋ฌ๋ Send
์ Sync
ํธ๋ ์์ผ๋ก ์ค๋ ๋ ๊ฐ ๋ฐ์ดํฐ ์ด๋๊ณผ ๊ณต์ ์ ์์ ์ฑ์ ๊ฒ์ฌํฉ๋๋ค.
6. ์์ ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ
Rust๋ ์ฌ๋ฌ ๋๊ตฌ์ ํจํด์ ์ ๊ณตํด **์์ ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ(Fearless Concurrency)**๋ฅผ ์คํํฉ๋๋ค. ์ด๋ ๊ฒ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ ๊ฒฝํฉ์ด๋ ๋์์ฑ ๋ฒ๊ทธ๋ฅผ ๋๋ ค์ํ์ง ์๊ณ , ๋ณ๋ ฌ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ๋์์ค๋๋ค. Arc
, Mutex
, RwLock ๋ฑ์ด ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์์ ๋ฐ์ดํฐ์ ์์ ํ ๊ณต์ ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ฉฐ, ์ฑ๋(Channel)์ด ์ค๋ ๋ ์ฌ์ด ํต์ ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
Rust๋ฅผ ์ง๊ธ ๋ฐฐ์๋ ๋ ๊น์?
Rust๋ ๋ฐฐ์ฐ๊ธฐ ์ฌ์ด๊ฐ์?
Rust๋ ๋ฐฐ์ฐ๊ธฐ ์ฌ์ด ์ธ์ด๋ ์๋๋๋ค. ๊ทธ๋ฌ๋ Rust๋ฅผ ์ตํ ์ฌ๋์ด ๋ง์์ก๊ณ , ์ ์ ๋ ๋์ด๋๊ณ ์๋ ๊ฑธ ๋ณด์์ ๋, ์๊ฐ์ ์ถฉ๋ถํ ๋ค์ด๋ฉด ํ์ตํ ์ ์๊ฒ ์ฃ . ํนํ ๋ ํนํ ์์ ๊ถ ์์คํ ๊ณผ ์๋ช ์ฃผ๊ธฐ ๊ท์น์ด ์ฒ์์๋ ์ดํดํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋งํผ ๊ฐ๋ ์ ์ตํ์ ๋, ์์ ํ๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ํฐ ๋์์ด ๋ฉ๋๋ค.
์์ผ๋ก๋ Rust์ ์ธ๊ธฐ๊ฐ ๋ ๋์์ง๊น์?
์์ ๋ณด์๋ฏ Rust๋ ์ด๋ฏธ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ต๋๋ค. ๊ทธ ์ธ๊ธฐ๋ ๊ณ์ ๋์์ง ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์์ ์ฑ๊ณผ ์ฑ๋ฅ, ๋ณ๋ ฌ ์ฒ๋ฆฌ ํนํ ๋๋ถ์ ๋ค์ํ ์ฐ์ ๋ถ์ผ์์ Rust๋ฅผ ์ฑํํ๊ณ ์๊ธฐ ๋๋ฌธ์ด์ฃ .
Rust ์ฌ๋จ์ ์ ๊ทน์ ์ธ ์ง์๊ณผ ํ๋ฐํ ์ปค๋ฎค๋ํฐ ํ๋, ์ฌ๋ฌ ๋น ํ ํฌ ๊ธฐ์ ๊ณผ ์ ํ์์ ์ฌ์ฉํ๋ ์ถ์ธ ์ญ์ ์ด๋ฅผ ๋ท๋ฐ์นจํฉ๋๋ค. C++์ ์ฌ์ ํ ๋ง์ด ์ฌ์ฉํ๋ ๋ง์ดํฌ๋ก์ํํธ๋ฅผ ๋น๋กฏํด์ ๋ฉํ, ๋์ฌ ๋ฑ์ด Rust๋ฅผ ๋ค์ํ ๋ก์ฐ ๋ ๋ฒจ ๊ตฌํ ์ธ์ด๋ก ์ฑํํ๊ณ ์์ฃ . (์ฐธ๊ณ ๊ธ)
ํ๊ตญ์์๋ ๋์ธ๋ก ๋ณด๊ธฐ ์ด๋ ต์ต๋๋ค
๊ทธ๋ฌ๋ ํ๊ตญ์์๋ ์์ง Rust๋ฅผ ๋์ค์ ์ผ๋ก ๋๋ฆฌ ์ฐ๊ณ ์์ง ์์ต๋๋ค. ์ฌ์ ํ Java, JavaScript, Python ๋ฑ์ด ์ฃผ๋ฅ๋ก Rust๋ฅผ ์ฑํํ ์ฌ๋ก๋ ์๋์ ์ผ๋ก ๋งค์ฐ ์ ์ต๋๋ค. ๋ก์ฐ ๋ ๋ฒจ์ SDK ๋ฑ์ ๋ง๋๋ ๊ธฐ์ ๋ค๋ ๋๋ถ๋ถ Rust๋ณด๋ค๋ C++์ ์ฌ์ฉํ๋ ํธ์ด๊ณ ์. ๊ทธ๋ฌ๋ ํ๊ตญ์์ Rust๋ฅผ ๋ฐฐ์ด๋ค ํด๋ ์ด์ง์ ์ง์ ์ ์ธ ๋์์ด ๋๊ธฐ๋ ์ด๋ ต๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ง๋ง ๋ฐฐ์ ๋๋ค๋ฉด ๋ค์ํ ์ด๋์ ์ป์ ์ ์์ต๋๋ค
Rust๋ ์์คํ ํ๋ก๊ทธ๋๋ฐ, ์น ๊ฐ๋ฐ, ์๋ฒ ๋๋ ์์คํ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ ์ธ์ด์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ๊ณผ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์์ ์ฑ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ด ์์ฃผ ์ค์ํ ์์์ด๊ธฐ ๋๋ฌธ์ด๊ธฐ๋ ํ์ฃ .
ํ์ง๋ง ์น ๊ฐ๋ฐ์์ ๊ฐ์ ๋ ์๋ค๋ ์ ์ ๋ชจ๋ฅด์๋ ๋ถ๋ค์ด ๋ง์๋ฐ์. Rust๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์ํ ์น ํ๋ ์์ํฌ (flosse/rust-web-framework-comparison
)๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. Rust๋ฅผ ๋ฐฐ์ฐ๋ค ๋ณด๋ฉด ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ๋ํ ์ธ์ฌ์ดํธ, ์ฑ๋ฅ ์ด์๋ฅผ ํด๊ฒฐํ ์ถ๊ฐ์ ์ธ ์ ํ์ง, ์์ ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๋๋ค๋ฅธ ๋ฐฉ๋ฒ ๋ฑ์ ์ตํ ์ ์์ต๋๋ค. ๋ํ ํด๋ผ์ฐ๋ ์๋น์ค๊ฐ ์๊ทผ์ฌ์ฉ ์๊พธ๋ง ๋น์ธ์ง๋ ์ด ์์ ์ ์ ์๋ฏธํ ๊ธ์ ์ ์๋ฏธ๋ ์์ต๋๋ค. ์๋น์ค์ ํธ๋ํฝ์ด ๋์ด๋ ์๋ก ์ฑ๋ฅ ์ด์๋ฅผ ํด๊ฒฐํ๋ ๊ฒ๋ง์ผ๋ก ํฐ ๋น์ฉ์ ์๋ ์ ์์ผ๋๊น์.
๋ง์น๋ฉฐ
์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค. Rust๋ ๋ฐ์ด๋ ์์ ์ฑ๊ณผ ๋์ ์ฑ๋ฅ, ์์ ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ํ๋์ ์ธ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค. ์ค๋ฆฌ์ฝ ๋ฐธ๋ฆฌ ์ฃผ์ ๊ธฐ์ ๋ค๋ก๋ถํฐ ํฐ ๊ด์ฌ์ ๋ฐ๊ณ ์์ผ๋ฉฐ ์์ผ๋ก๋ ์ธ๊ธฐ๊ฐ ๊ณ์ ์ฆ๊ฐํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ๋ฌผ๋ก ํ๊ตญ์์๋ ์์ง ๋์ค์ ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋์ง ์์ง๋ง, Rust๋ฅผ ๋ฐฐ์๋๋ค๋ฉด ๋ค์ํ ๋ถ์ผ์์ ๊ฒฝ์๋ ฅ์ ๊ฐ์ถ ์ ์๋ค๊ณ ๋ณด์ ๋๋ค.
๋ฌด์๋ณด๋ค ์ด ์ธ์ด๋ ์ถฉ๋ถํ ์ฑ์ํ ์ธ์ด์ ๋๋ค. ํนํ Rust๋ฅผ ๋ฐฐ์ฐ๋ ๊ณผ์ ์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ดํดํ ์ ์๋ค๋ฉด, ์ฌ๋ฌ๋ถ๋ ํน๋ณํ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ์ ์์ ๊ฒ๋๋ค.