โœ๏ธ What I Learned/TIL

[TIL] Prisma, Planet scale ์…‹์—… ๋ฐ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•

2023. 8. 22. 23:55
๋ชฉ์ฐจ
  1. 1. Prisma, Planet Scale, Vitess
  2. 1) Prisma
  3. 2) Planet Scale
  4. 3) Vitess
  5. 2. ๊ธฐ๋ณธ ์…‹์—…
  6.  
  7. 3. ํ”„๋ฆฌ์ฆˆ๋งˆ ํด๋ผ์ด์–ธํŠธ ์„ค์น˜ ํ›„ client.ts ํŒŒ์ผ ์„ค์ •
  8. 4. schema.prisma
  9. ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ
  10. ์ฐธ๊ณ  ์‚ฌ์ดํŠธ

๐Ÿ’ก TIL 20230822 - Prisma, Planet scale ์…‹์—… ๋ฐ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•


1. Prisma, Planet Scale, Vitess

1) Prisma

Prisma๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ํ˜„๋Œ€์ ์ด๊ณ  ๊ฐ•๋ ฅํ•œ ORM (Object-Relational Mapping) ๋„๊ตฌ์ด๋‹ค. Prisma๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์—ญ์‹œ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. Prisma๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, TypeScript์™€ JavaScript๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๋™๊ธฐํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ•๋ ฅํ•œ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ๋‹ค.

 

2) Planet Scale

MySQL๊ณผ ํ˜ธํ™˜๋˜๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์ €ํ•˜์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ ํ™•์žฅ์„ฑ, ์„ฑ๋Šฅ ๋ฐ ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์ด๋‹ค.

Vitess ๊ฐœ๋ฐœ ํŒ€ ์ธ์›๋“ค์ด ๋งŒ๋“  ์„œ๋น„์Šค๋กœ, MySQL์˜ ์•ˆ์ •์„ฑ๊ณผ ์˜คํ”ˆ์†Œ์Šค์ธ Vitess์˜ ํ™•์žฅ์„ฑ์„ ๊ฐ–์ถ”์—ˆ๋‹ค๋Š” ์žฅ์  ๋•Œ๋ฌธ์— 2021๋…„์— ์„œ๋น„์Šค๋ฅผ ๋Ÿฐ์นญํ•œ ์ดํ›„ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ž…์†Œ๋ฌธ์ด ๋‚œ(!?) ์„œ๋น„์Šค๋ผ๊ณ  ํ•œ๋‹ค.

 

3) Vitess

Vitess๋Š” Youtube ์„œ๋น„์Šค์˜ ๋„ˆ๋ฌด ๊ฑฐ๋Œ€ํ•ด์ง„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์Šค์ผ€์ผ๋งํ•˜๊ธฐ ์œ„ํ•ด Youtube์—์„œ ์˜คํ”ˆ ์†Œ์Šค๋กœ ๊ฐœ๋ฐœ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์…ฐ์ด๋”ฉ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ๋ง ์‹œ์Šคํ…œ์œผ๋กœ, ์ฃผ๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. Vitess๋Š” MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๊ฐ€์ƒํ™” ๊ณ„์ธต์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™•์žฅ์„ฑ ๋ฐ ๊ฐ€์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ๋†’์€ ๋ถ€ํ•˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 


2. ๊ธฐ๋ณธ ์…‹์—…

// PlanetScale auth
pscale auth login

// PlanetScale๊ณผ ํ”„๋กœ์ ํŠธ(๋กœ์ปฌ) ์—ฐ๊ฒฐ
pscale connect project-name

// secure tunnel์„ ํ†ตํ•ด PlanetScale๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” url ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
DATABASE_URL="mysql://000.0.0.0:0000/project-name"

// scheme.prisma์—์„œ ์Šคํ‚ค๋งˆ ์ •์˜ ํ›„ push
npx prisma db push

// ํ”„๋ฆฌ์ฆˆ๋งˆ ์ŠคํŠœ๋””์˜ค ์‹คํ–‰ -> DB ๊ด€๋ฆฌ์ž ํŒจ๋„
npx prisma studio

// ํ”„๋ฆฌ์ฆˆ๋งˆ ํด๋ผ์ด์–ธํŠธ ์„ค์น˜
yarn add @prisma/client

 


 

3. ํ”„๋ฆฌ์ฆˆ๋งˆ ํด๋ผ์ด์–ธํŠธ ์„ค์น˜ ํ›„ client.ts ํŒŒ์ผ ์„ค์ •

import { PrismaClient } from "@prisma/client";

export default new PrismaClient();
  • ์„ค์ • ํ›„ npx prisma db push๋กœ ์„œ๋ฒ„์— push

 


4. schema.prisma

ํ”„๋ฆฌ์ฆˆ๋งˆ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ์˜ ์ƒ๊น€์ƒˆ๋ฅผ ์ •์˜ํ•˜๋Š” ํ”„๋ฆฌ์ฆˆ๋งˆ์˜ ์‹ฌ์žฅ๊ณผ ๊ฐ™์€ ํŒŒ์ผ..!

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider     = "mysql"
  url          = env("DATABASE_URL") // ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์„ค์ •ํ•ด์ค€ planet scale secure url
  // relationMode ์„ค์ •: ๋ฐ์ดํ„ฐ ๊ฐ„ ๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ prisma ์„ค์ •๋Œ€๋กœ ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
  // ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ
  relationMode = "prisma"
}

