[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์— ์ •์˜๋œ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปดํŒŒ์ผํƒ€์ž„์— ๊ฒ€์ฆ์„ ํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋ž˜์„œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปฌ๋Ÿผ์„ ์ฟผ๋ฆฌ์— ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฑ‰๋Š”๋‹ค.

๊ทผ๋ฐ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผํƒ€์ž„์— ์ฒ˜๋ฆฌํ•˜๋Š”๊ฑฐ์ง€? ์‹ ๊ธฐํ•˜๊ธฐ๋„ ํ•˜๋‹ค.



์ฐธ์กฐ
https://github.com/launchbadge/sqlx