ITstudy

์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š” Prisma ๋ช…๋ น์–ด ์ •๋ฆฌ

martinooo 2024. 5. 9. 14:37
728x170

๐Ÿคท‍โ™‚๏ธ Prisma ๋ช…๋ น์–ด ๋ณธ๋ก ์— ์•ž์„œ Prisma๋ž€?


Nest JS ํ”„๋ ˆ์ž„์›Œํฌ์™€ Prisma ORM์„ ํ™œ์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ Prisma๋Š” Node JS ๊ธฐ๋ฐ˜์— ํ”„๋ ˆ์ž„์›Œํฌ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ƒํ˜ธ์ž‘์šฉ์ด ์ž˜๋˜๋ฉฐ Prisma + DB ์—ฐ๋™์œผ๋กœ ๋” ํŽธํ•˜๊ฒŒ schema.prisma ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ชจ๋ธ, ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋ฉด์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ ์•Œ์•„๋‘๋ฉด ์ข‹์€ Prisma ๋ช…๋ น์–ด๋ฅผ ์ •๋ฆฌํ–ˆ๋‹ค.

 

Prisma์™€ ์ƒํ˜ธ์ž‘์šฉ์ด ์ข‹์€ Nest JS ์•Œ์•„๋ณด๊ธฐ

 

https://cometruedream.tistory.com/132

 

Nest.js - ๊ฐœ๋… & ์ดˆ๊ธฐ์…‹ํŒ…

๐Ÿคณ Nest.js ๋ž€? Nest.js๋Š” ํšจ์œจ์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ Node.js ์„œ๋ฒ„ ์ธก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. JavaScript๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  TypeScript๋กœ ๊ตฌ์ถ•๋˜์–ด ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•˜๋ฉฐ OOP, FP, FRP ์š”์†Œ๋ฅผ ๊ฒฐํ•ฉ

cometruedream.tistory.com

 

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์€ ๊ฐ์ฒด์™€ ๋ชจ๋ธ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค.

 

300x250

 

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 ํ”„๋กœ์„ธ์Šค

  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ ์‚ญ์ œ
  2. ์Šคํ‚ค๋งˆ ๋‹ค์‹œ ์ƒ์„ฑ
  3. ๋ชจ๋“  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ ์šฉ
  4. 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

 

NestJS Lifecycle (์ƒ๋ช…์ฃผ๊ธฐ) ๊ฐœ๋…

๐Ÿคท‍โ™‚๏ธ ๋ณธ๋ก ์— ์•ž์„œ Nest JS ๊ฐœ๋…?Nest JS๋Š” Node JS ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์„œ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ƒ๋‹นํžˆ ์˜ค๋žซ๋™์•ˆ Express ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—์„œ ์••๋„์ ์ธ ์ 

cometruedream.tistory.com

 

 

https://cometruedream.tistory.com/242

 

๋ฆฌ์•กํŠธ Vite Proxy ํ™œ์šฉํ•œ CORS ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

๐Ÿคท‍โ™‚๏ธ ๋ณธ๋ก ์— ์•ž์„œํ”„๋ก ํŠธ์—”๋“œ ๋ฒˆ๋“ค๋Ÿฌ ๊ฐœ๋…๊ณผ webpack vs vite ๋น„๊ต์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ๊ธ€์„ ๋ณด์‹œ๋ฉด ๋” ๋งŽ์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค^^ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ฒˆ๋“ค๋Ÿฌ ๊ฐœ๋…๊ณผ webpack vs vite ๋น„๊ตhttps://comet

cometruedream.tistory.com

 

 

https://cometruedream.tistory.com/241

 

React ํด๋”๊ตฌ์กฐ FSD ๊ธฐ๋Šฅ ๋ถ„ํ™œ ์„ค๊ณ„ ์•„ํ‚คํ…์ฒ˜

๐Ÿคท‍โ™‚๏ธ ๋ณธ๋ก ์— ์•ž์„œํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ ํด๋” ๊ตฌ์กฐ, ์„ค๊ณ„์— ๋Œ€ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ์–ด๋ ต๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์— React FSD ํด๋”๊ตฌ์กฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•  ์˜ˆ์ •์ด๋ผ์„œ FSD ์•„ํ‚คํ…

cometruedream.tistory.com

 

๊ทธ๋ฆฌ๋“œํ˜•