// npx prisma db push
model User {
  id        Int      @id @default(autoincrement())
  phone     Int?     @unique
  email     String?  @unique
  name      String
  avartar   String?
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

 

์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ

  • ex. User DB : { id: 1, username: john }
    • Comments DB์— { id: 1, text: wow!, user: 5 }๋กœ ๋“ฑ๋กํ•˜๋ คํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ (user: 5๊ฐ€ ์—†์Œ์—๋„)
    • ์ผ๋ฐ˜์ ์ธ sql์ด๋‚˜ postgresql ํ™˜๊ฒฝ์—์„œ๋Š” ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ๋•Œ๋ฌธ์— ์—๋Ÿฌ ๋ฐœ์ƒํ•จ
    • comments DB์— user๋ผ๋Š” ์™ธ๋ž˜ํ‚ค๊ฐ€ ์žˆ์œผ๋‹ˆ User ํ…Œ์ด๋ธ”์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ
    • ํ•˜์ง€๋งŒ ์ด๋ฒˆ์— ์‚ฌ์šฉํ•˜๋Š” Vitess๋Š” foreign key constranint๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ
    • ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ํ™•์ธ์ž‘์—…์„ DB side์—์„œ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ prisma๋ฅผ ํ†ตํ•ด์„œ ํ•  ๊ฒƒ

 


์ฐธ๊ณ  ์‚ฌ์ดํŠธ

๋…ธ๋งˆ๋“œ ์ฝ”๋” - ๋‹น๊ทผ๋งˆ์ผ“ ํด๋ก ์ฝ”๋”ฉ

PlanetScale์„ Prisma๋กœ ๋” ์ž˜ ์‚ฌ์šฉํ•˜๊ธฐ

 

 

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'โœ๏ธ What I Learned > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL] ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€ TDZ(Temporal Dead Zone)  (0) 2023.08.26
[TIL] import { useRouter } from โ€œnext/routerโ€์™€ โ€œnext/navigationโ€ ์ฐจ์ด  (0) 2023.08.24
[TIL] Prisma์— ๋Œ€ํ•ด  (0) 2023.08.20
[TIL] Tailwind CSS ์žฅ๋‹จ์ , ์—ฐ์Šต์˜ˆ์ œ  (0) 2023.08.19
[TIL] Next.js 13 - getStaticProps, getStaticPaths (feat. 12๋ฒ„์ „์—์„œ์˜ getServerSideProps)  (0) 2023.08.18
  1. 1. Prisma, Planet Scale, Vitess
  2. 1) Prisma
  3. 2) Planet Scale
  4. 3) Vitess
  5. 2. ๊ธฐ๋ณธ ์…‹์—…
  6.  
  7. 3. ํ”„๋ฆฌ์ฆˆ๋งˆ ํด๋ผ์ด์–ธํŠธ ์„ค์น˜ ํ›„ client.ts ํŒŒ์ผ ์„ค์ •
  8. 4. schema.prisma
  9. ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ
  10. ์ฐธ๊ณ  ์‚ฌ์ดํŠธ
'โœ๏ธ What I Learned/TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [TIL] ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€ TDZ(Temporal Dead Zone)
  • [TIL] import { useRouter } from โ€œnext/routerโ€์™€ โ€œnext/navigationโ€ ์ฐจ์ด
  • [TIL] Prisma์— ๋Œ€ํ•ด
  • [TIL] Tailwind CSS ์žฅ๋‹จ์ , ์—ฐ์Šต์˜ˆ์ œ
Jiwon()
Jiwon()
Jiwon()
jiwondev.log
Jiwon()
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ์ „์ฒด๋ณด๊ธฐ (86)
    • โœ๏ธ What I Learned (52)
      • TIL (41)
      • ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… (8)
    • ๐Ÿ’ป Programming (31)
      • Algorithm (12)
      • React (1)
      • JS, TS (7)
      • HTML, CSS (7)
      • ๊ธฐํƒ€ (4)
    • ๐Ÿ–Š๏ธ ์ผ๊ธฐ (3)
      • ์ผ์ƒ๊ธฐ๋ก (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ChatGPT
  • tailwindcss
  • reduxtoolkit
  • Next.js
  • React-Hook-Form
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
  • Firebase
  • javascript
  • ํ”„๋ก ํŠธ์—”๋“œ
  • ์ฝ”๋”ฉ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • React
  • SSR
  • ์›น๊ฐœ๋ฐœ
  • ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„
  • TypeScript
  • transition
  • css
  • ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
  • HTML
  • Redux
  • nextjs
  • ํด๋ฆฐ์ฝ”๋“œ
  • Prisma
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ
  • Til
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • ๋ฆฌ์•กํŠธ
  • recoil
  • slice

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
Jiwon()
[TIL] Prisma, Planet scale ์…‹์—… ๋ฐ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.