๐ Docker๋ก PostgreSQL ์ค์นํ๊ณ NestJS + prisma ์ฐ๋ํ๊ธฐ
NestJS๋ก ๊ฐ๋ฐํ ๋ ์ฃผ๋ก prisma์ postgresql์ ์ฌ์ฉํ๋ ์ถ์ธ์ ๋๋ค.
์ ์ด๋ ํ ํน์ฅ์ ์ด ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๊ธฐ ์ค์น ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๐ prisma์ PostgreSQL์ ์ฅ์
๐ prisma
Prisma๋ TypeScript์ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์์ ORM(Object-Relational Mapping) ์ญํ ์ ์ํํ๋ ๋๊ตฌ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ๊ฐํธํ๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค.
Prisma๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง, ์ฟผ๋ฆฌ ์์ฑ, ๋ง์ด๊ทธ๋ ์ด์ ๊ด๋ฆฌ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ํนํ TypeScript์์ ๊ฐ๋ ฅํ ํธํ์ฑ์ ๋ฐํ์ผ๋ก ์ฝ๋ ์๋ ์์ฑ, ํ์ ๊ฒ์ฌ ๋ฑ์ ํตํด ์์ฐ์ฑ๊ณผ ์์ ์ฑ์ ํฌ๊ฒ ํฅ์ํฉ๋๋ค.
๐ PostgreSQL
PostgreSQL์ ์คํ ์์ค ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ผ๋ก, ์์ ์ฑ, ํ์ฅ์ฑ, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ค์ํ๋ฉฐ ์ฌ๋ฌ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. SQL ํ์ค ์ค์ ์ธ์๋ JSON ๋ฐ์ดํฐ ํ์ , ๊ณ ๊ธ ์ฟผ๋ฆฌ ์ต์ ํ, ํธ๋์ญ์ ๊ด๋ฆฌ ๋ฑ์ ํฌํจํด ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฅ๊น์ง ํญ๋๊ฒ ์ง์ํ์ฌ RDBMS์ NoSQL์ ์ฅ์ ์ ํจ๊ป ์ ๊ณตํฉ๋๋ค.
๋ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ MySQL๊ณผ ๋น๊ตํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
ํญ๋ชฉ | PostgreSQL | MySQL |
์ฟผ๋ฆฌ ์ต์ ํ ๋ฐ ์ฑ๋ฅ |
๋ณต์กํ ์ฟผ๋ฆฌ ์ต์ ํ ์ง์, ๊ณ ๊ธ ํธ๋์ญ์ ๊ธฐ๋ฅ(์๋์ฐ ํจ์, CTE ๋ฑ) | ๋จ์ ์ฟผ๋ฆฌ์ ๋ํด ๋ฐ์ด๋ ์ฝ๊ธฐ ์ฑ๋ฅ, ๋ณต์กํ ํธ๋์ญ์ ์ต์ ํ๋ ์ ํ์ |
์ํคํ ์ฒ | ๊ฐ์ฒด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ACID ํธ๋์ญ์ ์ค์, ๋ฐ์ดํฐ ์ผ๊ด์ฑ๊ณผ ๋ณต์กํ ๊ด๊ณ ํํ ๊ฐ๋ฅ | ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋์ ์ฑ๋ฅ๊ณผ ๊ฐ์ฉ์ฑ ์ ๊ณต, ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ง์ด ์ฌ์ฉ๋จ |
๋ฐ์ดํฐ ํ์ | JSON, JSONB, ๋ฐฐ์ด, ๋ฒ์ ๋ฑ ๊ณ ๊ธ ๋ฐ์ดํฐ ํ์ ์ง์ | JSON ๋ฐ์ดํฐ ํ์ ์ ์ง์ํ์ง๋ง ๊ธฐ๋ฅ์ PostgreSQL๋ณด๋ค ์ ํ์ |
ํ์ฅ์ฑ | ์ฌ์ฉ์ ์ ์ ํจ์, ์๋ฃํ ํ์ฅ ๊ฐ๋ฅ, ๋ค์ํ ์ธ์ด๋ก ํธ๋ฆฌ๊ฑฐ์ ๊ธฐ๋ฅ ๊ตฌํ ๊ฐ๋ฅ | ๊ฐํธํ ์ค์ผ์ผ๋ง ์ง์, ๋ค์ํ ์คํ ๋ฆฌ์ง ์์ง ์ ํ ๊ฐ๋ฅ(InnoDB, MyISAM ๋ฑ) |
๋ณต์ ๋ฐ ๊ณ ๊ฐ์ฉ์ฑ | ์คํธ๋ฆฌ๋ฐ ๋ฐ ๋ ผ๋ฆฌ์ ๋ณต์ ๋ก ๊ณ ๊ฐ์ฉ์ฑ ์ง์, ๊ณ ๊ธ ๋ณต์ ๊ธฐ๋ฅ ์ ๊ณต | ๋ง์คํฐ-์ฌ๋ ์ด๋ธ ๋ณต์ ์ง์, ๋ค์ค ๋ฆฌ๋ ์ค์ ๊ฐ๋ฅ, ๋น๋๊ธฐ ๋ณต์ ์ฑ๋ฅ์ด ๋ฐ์ด๋จ |
๐ docker๋ก PostgreSQL ์ค์นํ๊ธฐ
๐ ์ด๋ฏธ์ง pull
$ docker pull postgres:17
pull ๋ช ๋ น์ด๋ก ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ค๋๋ค.
๊ฐ์ฅ ์ต์ ๋ฒ์ ์ด 17์ด๋ผ ๋ฒ์ ์ ์ง์ ๋ช ์ํด ์ฃผ์์ต๋๋ค.
๐ ์ปจํ ์ด๋ ์ฌ๋ฆฌ๊ธฐ
$ docker run -d --restart=always \
--name postgres-db \
-e POSTGRES_PASSWORD=your_password \
-e POSTGRES_DB=your_db_name \
-p 5432:5432 \
-v /path/to/local/data:/var/lib/postgresql/data \
postgres
์ฃผ์ ์ต์ ์ ๋ํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- -d: ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ
- --restart=always: ์ปจํ ์ด๋ ์๋์ผ๋ก ์ฌ์์
- --name: ์ปจํ ์ด๋ ์ด๋ฆ ์ง์
- -e POSTGRES_PASSWORD: PostgreSQL ๋ฃจํธ ๋น๋ฐ๋ฒํธ ์ค์
- -e POSTGRES_DB: ์ด๊ธฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ ์ค์
- -p 5432:5432: ํธ์คํธ์ ์ปจํ ์ด๋์ ํฌํธ ๋งคํ
- -v: ์ปจํ ์ด๋๊ฐ ๋ ์๊ฐ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์งํค๊ธฐ ์ํ ๋ณผ๋ฅจ ์ค์
๊ฐ์ธ ์๋ฒ์ ์ฌ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ผ์ด์ธํธ๋ก ์ฐ๊ฒฐํด ๋ณด๋ ์ ์์ ์ผ๋ก ์๋ํ๋ค์.
๐ prisma ์ค์น ๋ฐ PostgreSQL ์ฐ๋
๐ ์ค์น
$ npm i @prisma/client
$ npm i -D prisma
๊ฐ๋ฐ ์์กด์ฑ์ผ๋ก ํ๋ก์ ํธ์ prisma ํด๋ผ์ด์ธํธ๋ฅผ ์ค์นํด ์ค๋๋ค.
๐ ์ด๊ธฐํ
$ npx prisma init
์ด ๋ช
๋ น์ ์คํํ๋ฉด ํ๋ก์ ํธ ๋ฃจํธ์ prisma
ํด๋๊ฐ ์์ฑ๋๊ณ , ๊ทธ ์์ schema.prisma
ํ์ผ์ด ๋ง๋ค์ด์ง๋๋ค.
schema.prisma ํ์ผ์ Prisma์ ๊ธฐ๋ณธ ์ค์ ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ ์ํ๋ ํ์ผ์ ๋๋ค.
๋ ํธํ๊ฒ ํ์ผ์ ํ์ธ ๋ฐ ์์ฑํ๊ณ ์๋์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ Extension์ ์ค์นํด ์ฃผ์ธ์.
๐ env ํ์ผ์ DB ์ ๋ณด ์ ๋ ฅ
# .env ํ์ผ
DATABASE_URL="postgresql://[username]:[password]@[์๋ฒ_์ฃผ์]:5432/[DB_name]"
์์ ์ด ์์ฑํ ๋๋ก ์ ์ ๋ ฅํด ์ฃผ๋๋ก ํฉ๋๋ค.
์ ์ ๋ root๋ฅผ ์ฌ์ฉํ๊ธฐ๋ณด๋จ ์๋ก ํ๋ ๋ง๋๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
๐ ํ ์ด๋ธ ์์ฑํ๊ธฐ
prisma/schema.prisma์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
์ ๋ ์ ๋ง ๊ฐ๋จํ๊ฒ ํ ์ด๋ธ์ ์ ์ํด ๋ดค์ต๋๋ค.
๊ทธ๋ค์ ๋ช ๋ น์ด๋ก ์ ์ํ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๊ธฐํํ ์ ์์ต๋๋ค.
$ npx prisma migrate dev
prisma migrate ๋ช ๋ น์ด๋ Prisma์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ณ๊ฒฝ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ๋ช ๋ น์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ ์์ฑํ๊ณ ์ ์ฉํ์ฌ Prisma ์คํค๋ง์ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋๊ธฐํ๋ฅผ ๋์์ค๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ์ ์ํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ๋ฐ ์ ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
์ฑ๊ณตํ๋ค๋ฉด migration ํ์ผ์ด ์์ฑ๋๊ณ DB์๋ ์ ์ ์ฉ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๐ NestJS ๋ค๋ฅธ ๊ธ
[NestJS] - NestJS ํ๋ก์ ํธ ์์๊ณผ ๊ตฌ์กฐ์ ์ดํด
NestJS์ prisma๋ก ํธ๋ฆฌํ๊ฒ CRUD ๊ตฌํํ๊ธฐ
'NestJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
NestJS์ prisma๋ก ํธ๋ฆฌํ๊ฒ CRUD ๊ตฌํํ๊ธฐ (0) | 2024.11.12 |
---|---|
NestJS ํ๋ก์ ํธ ์์๊ณผ ๊ตฌ์กฐ์ ์ดํด (0) | 2024.10.28 |
๋๊ธ