2025.3.21 금요일의 공부기록
Prisma 마이그레이션(migrate)은 데이터베이스의 구조를 변경할 때 사용하는 도구로, 데이터 모델(schema)의 변경사항을 데이터베이스에 안전하고 일관된 방식으로 적용해준다. 데이터베이스 테이블이나 컬럼이 추가되거나 삭제될 때마다 마이그레이션을 실행하면 데이터베이스와 애플리케이션 코드가 항상 일치된 상태로 유지된다.
migrate dev
)개발 단계에서는 아래 명령어를 사용하여 빠르고 안전하게 데이터베이스 구조를 변경할 수 있다.
npx prisma migrate dev
이 명령어를 실행하면 아래 과정이 순차적으로 수행된다.
변경사항 확인
Prisma는 데이터베이스와 현재의 Prisma 스키마(schema.prisma
)를 비교하여 달라진 점을 파악한다.
변경사항 테스트 적용
발견된 변경 사항을 바로 실제 데이터베이스에 적용하기 전에, 테스트 목적의 별도 임시 데이터베이스(shadow database)에 먼저 적용하여 이상이 없는지 미리 점검한다.
마이그레이션 파일 생성
테스트 적용이 성공하면, Prisma는 변경된 내용을 SQL 파일로 만들어 prisma/migrations
폴더에 저장한다.
마이그레이션을 실제 데이터베이스에 적용
생성된 마이그레이션 SQL 파일을 실제 데이터베이스에 적용하고 이를 기록하여 관리한다.
Prisma Client 코드 자동 생성
마이그레이션 완료 후 자동으로 Prisma Client의 타입스크립트 코드가 새롭게 생성된다. 이를 통해 변경된 데이터베이스와 즉각적으로 타입 안정성을 유지한다.
migrate dev
)는 반드시 개발 환경에서만 사용해야 한다.npx prisma migrate deploy
더 자세한 내용은 아래 링크를 통해 확인할 수 있다.
Prisma Client는 Prisma 스키마(schema)를 기반으로 자동 생성되는 타입 안전(type-safe) 쿼리 빌더이다. 이 라이브러리를 사용하면 SQL을 직접 작성하지 않고도 직관적이고 명확한 API를 통해 데이터베이스를 쉽게 다룰 수 있다.
Prisma Client는 자동 완성과 타입 안전성을 제공하여 개발자의 생산성을 크게 높여준다.
먼저 Prisma Client를 설치해야 한다. 아래 명령어를 터미널에서 실행한다.
npm install @prisma/client
이후 npx prisma generate
를 실행하면 모델 변경 시 Prisma Client가 자동 생성된다.
Prisma Client는 다음과 같이 간단히 설정하여 사용할 수 있다.
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
이제 Prisma Client를 통해 데이터를 쉽게 조작할 수 있다.
모든 사용자 데이터 조회 예시이다.
async function getUsers() {
const users = await prisma.user.findMany()
console.log(users)
}
getUsers()
특정 조건에 맞는 사용자 데이터를 조회하는 예시이다.
async function findUser(username: string) {
const user = await prisma.user.findUnique({
where: { username }
})
console.log(user)
}
findUser('john')
새로운 사용자 데이터를 추가하는 예시이다.
async function createUser() {
const newUser = await prisma.user.create({
data: {
username: 'jane',
email: 'jane@example.com',
password: 'hashed_password'
}
})
console.log(newUser)
}
createUser()
기존 사용자 정보를 업데이트하는 예시이다.
async function updateUser(id: number) {
const updatedUser = await prisma.user.update({
where: { id },
data: { email: 'newemail@example.com' }
})
console.log(updatedUser)
}
updateUser(한)
사용자 데이터를 삭제하는 예시이다.
async function deleteUser(id: number) {
await prisma.user.delete({
where: { id }
})
console.log('삭제 완료')
}
deleteUser(한)
npx prisma migrate dev
를 실행하여 데이터베이스와 모델을 동기화한다.npx prisma migrate deploy
명령어를 사용한다.npx prisma generate
)하면 타입 안정성을 유지할 수 있다.