[Node.js] Prisma๋? (feat. ์ฌ์ฉํด์ผ ๋๋ ์ด์ )
์๋ ํ์ธ์. Foma ์ ๋๋ค!
์ง๋ Sequelize, TypeORM๊ณผ ๊ฐ์ ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ด์ด์ Prisma๋ผ๋ ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
(ํน์ ORM์ ๋ํด ๋ชจ๋ฅด์๋ ๋ถ๋ค์ด ์๋ค๋ฉด ์ฌ๊ธฐ ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์!)
Prisma๋?
ํ๋ฆฌ์ฆ๋ง ๊ณต์ ํํ์ด์ง์์ ์๋์ ๊ฐ์ด ์๊ฐํ๊ณ ์์ต๋๋ค.
"์ฐ๋ฆฐ ์ฐจ์ธ๋ Node.js์ TypeScript ORM์ผ"
์๋์ ๊ฐ์ด 3๊ฐ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Prisma Client: Node.js์ Typescript๋ฅผ ์ํ ์๋ ์์ฑ๊ณผ ์์ ํ ํ์ ์ฟผ๋ฆฌ ๋น๋
- Prisma Migrate: ๋ง์ด๊ทธ๋ ์ด์ ์์คํ
- Prisma Studio: ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ํธ์งํ ์ ์๋ GUI ํธ์ง๊ธฐ
Prisma Client๋ REST API, GraphQL API, gRPC API๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ํ ๊ณต์ ๋ฌธ์์์ ์๋์ ๊ฐ์ ํน์ง์ ๋งํด์ฃผ๋๋ฐ, ๊ฐ๋จํ๊ฒ ํด์ํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
"์ฐ๋ฆฐ ๋ง์ ๋ฌธ์ ์ ๋ค์ ๊ฒช๋ ๋ค๋ฅธ ORM๊ณผ๋ ๋ฌ๋ผ. ๊ธฐ์กด ORM์ ๊ฐ์ฒด ์งํฅ ๋ฐฉ์์ผ๋ก ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋งคํํ์ง. ๊ทธ๊ฒ ๋ฐ๋ก ๋ฌธ์ ์ ์ด์ผ. ํ์ง๋ง ์ฐ๋ฆฐ Prisma shcema๋ก ์ ์ธ์ ์ธ ๋ชจ๋ธ์ ์ ์ํด์ ๋ณต์กํ ๋ชจ๋ธ ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ๋๋ฐ ์์ ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์์ด"
Why Prisma?
์ ๋ ๊ณต์ ๋ฌธ์์์ ์ด ๋ถ๋ถ์ด ์ ์ผ ์๋ฟ์๋๋ฐ์.
๊ฐ๋จํ๊ฒ ์์ฝํ์ฌ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ๋จผ์ ํ๋ฆฌ์ฆ๋ง๊ฐ ์ถ๊ตฌํ๋ ๊ฒ์ "๊ฐ๋ฐ์์ ์์ฐ์ฑ" ์ ๋๋ค.
์์์ ์ผ๋ก SQL์ ์์ฑํ๋ ๊ฒ์ด๋, ๊ธฐ์กด์ ORM์ ๊ฐ๋ฐ์์ ์์ฐ์ฑ์ ๋จ์ด ๋จ๋ฆฐ๋ค๊ณ ์ฃผ์ฅํ๋๋ฐ์.
1. ์์์ SQL ๋ฌธ์ ์
๋จผ์ ์์์ ์ผ๋ก SQL์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฒ๊ฑฐ๋กญ๊ณ ๋ง์ ์ค๋ฒํค๋(์๋ ์ฐ๊ฒฐ, ๋ฐ๋ณต์ ์ธ ์์ฉ๊ตฌ) ๋ฑ์ ๋ฐ์์์ผ ์์ฐ์ฑ์ด ์ ํ๋๊ณ , ๋ฟ๋ง ์๋๋ผ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ํ ํ์ ์์ ์ฑ์ ์ป์ ์๋ ์์ต๋๋ค.
2. ๊ธฐ์กด ORM ๋ฌธ์ ์
๊ทธ ๋ค์์ผ๋ก ๊ธฐ์กด์ ORM์ ์ ์์์ ์ผ๋ก SQL์ ์์ฑํ์ ๋ ๋ฐ์ํ๋ ๋ง์ ๋ฌธ์ ์ ์ ํด์ํ์์ง๋ง, ์ฝ๊ฒ ๋ชจ๋ธ์ ์ถ์ํํ์ฌ ๊ด๊ณํ ๋ฐ์ดํฐ๊ฐ ์ค๋ธ์ ํธ์ ์ฝ๊ฒ ๋งคํ๋ ์ ์๋ค๋ ์๋ชป๋ ๊ฐ์ ์ ๊ธฐ๋ฐ์ ๋๊ณ ์์ด ๋ง์ ๋ณต์ก์ฑ๊ณผ ํจ์ ์ด ๋ฐ์ํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ํ๋ฆฌ์ฆ๋ง๊ฐ ๊ฐ์กฐํ๋ ๊ฒ์ "์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์๋ SQL์ด ์๋ ๋ฐ์ดํฐ์ ๊ด์ฌ์ ๊ธฐ์ธ์ฌ์ผ ํ๋ค." ์
๋๋ค.
๊ฐ๋ฐ์๋ SQL ์ฟผ๋ฆฌ์์ "์ฌ๋ฐ๋ฅธ ์ผ์ ํ๋ ๊ฒ"์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ด์ผ ํ๋ฉฐ, ์ฌ๋ฐ๋ฅธ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ์ถ์ํ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ์ถ์ํ๊ฐ ๊ฐ๋ฐ์์ ์ค์๋ฅผ ๋ฐฉ์งํ๋ ํน์ "๊ฑด์ ํ" ์ ์ฝ์ ๋ถ๊ณผํ๋ค๋ ๊ฒ์ ์๋ฏธํ ์ ์์ต๋๋ค.