๐CRUD์ ๊ฐ๋ ๊ณผ ๐๏ธPrisma Client๋ฅผ ์ด์ฉํ C,R ๊ตฌํํด๋ณด๊ธฐ
CRUD
๋ CREATE, READ , UPDATE, DELETE์ ์ค์๋ง๋ก ๋ฐ์ดํฐ ์์ฑ ์กฐํ ์์ ์ญ์ ๋ฅผ ์๋ฏธํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ค๊ฐ์ง ๊ฒฝ์ฐ์ ํด๋น๋๋ค
-C: ํ์๊ฐ์ , ๊ธ์์ฑ ,์ํ๋ฑ๋ก
-R: ํ์์กฐํ, ์ํ ์กฐํ
-U: ์ ์ ์ ๋ณด ๋ณ๊ฒฝ, ์ํ๋ช ๋ณ๊ฒฝ
-D: ์ ์ ์ญ์
=> D์ ๊ฒฝ์ฐ ์ฌ์ค ์ค์ ๋ก๋ ์ญ์ ๋์ง ์๊ณ isDelete๊ฐ์ ์นผ๋ผ์ ๋ง๋ค์ด์ ๋ฃ์ด๋๋๋ค.
=> ์ด๋ฅผ ์ํํ ๋๋ฆฌํธ ํํ๋ผ๊ณ ํ๋ฉฐ ์ง์ฐ๊ธดํ์ง๋ง ์ง์ด๊ฒ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ํ๋ฆฌ์ฆ๋ง๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ์ฝ๊ฒ ์ ๊ทผ ํ๊ธฐ ์ํด
Prisma Client
๋ฅผ ์ค์นํ๋ค. ํ๋ฆฌ์ฆ๋ง ํด๋ผ์ด์ธํธ๋Prisma Client
๋Prisma๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๋ค์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ํด์ฃผ๋ Client ์ญํ
์ ํ๋ค
- Prisma Client๋ ๋ง์น ๊ณ ๊ฐ์ด ์ ๊ณต๋ฐ๋ ๊ฒ์ ์ฌ์ฉํ๋ ์ ์ฅ์ผ๋ก Prisma๋ ์ด๋ฏธ ๋ง๋ค์ด ๋์ ๊ฒ์ ์ด์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค.
Prisma Client
์ค์น๊ณผ์ 1> Prisma Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
npm install @prisma/client --save
2> Prisma Client๋ฅผ import ํด์ค๋ค.
import {Prisma Client} from "@prisma/client"
3> ํด๋์ค ์์ฑ๋ Prisma Client๋ฅผ new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค.
const prisma = new Prisma Client()
- prisma client๋ฅผ ์ค์นํ๋ฉด
prisma generate
๋ผ๋ ๋ช ๋ น์ด๋ ํจ๊ป ์คํ๋๋ค.prisma generate
๋ prisma.schema ํ์ผ์ ์ฝ์ด์ ์ด ํ์ผ์ ์๋ ๋ชจ๋ธ ํํ์ ๋ง๋ client๋ฅผ ์์ฑํ๋ค.prisma generate
์ ์ญํ ์ schema ํ์ผ์ ์ฝ์ด์ ํ์ผ์ ์๋ ๋ชจ๋ธ ํํ์ ๋ง๋ ํด๋ผ์ด์ธํธ ์์ฑํด์ค์ผ๋ก์ schema ํ์ผ์ด ๋ณ๊ฒฝ๋๋ฉด ์ ๋ช ๋ น์ด๊ฐ ์คํ๋์ด ํด๋ผ์ด์ธ์ ๋ฐ์๋์ด ์๋์์ฑ๋์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
app.post('/categories', async (req, res) => { await prisma.$queryRaw` INSERT INTO categories (name) VALUES ('์ฝ๋ ๋ธ๋ฃจ'); `; const [category] = await prisma.$queryRaw` SELECT * FROM categories ORDER BY id DESC LIMIT 1 `; res.json(category); });
- ํจ์์ ๋ฆฌํด ๊ฐ์ด ์นดํ ๊ณ ๋ฆฌ์ ๋ด๊ธฐ๋ฉด ๋ฆฌํด ๊ฐ์ res.json์ผ๋ก ๋ฐํํ์ฌ ๋ง๋ ๋ฐ์ดํท๋ค์ ๊ทธ๋๋ก ๋๋ ค์ค๋ค.
- get์ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ง ์ค๋ ๊ฒ์ด๊ณ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ฒ๋ผ ์์ฑ ์์ฒด๋ post์ด๋ค.
- prisma์์ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๋ค์ด ์๋๋ฐ EX> find many, uniquie๋ฑ์ด ์กด์ฌํ์ง๋ง sql๋ฌธ๋ prisma์์ ์ฌ์ฉ ํ ์ ์๋ค.
async ํค์๋
๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌํ๊ธฐ ์ํด์- ๋น๋๊ธฐ ์ฒ๋ฆฌ๋? ์ฒ๋ฆฌ๊ฐ ์ค๋๊ฑธ๋ฆฌ๋ ์ฝ๋๋ฅผ ๋นผ๋๊ณ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ค ๋จผ์ ์คํํ๊ณ ๋นผ๋์๋ ์ฝ๋๋ฅผ ๋ค์ ์คํํ๋ ๊ฒ
- ์ฆ, ๋น๋๊ธฐ๋ ๊ธฐ๋ค๋ฆฌ์ง ์๋ ๊ฒ์ผ๋ก ์์๋๋ก ์ฒ๋ฆฌํ์ง ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ด๋ ๊ฒ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๋ ๋ก์ง ์ค ํ๋๊ฐ DB๋ ํต์ ํ๋ ๊ฒ์ผ๋ก ์๋ฒ๊ฐ์ ์ฐ๋์ ํ ๋ ํต์ ์ด ์ด๋ค์ง๊ณ ๋๋ถ๋ถ ๋น๋๊ธฐ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
=>ํต์ = ๋น๋๊ธฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ = ํต์
์ธ์ ์์ async๋ฅผ ๋ถ์์ผ๋ก ํจ์ ์์ฒด๋ฅผ ๋น๋๊ธฐ๋ก ๋ง๋ค๋ฉด
์ด ํจ์์ ์ญํ ์ DB์ ์ ๊ทผํ์ฌ
1> ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ๋ค์
2>๋ฐํํ๋ ์์ผ๋ก ์งํ๋๋๋ฐ
์ด๋ 1> ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ ๋ณด๋ค 2> ๋ฐํ์ด ๋จผ์ ์ด๋ฃจ์ด์ง๋ฉด ์๋๊ธฐ ๋๋ฌธ์๋น๋๊ธฐ์ฒ๋ฆฌ
๋ฅผ ํตํด 1> ๋ฐ์ดํฐ ์ ๊ทผ์ด ๋๋ ๋ค 2> ๋ฐํ์ ํ๋ ์์๋ฅผ ๋ณด์ฅ๋ฐ๋๋ค.
1> select * ๋ชจ๋ ๋ฐ์ดํฐ ์กฐํํ๋ ๊ฒ
2> select table.column ํน์ ๋ฐ์ดํฐ๋ง ์กฐํํ๋ ๊ฒ
app.post('/categories', async (req, res) => { await prisma.$queryRaw` INSERT INTO categories (name) VALUES ('์ฝ๋ ๋ธ๋ฃจ'); `; const [category] = await prisma.$queryRaw` SELECT * FROM categories ORDER BY id DESC LIMIT 1 `; res.json(category); });
- ORM์ ์ฌ์ฉํ์ ๋์ฒ๋ผ ์ต๊ทผ ์ถ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ์ง ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ SQL๋ฌธ์ ์์ฑํ์ฌ ๋ฐํํด์ค๋ค.
- queryRaw ๋ฉ์๋์ ํน์ง์ ๋ฐํ ํ์ ์ ๊ฒฐ๊ณผ๊ฐ ํญ์ ๋ฐฐ์ด์ด๊ธฐ์ ํ๋๋ง ๋ฐํํ๊ธฐ ์ํด์ ๋ฐฐ์ด ๋น๊ตฌ์กฐํ๋ฅผ ํด์ ์ฌ์ฉํ๋ค.
- *๋ ๋ณดํต ์์ฐ๋ฉฐ c.id , c.name ๊ฐ์ด from categories c์ฒ๋ผ ์ค์ฌ์ ์ ์ด์ค๋ค
- CRUD๊ฐ ๋ญ์ง์ ๋ํด์ CREATE, READ ํ๋ ๋ฒ
- ์ฝ๋ ๋จ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผํ๋ ๊ฒ ์กฐ์ฐจ๋ ํต์ (8000 - 3036 ํฌํธ์์ ๊ณผ์ ์ ์ค๋๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ)
- ๋น๋๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ASYNC/AWAIT, AWAIT๋ ๋น๋๊ธฐ ์ฝ๋๊ฐ ์์ง๋๊ฐ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผํ๊ณ ๋ฐํํ๋ ๊ฑธ ๋ฐ์์์ผํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ค๋ ค์ค์ผํ๋ ๋ฌธ๋ฒ์ผ๋ก์ ์ฌ์ฉ๋๋ค.
- creat.findMany ๊ฐ์ ํ๋ฆฌ์ฆ๋ง ๋ฉ์๋๊ฐ ์กด์ฌํ๋ ์ ๋๋ง ์๊ณ rawQuery์ ๋ ์ ์ฐ๋๊ฒ ์ค์ํ๋ค.
+) ๋ง์ฝ ๋ฐฉ๊ธ ์ถ๊ฐํ ๋ฐ์ดํฐ๊ฐ ๋ญ์ง ์์์ผํ๋ ๊ฒฝ์ฐ์๋ ์ถ๊ฐํ ๋ด์ฉ์ ์ฝ์ด์ค๋ ๊ฒ๊น์ง ํด์ฃผ๋ฉด ์น์ ํ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ๊ฑฐ๋ญ๋ ๊ฒ์ด๋ค.
- ์์ฝ๋ ๊ฐ์ ์ค ๋ฒก์๋ ํ์ด๋ฐ์ด์ ์ ๋์์จ ๊ดํฌ๋์ ๊ฐ์ ์ค:>