What is Prisma ? 🌱

https://www.prisma.io/

Prisma λž€,
Node.js 와 TypeScript μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€ νˆ΄ν‚·
μ°¨μ„ΈλŒ€ ORM (Object Relational Mapping) ν”„λ ˆμž„μ›Œν¬μ΄λ‹€.

SQL μ½”λ“œλ₯Ό 쓰지 μ•Šκ³ ,
Javascript(typescript 도 κ°€λŠ₯) μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μˆ˜μ •ν•  수 μžˆλ„λ‘ μ—°κ²°ν•΄μ£ΌλŠ” μ„œλΉ„μŠ€ μ΄κΈ°λ„ν•˜λ‹€.

ORM ?

Prisma λŠ” ORM μ΄μ§€λ§Œ,
κΈ°μ‘΄ ORM κ³Ό 근본적으둜 λ‹€λ₯Έ ORM 이며,
λ°œμƒν•˜λŠ” μ—¬λŸ¬ λ¬Έμ œλŠ” Prisma λ₯Ό 톡해 ν•΄κ²°ν•  수 μžˆλ‹€κ³ ν•œλ‹€.

https://www.prisma.io/docs/concepts/overview/prisma-in-your-stack/is-prisma-an-orm

ORM 은,
DB데이터 (Schema) λ₯Ό 객체 (Object) 둜 λ§€ν•‘ν•΄μ£ΌλŠ” 역할을 ν•˜μ—¬,
λͺ¨λΈλ§λœ 객체와 관계λ₯Ό λ°”νƒ•μœΌλ‘œ SQL 을 μžλ™μœΌλ‘œ 생성 ν•΄ μ£ΌλŠ” 도ꡬ라고 ν•œλ‹€.


init 🌼

λ¨Όμ €,
Next.js 앱을 npx create-next-app λͺ…령을 톡해 μ„€μΉ˜ ν•΄ μ€€λ‹€.

각 μ˜΅μ…˜μ€ μ·¨ν–₯ 쑴쀑 !

npx λͺ…령을 톡해 next.js μ•±(13 ver) 을 μ„€μΉ˜ ν–ˆλ‹€λ©΄,
μ•„λž˜μ™€ 같은 파일ꡬ쑰λ₯Ό 확인할 수 μžˆλ‹€.


Prisma 🌝

μ„€μΉ˜ν•œ Next μ•±μœΌλ‘œ μ§„μž…ν•˜μ—¬ Prisma λ₯Ό μ„€μΉ˜ ν•΄ μ€€λ‹€.

μ„€μΉ˜ν•œ Prisma λ₯Ό init(μ΄ˆκΈ°ν™”) ν•˜μ—¬ νŒŒμΌκ΅¬μ‘°μ— Prisma 와 .env κ°€ 생성됨을 ν™•μΈν•œλ‹€.

DB μ„€μ • ⛅️

μƒμ„±λœ Prisma 디렉토리λ₯Ό 확인 ν•΄ 보면,
schema.prisma 파일이 μ‘΄μž¬ν•˜λŠ”λ°,
μ—¬κΈ°μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€ (DB) 연결정보λ₯Ό μΆ”κ°€ ν•΄ μ€€λ‹€.

Defalut DB λŠ” PostgreSQL 둜 μ§€μ •λ˜μ–΄μžˆλ‹€.

PostgreSQL 을 MySQL 둜 λ³€κ²½ ν•΄ μ£Όκ³  μ €μž₯ !

datasource db 에도 μ •μ˜λ˜μ–΄μžˆλ“―,
env μ—μ„œ DATABASE_URL 을 λΆˆλŸ¬μ˜¨λ‹€.

.env νŒŒμΌμ—μ„œ DB 연결정보λ₯Ό μΆ”κ°€ ν•΄ μ€€λ‹€.

DATABASE_URL="mysql://username:password@localhost:3306/myDatabase"

포트번호 λ’€μ—λŠ” μ‹€μ œ μ‚¬μš©ν•  ν…Œμ΄λΈ” λͺ…을 지정해쀀닀.

이제 데이터 λͺ¨λΈμ„ μ„€μ • ν•΄ μ£Όμ–΄μ•Όν•˜λŠ”λ°,
schema.prisma 에 μ•„λž˜μ™€ 같이 λͺ¨λΈμ„ μ •μ˜ ν•΄ μ€€λ‹€.

μ§€μ •ν•œ λͺ¨λΈμ„ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ λͺ…λ Ήμ–΄λ₯Ό 톡해 μ‹€μ œ μ‚¬μš©λ  DB 와 동기화 μž‘μ—…μ„ ν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€.

yarn prisma migrate dev --name init

λ§Œμ•½ μ—λŸ¬ ❌ κ°€ λ°œμƒν•œλ‹€λ©΄ !?

πŸ‘‡πŸ‘‡πŸ‘‡

λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν–ˆλ”λ‹ˆ,
generators κ°€ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” μ—λŸ¬κ°€ λ°œμƒν–ˆλ‹€.

메세지에 좜λ ₯λœλŒ€λ‘œ prisma/client λ₯Ό μ„€μΉ˜ ν•΄ μ€€λ‹€.

yarn add @prisma/client

λ‹€μ‹œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λ©΄,

prisma νŒŒμΌνŠΈλ¦¬μ—μ„œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 된 SQL νŒŒμΌμ„ 확인할 수 μžˆλ‹€.

☝️☝️☝️
(이건 DB μ—μ„œλ„ 확인 κ°€λŠ₯ !)


root μ΄λ¦„μ˜ localhost:3306 κΈ°λ³Έ 포트둜 μ—΄λ¦° 컀λ„₯μ…˜μ— μ ‘κ·Ό ν•΄ 보면,
.env 에 μ •μ˜ν•œ next_mariaDB DB κ°€ 생성됨을 확인할 수 μžˆλ‹€.
κ·Έ μ•„λž˜μ—λŠ” λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ λ•Œ μ§€μ •ν•œ notice ν…Œμ΄λΈ”μ΄ μ‘΄μž¬ν•œλ‹€.

ν•΄λ‹Ή ν¬μŠ€νŒ…μ„ 톡해
λ°μ΄ν„°λ² μ΄μŠ€μ— Prisma λ₯Ό μ‚¬μš©ν•˜μ—¬ μ ‘κ·Ό 및 μ œμ–΄ ν•΄ λ³Ό 수 μžˆμ—ˆκ³ ,
λ‹€μŒ ν¬μŠ€νŒ…μ—μ„œλŠ” μ„œλ²„ 없이,
Prisma Client λ₯Ό μ„€μΉ˜ν•˜μ—¬ DB λ₯Ό μ‘°μž‘ν•˜κ³ , CRUD 의 μž‘μ—… 과정을 λ‹΄μ•„λ³΄λ €ν•œλ‹€.


Reference 🌊

https://defineall.tistory.com/853
https://jake-seo-dev.tistory.com/171
https://velog.io/@iamhayoung/prisma-schema
<