[Rust] Tokio ์ดํด๋ณด๊ธฐ
tokio๋ Rust ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ๋น๋๊ธฐ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
์ฝ๊ฒ๋งํด Go์ ๊ณ ๋ฃจํด์ ๋ฌ์คํธ๋ก ํฌํ
ํ๋ค๊ณ ๋ด๋ ๋๋ค.
๋ฉํฐ์ค๋ ๋ฉ๊ณผ ๋ณํ์ฑ์ ์์ฃผ ํจ์จ์ ์ด๊ณ ํธ๋ฆฌํ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ๋์์ค๋ค.
์์คํ
๊ธ ์ธ์ด๋ค์๋ ์ด๋งํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฑํ ์์ด์, ์ฌ๋ฌ ๊ณ ์ฑ๋ฅ ์์คํ
์ ์ฝ์ด์ ๋ง์ด ๋ค์ด๊ฐ๋ ์ค์ด๋ค.
์๋ฅผ ๋ค์ด, ๊ทธ ์ ๋ช
ํ AWS์ ๋ด๋ถ์์คํ
์๋ tokio์ ๋ฌ์คํธ๊ฐ ์์ฐจ๊ฒ ๋ฐํ์๊ณ , ์ง๊ธ๋ ๋ค์ด๊ฐ๊ณ ์๋ค.
async-std๋ผ๋ ๋์ฒด์ฌ๋ ์๋๋ฐ, ์ด๊ฑด ์ฑ๋ฅ์์ ์ด์ ์ด ์๋๊ฑด ์๋๊ณ ์ฑ๋ฅ์ฐพ์ผ๋ ค๋ฉด ๊ทธ๋ฅ tokio ์ฐ๋ฉด ๋๋ค.
์ผ๋จ ์ข
์์ฑ์ ๋จผ์ tokio๋ฅผ ์ถ๊ฐํด๋ณด์.
์ด๊ฑด feature ์์ค์ ์ธ๋ฐํ๊ฒ ์กฐ์ ํ ํ์๊ฐ ์์ด์, cargo add๋ณด๋จ ์์ผ๋ก ์ณ์ฃผ๋๊ฒ ์ข๋ค.

๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด Hello World ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋ค.
tokio::main๊ณผ async๋ฅผ ๋ฌ์์ ๋ฃจํธ ์์ญ์์๋ ๋น๋๊ธฐ ํธ๋ค๋ง์ ํด์ค์ ์๊ฒ ํ๊ณ , ์์ธ์ฒ๋ฆฌ๊ฐ ํธํ๋๋ก Result๋ฅผ ๋ฐํํ์
์ผ๋ก ํ๋ค.

๊ทธ๋ผ ์ ์คํ์ด ๋ ๊ฒ์ด๋ค.

์ค๋ ๋ ์ฌ๋ฆฌ๊ธฐ
tokio๋ ๋น๋๊ธฐ ๋ฐํ์์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋์ ๋น๋๊ธฐ์์
์ ํจ์จ์ ์ผ๋ก ์ ์งํ๊ธฐ ์ํด, ๋ค์ดํฐ๋ธ ์ค๋ ๋๋ณด๋ค๋ ๋ฐํ์ ๋จ์์ ๊ฒฝ๋ ์ค๋ ๋๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
๊ฒฝ๋์ค๋ ๋ ํธ์ถ์ task ๋ชจ๋์ spawn ํจ์๋ก ์ฒ๋ฆฌํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ async ๋ธ๋ญ์ผ๋ก ์ํํ ๋ก์ง์ ์ ๋ฌ๋ฐ๋๋ค.
๊ทธ๋ฆฌ๊ณ async/await ๋ฌธ๋ฒ์ผ๋ก ์ ํธ๋ค๋งํ๋ฉด ๋๋ค.
์ธํ์ ์ผ๋ฐ ์ค๋ ๋์ ๋ค๋ฅผ๊ฒ์ด ๋ณ๋ก ์๋ค.
await ํตํฉ: join
์ฌ๋ฌ ์ค๋ ๋๋ฅผ ํ๋ฒ์ awaitํ๊ณ ์ถ๋ค๋ฉด join ๋งคํฌ๋ก ๋ฑ์ ์ฌ์ฉํ๋ฉด ๋๋ค.

๋๊ธฐํ ๋๊ตฌ: ์ฑ๋
tokio๋ ๊ทธ๋ฅ ์ค๋ ๋ ์๋๊ฒ๋ง ์ฃผ๋๊ฒ ์๋๋ผ ๋๊ธฐํ ๋๊ตฌ๋ค๋ ์ ๊ณตํ๋ค.
๊ทธ ๊ฐํธํ ๋๊ตฌ๋ค ์ค ํ๋๊ฐ ๋ฐ๋ก ์ฑ๋์ด๋ค.
๋ค๋๋ค์ฑ๋์ธ broadcast,
๋ค์ค์์ฐ์์ ๋จ์ผ์๋น์์ธ mpsc,
๋จ์ผ์ฑ๋์ธ oneshot,
๋จ์ผ์์ฐ์์ ๋ค์ค์๋น์์ธ watch๊ฐ ์ ๊ณต๋๋ค.
์ด๋ฐ๊ฑฐ๋ ๋ณ๋ ํฌ์คํธ์์ ์์ธํ ๋ค๋ฃจ๊ณ , oneshot์ ์์๋ง ๋๊ฐ ๋ณด๊ฒ ๋ค.
์ด๊ฑด ๋ง๊ทธ๋๋ก ์ค๋ ๋๊ฐ์ ํ๋ฒ ๋์ง๊ณ ํ๋ฒ ๋ฐ์ ์ ์๋ ๋จ์ํ ์ฑ๋์ด๋ค.


๊ทธ๋ฆฌ๊ณ ํ์ผ ์ฐ๊ธฐ, ๋คํธ์ํน ๋ฑ์ ๊ธฐ๋ณธ์ ์ธ ์
์ถ๋ ฅ๊ธฐ๋ฅ๋ ๊ทธ๋ฅ ์ ๊ณตํ๋ค.
io๊ฐ ๋ง์ ๊ฒฝ์ฐ์๋ ์ด๋ฐ๊ฒ๋ค๋ก๋ง ์จ์ ํธ๋ค๋งํ๋๊ฒ ํจ์จ์ ์ด๊ฒ ๋ค.


๊ทธ๋ ๋ค.