728x90

1. 📝 schema.prisma 파일 구조 다시 보기
Prisma 프로젝트를 초기화하면 생성되는 prisma/schema.prisma 파일은 Prisma의 핵심입니다. 이 파일은 크게 세 블록으로 구성됩니다.
- generator 블록: 데이터베이스와 통신할 Prisma Client를 어떻게 생성할지 정의합니다.
- datasource 블록: 사용하려는 데이터베이스 종류(provider)와 연결 URL을 정의합니다.
- model 블록: 데이터베이스의 테이블 구조를 정의합니다. (가장 중요한 부분)
// prisma/schema.prisma
// 1. generator (Prisma Client 설정)
generator client {
provider = "prisma-client-js"
}
// 2. datasource (DB 연결 설정)
datasource db {
provider = "mysql" // 또는 "postgresql", "sqlite" 등
url = env("DATABASE_URL")
}
// 3. model (테이블 구조 정의) - 여기서부터가 핵심입니다.
// ...
728x90
2. 🧱 데이터 모델(Model) 정의
model 블록 내부에 데이터베이스의 테이블에 해당하는 모델을 정의합니다. 각 모델은 테이블 이름이 되고, 모델 내부의 속성들은 테이블의 컬럼(Field)이 됩니다.
기본 모델 예시: User
model User {
// 1. ID 필드: 기본 키(Primary Key) 설정
id Int @id @default(autoincrement()) // 정수형, 기본 키, 자동 증가
// 2. 일반 필드: 타입과 제약 조건 설정
email String @unique // 문자열, 유일성 제약(Unique)
name String? // 문자열, Null 허용 가능(?)
// 3. 날짜 필드
createdAt DateTime @default(now()) // 날짜/시간, 생성 시점 자동 입력
updatedAt DateTime @updatedAt // 날짜/시간, 데이터 변경 시 자동 업데이트
// (아래 4번에서 관계 설정)
posts Post[] // User와 Post 간의 1:N 관계 정의 (Post 모델이 정의되어야 함)
}
3. 🧩 주요 필드 타입 및 속성(Attribute)
| 타입 (Prisma Scalar Type) | 설명 | SQL 타입 예시 |
| String | 문자열 데이터 | VARCHAR, TEXT |
| Int | 정수 | INT |
| Float | 실수 | FLOAT |
| Boolean | 참/거짓 | BOOLEAN |
| DateTime | 날짜 및 시간 | DATETIME, TIMESTAMP |
| Json | JSON 객체 | JSON |
| 속성 (Attribute) | 설명 |
| @id | 해당 필드를 기본 키 (Primary Key)로 설정합니다. |
| @unique | 해당 필드의 값이 유일(Unique)해야 함을 강제합니다. |
| @default(값) | 데이터 생성 시 값이 제공되지 않으면 기본값을 설정합니다. (예: now(), autoincrement()) |
| @updatedAt | 데이터가 업데이트될 때마다 현재 시각으로 자동 업데이트됩니다. |
| ? (타입 뒤) | 해당 필드가 NULL 값을 가질 수 있음을 나타냅니다. |
4. 🔗 모델 간 관계(Relation) 설정
Prisma는 모델 간의 관계(1:1, 1:N, N:M)를 명시적으로 정의합니다. 관계 설정은 외래 키(Foreign Key) 필드와 관계 필드의 두 부분으로 이루어집니다.
1:N (일대다) 관계 예시: User와 Post
- Post 모델 (N 쪽): User에 대한 외래 키 필드와 관계 필드를 정의합니다.
model Post { id Int @id @default(autoincrement()) title String content String? // 💡 외래 키 필드 (실제 DB 컬럼) authorId Int // 💡 관계 필드 (Prisma Client에서 사용. DB에는 생성되지 않음) author User @relation(fields: [authorId], references: [id]) // ... } - User 모델 (1 쪽): Post 배열을 추가하여 역방향 접근을 정의합니다.
model User { // ... posts Post[] // Post 모델과의 1:N 관계를 나타냅니다. }
@relation 속성은 관계의 구체적인 설정(어떤 필드를 외래 키로 사용할지)을 명시합니다.
728x90
5. 🛠️ 스키마 변경 적용: 마이그레이션
스키마 설계를 완료하면, schema.prisma의 내용을 실제 데이터베이스에 반영해야 합니다.
# 새로운 마이그레이션 파일 생성 및 DB에 적용
npx prisma migrate dev --name init
이 명령은:
- 현재 스키마 상태를 기반으로 마이그레이션 파일을 생성하고 (prisma/migrations 폴더).
- Prisma Client를 업데이트하고 (다음 주제에서 자세히 다룰 내용).
- 데이터베이스에 테이블을 실제로 생성합니다.
728x90
'Nest.js를 배워보자 > 4. NestJS에서 데이터베이스 연결하기 — Prisma 기반 실습' 카테고리의 다른 글
| NestJS + Prisma: 트랜잭션과 관계(Relation) (0) | 2025.12.02 |
|---|---|
| NestJS + Prisma: CRUD 예제 (Service 구현) (0) | 2025.12.02 |
| Prisma Client 생성 (0) | 2025.12.02 |
| Prisma 설치: NestJS 데이터베이스 연동의 시작 (1) | 2025.12.02 |