[Rust] crate: sqlx
sqlx๋ Rust์ ๋ํ์ ์ธ DB์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ค.
ORM์ ์๋๊ณ , ๊ทธ๋ฅ ๊ทธ.. ๋ง์ด๋ฐํฐ์ค ๊ฐ์ ์ฟผ๋ฆฌ ๋งคํผ? ์คํ๊ธฐ๋ค.
ORM ๊ฐ์ ๊ฑฐ์ฐฝํ ๊ธฐ๋ฅ์ ์๋ค.
๊ทธ๋ฅ ์ฟผ๋ฆฌ์ ๊ตฌ๋ฉ ๋ซ๊ณ ์ฃผ์
ํด์ ์ฐ๊ณ , ๋ฐํ๊ฐ ์ข ํธํ๊ฒ ๋ฐ์ธ๋ฉํ๊ณ , async ๊ธฐ๋ฅ์ด ์ ์ง์๋๋ ๊ฒ ์ ๋๋ค.
๊ฐ๋จํ๊ฒ ์ฐ๊ธฐ๋ ์ข๋ค.
์ข ์์ฑ
์ข
์์ฑ์ ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ๊ตฌ์ฑํ ์ ์๋ค.
tokio๋ฅผ ์ฐ๊ณ , postgresql๋ฅผ ์ธ๊ฑฐ๋ผ๋ฉด ์ด๋ ๊ฒ ๊ตฌ์ฑํ๋ฉด ๋๋ค.
[dependencies]
tokio = { version = "1.21.0", features = ["full", "time"] }
sqlx = { version = "0.7", features = [ "runtime-tokio", "postgres" ] }์ปค๋ฅ์ ๊ตฌ์ฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ ์ ๋ณด๋ฅผ ์ ์ ํ ์ ์ํ๊ณ

PgPoolOptions๋ฅผ ์ฌ์ฉํด์ ์ปค๋ฅ์
ํ์ ์์ฑํ๋ค.
์ด๊ฑด ํ๋ฒ๋ง ๋ง๋ค๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด์์ ๊ณต์ ํ๋ฉด์ ์ฌ์ฉํด์ผ ํ๋ค.
axum ๊ฐ์ ์๋ฒ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Extension ๊ฐ์๊ฑธ ์ฌ์ฉํด์ Arc๋ก ๊ฐ์ธ ์ฌ์ฉํ ๊ฒ์ด๋ค.
์ฟผ๋ฆฌ ์คํ
์ฌ์ฉ๋ฒ์ ๋ญ, ์ด๋ ค์ธ๊ฒ ๋ฑํ ์๋ค.
์ฟผ๋ฆฌ๋ฅผ ๋ฌธ์์ด๋ก ์ ์ํ๊ณ , ์ฃผ์
ํ ์์น์๋ $๋ก ๊ตฌ๋ฉ์ ๋ซ๋๋ค.
๊ทธ๋ฆฌ๊ณ bind๋ก ๊ตฌ๋ฉ์ ๊ฐ์ ๋ฃ์ ๋ค์ fetch๋ฅผ ์ฌ์ฉํด์ ์คํ, ๊ฐ์ ๊ฐ์ ธ์ค๋ฉด ๋๋ค.

๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ์ ๊ฐ์ ธ์ฌ ๊ฒ์ด๋ค.

๊ตฌ๋ฉ์ด 2๊ฐ ์ด์์ผ ๋๋ ๊ทธ๋ฅ ์ด๋ ๊ฒ ํ๋ฉด ๋๋ค.
๊ฐ์ ๋ฐ๋ ์ธก์์ ํํํ์
์ ์ ๋ง์ถฐ์ฃผ๊ณ , bind๋ก ๊ตฌ๋ฉ ๊ฐ์๋งํผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.


์ปดํ์ผํ์ ๊ฒ์ฆ
์ปดํ์ผํ์ ๊ฒ์ฆ์ sqlx์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ค ํ๋๋ค.
์ค์ DB ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ์ฆํ๊ณ , ํ์
๊ณผ ์ผ์นํ๋์ง๋ ๊ฒ์ฆ์ ํ๋ค.
์๋ฅผ ๋ค์ด ์ด๋ฐ ํ ์ด๋ธ์ด ์๋ค๊ณ ํ๋ฉด

ํ ์ด๋ธ ๋ฆฌํด์ ๋ํ ํ์ ์ ์ ์ํ๊ณ

์ด๋ฐ์์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.

๊ทธ๋ฌ๋ฉด ์ ํ์
์ ๊ธฐ๋ฐ์ผ๋ก ํด์ ์๋์ผ๋ก ๋ฐ์ธ๋ฉ์ ํด์ค ๊ฒ์ด๋ค.
์ด ๊ธฐ๋ฅ์ ๊ฐ๋ ฅํ ์ ์ ์ฟผ๋ฆฌ์ ๋ฆฌํดํ์ ์ ์ผ์น๋๋ ๊ฒ์ฆ์ ํด์ฃผ๊ณ

์ฌ์ง์ด ์ค์ DB์ ์ ์๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปดํ์ผํ์์ ๊ฒ์ฆ์ ํด์ค๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์กด์ฌํ์ง ์๋ ์ปฌ๋ผ์ ์ฟผ๋ฆฌ์ ์ฌ์ฉํ๋ฉด ์๋ฌ๋ฅผ ๋ฑ๋๋ค.
๊ทผ๋ฐ ์ด๊ฑธ ์ด๋ป๊ฒ ์ปดํ์ผํ์์ ์ฒ๋ฆฌํ๋๊ฑฐ์ง? ์ ๊ธฐํ๊ธฐ๋ ํ๋ค.