웹 개발
날짜 필드를 추가할 때 놓치기 쉬운 실수
created_at과 updated_at은 단순한 필드가 아니다. 타입, 기본값, 인덱스를 모두 확인해야 한다.
웹 개발을 처음 할 때는 날짜 필드 하나를 추가하는 게 얼마나 위험한지 모른다. 타입이 잘못되면 쿼리 성능이 떨어지고, 기본값이 없으면 레거시 데이터가 NULL이 된다.
로그부터 확인하기
# 마이그레이션 실행 후 로그
npx prisma migrate dev --name add_created_at
# 실제 스키마 변경을 SQL에서 확인
cat prisma/migrations/[timestamp]_add_created_at/migration.sql
생성된 SQL이 실제로 의도한 대로인지 반드시 확인한다.
흔한 실수들
1. 타입이 VARCHAR인데 날짜로 쿼리하기
// 위험
createdAt: string // "2024-01-01" 문자열
// 안전
createdAt: DateTime
문자열이면 날짜 비교 쿼리(createdAt > new Date(2024, 0, 1))가 작동하지 않는다.
2. 기본값 없이 추가하기
// 위험: 기존 데이터가 모두 NULL
model Post {
createdAt DateTime
}
// 안전: 기본값 설정
model Post {
createdAt DateTime @default(now())
}
3. 인덱스를 빼먹기
// 날짜로 필터링이 많으면 필수
model Post {
createdAt DateTime @default(now())
@@index([createdAt]) // 쿼리 성능 향상
}
확인 체크리스트
- 타입:
DateTime또는timestamp with time zone - 기본값:
@default(now())로 설정 - 기존 데이터: NULL 처리 전략 수립
- 인덱스: 필터링/정렬에 자주 쓰면 추가
- 타임존: UTC로 통일했는가
작은 필드 하나가 나중에 전체 쿼리 성능을 결정한다.