๐คทโ๏ธ Prisma ๋ช ๋ น์ด ๋ณธ๋ก ์ ์์ Prisma๋?
Nest JS ํ๋ ์์ํฌ์ Prisma ORM์ ํ์ฉํด์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ Prisma๋ Node JS ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํธ์์ฉ์ด ์๋๋ฉฐ Prisma + DB ์ฐ๋์ผ๋ก ๋ ํธํ๊ฒ schema.prisma ํ๋์ ํ์ผ๋ก ๋ชจ๋ธ, ์คํค๋ง ๊ด๋ฆฌ๋ฅผ ํ๋ฉด์ ๋ง์ด ์ฌ์ฉ๋๋ฉฐ ์์๋๋ฉด ์ข์ Prisma ๋ช ๋ น์ด๋ฅผ ์ ๋ฆฌํ๋ค.
Prisma์ ์ํธ์์ฉ์ด ์ข์ Nest JS ์์๋ณด๊ธฐ
https://cometruedream.tistory.com/132
What is Prisma ORM?
์ถ์ฒ: Prisma ๊ณต์ ๋ฌธ์
์ฐจ์ธ๋ Open Source ORM์ผ๋ก์ Typescript์ Node JS๋ฅผ ์ํ type-safe์ ์๋ํ๋ ์ฟผ๋ฆฌ ๋น๋์ด๋ค.
REST API, GRAPHQL API ๋ฑ NodeJS ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ํ RDBMS, Mongo DB ๋ฑ ์ฐ๋์ด ๊ฐ๋ฅํ๋ค.
*DB ์ฐ๋์ ๋ฒ์ ์ ๋ฐ๋ผ ์ฐจ์ด๊ฐ ์์ ์ ์๋ค.
ORM์ด๋?
ORM(๊ฐ์ฒด - ๊ด๊ณ - ๋งตํ)์ ์ฝ์์ด๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ๋งตํํด ์ฃผ๋ ๊ธฐ์ ์ด๋ค.
์ฝ๊ฒ ์ค๋ช ํ๋ฉด ORM์ ๊ฐ์ฒด์ ๋ชจ๋ธ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๊ธฐ์ ํ๋ ๋๊ตฌ์ด๋ค.
Prisma์ ์ฅ์ ?
Prisma๋ DB์ ์ํธ์์ฉํ๋ ์์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑ ํ์ง ์๊ณ Prisma๋ SQL ์ฟผ๋ฆฌ ์์ฑํ๋ ๊ณผ์ ์ ์์ ์ค์ผ๋ก์จ ๊ธฐ์กด์ ORM๋ณด๋ค ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ๋์ด๋ฉฐ ์ฟผ๋ฆฌ์ ๋ํ ์ ์ด๋ ๋์ผ ์ ์๋ค.
Prisma ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๊ฐ ์์ฑํด์ผ๋๋ SQL ์ฟผ๋ฆฌ๋ฌธ์ด ์ค๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ๋น์ฝ์ ์ผ๋ก ์ค์ด๋ค๊ณ ์ ์ง๋ณด์ ๋ํ ์์ํ๊ฒ ๊ด๋ฆฌํ ์ ์๋ ์ฅ์ ์ด ์๋ค.
์ฅ์ ์ ๋ฆฌ
- Prisma๋ก ์ฟผ๋ฆฌ ์์ ์์ด ๊ฐ๋จํ๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃฐ ์ ์๋ค.
- Typescript๋ฅผ ์ง์ํ์ฌ ํ์ ์์ ์ฑ์ ๋ณด์ฅํ๋ค.
- ์คํค๋ง๋ฅผ ํ์ฉํด์ DB ํ ์ด๋ธ์ ๊ด๋ฆฌํ ์ ์๋ค.
- Prisma ๋ช ๋ น์ด๋ฅผ ํ์ฉํด์ ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋์ด ๊ฐ๋ฅํ๋ค.
๐คทโ๏ธ Prisma ๋ช ๋ น์ด ์ ๋ฆฌ
init
ํ๋ก์ ํธ์ Prisma๋ฅผ ์ฌ์ฉํ๋๋ฐ ํ์ํ ํ์ผ์ ์์ฑํฉ๋๋ค *์ค์
npx prisma init
์์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด prismaํด๋์ 2๊ฐ์ ํ์ผ์ด ์์ฑ๋
- prisma/schema.prisma: ์คํค๋ง model์ ์ ์
- prisma/.env: ํ๊ฒฝ๋ณ์ ํ์ผ
generate
Prisma Client๋ฅผ ์์ฑ & ์ ๋ฐ์ดํธํ๋ค.
npx prisma generate
์์ ๋ช ๋ น์ด๋ schema.prisma ํ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ด๋ ์คํค๋ง ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ์ด ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ Prisma Client๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ค.
migrate
Prisma ์คํค๋ง๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด์ ํ๋ค๋ ์๋ฏธ๋ค.
npx prisma migrate dev
์์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด schema.prisma ํ์ผ์ ์คํค๋ง ๋ณ๊ฒฝ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ ๋ณ๊ฒฝ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ค.
*dev ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ฐ๋ฐ(๋ก์ปฌ) ํ๊ฒฝ์์๋ง ์ฌ์ฉํ๊ฒ ๋ค๋ ์ต์
reset
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋ค์ ์คํค๋ง๋ก ํ ์ด๋ธ๋ก ๋ง๋ ๋ค.
npx prisma db push --force-reset
reset ํ๋ก์ธ์ค
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ์ญ์
- ์คํค๋ง ๋ค์ ์์ฑ
- ๋ชจ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฉ
- seed file ์คํ
์ฝ๊ฒ ์ค๋ช ํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๊ธฐํํ๊ณ ๋ค์ ์คํํ๋ค๋ ์๋ฏธ๋ค.
push
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ฉด์ Prisma Schema ์์ ์ฌํญ ์ ์ฉ
npx prisma db push
*๋ฐ์ดํฐ๊ฐ ์ ์ง๋์ง ์๋ ์ํฉ์์๋ ์ค๋ฅ ๋ฐ์
pull
์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ prisma.schema ํ์ผ๋ก ๊ฐ์ ธ์จ๋ค.
npx prisma db pull
์์ ๋ช ๋ น์ด๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ ๋ณ๊ฒฝ์ด ๋์์ ๋ prisma.schema ํ์ผ์ ์ต์ ์ํ๋ก ์ ์งํ ์ ์๋ค.
๊ทธ ์ดํ๋ก npx prisma generate ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ Prisma Client ์ต์ ์ํ๋ก ์ ์งํ๋ค.
๐คทโ๏ธ ์ ๋ฆฌํ์๋ฉด..
์์ ์ ๋ฆฌํ Prisma ๋ช ๋ น์ด๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์์ผ๋ฉฐ ๋ ๋ค์ํ ๋ช ๋ น์ด๊ฐ ์กด์ฌํ๋ฉฐ ํ๋ก์ ํธ์ ๋ง๊ฒ ์ ํ์ฉํ๋ฉด Prisma ORM์ ํ์ฉํด์ ๋ ํธ๋ฆฌํ๊ณ ํจ์จ์ ์ผ๋ก ์คํค๋ง ๊ด๋ฆฌ์ SQL ์ฟผ๋ฆฌ ์์ฑ ์์ด Prisma ํ์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํด์ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ๋์ด๋ฉฐ ๋ ๋์ ํ์ง์ ์ฝ๋๋ฅผ ์ ์งํด ๋๊ฐ ์ ์๋ค.
์ฌ๋ฐ๋ ์ค๋์ ๋ ๋ณ ์ด์ธ ๋ณด๊ณ ๊ฐ์ธ์!
https://cometruedream.tistory.com/243
https://cometruedream.tistory.com/242
https://cometruedream.tistory.com/241