← 전체 글로 돌아가기

웹 개발

날짜 필드를 추가할 때 놓치기 쉬운 실수

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]) // 쿼리 성능 향상
}

확인 체크리스트

  1. 타입: DateTime 또는 timestamp with time zone
  2. 기본값: @default(now())로 설정
  3. 기존 데이터: NULL 처리 전략 수립
  4. 인덱스: 필터링/정렬에 자주 쓰면 추가
  5. 타임존: UTC로 통일했는가

작은 필드 하나가 나중에 전체 쿼리 성능을 결정한다.