convex-schema-validator은(는) 무엇을 하나요?
Convex 데이터베이스 스키마를 정의하고 검증하며, 적절한 타입 지정, 인덱스 구성, 선택적 필드, 유니온, 스키마 변경 마이그레이션 전략을 제공합니다.
개요
이 스킬은 Convex 백엔드에서 스키마를 정의할 때 모범 사례를 따르도록 가이드합니다. convex/schema.ts 파일에서 defineSchema와 defineTable을 사용하여 구조화된 테이블을 만들고, v 헬퍼를 통해 각 필드의 타입을 검증합니다.
주요 기능
- 타입 정의:
v.string(),v.number(),v.boolean(),v.id("tableName"),v.array(),v.object()등 다양한 타입 지원 - 선택적 필드:
v.optional(v.string())형태로 필드를 선택적으로 정의 - 유니온 타입:
v.union(v.string(), v.number())로 여러 타입 허용 - 인덱스 구성:
index메서드를 사용하여 조회 성능 최적화 - 마이그레이션 전략: 스키마 변경 시 데이터 무결성을 유지하는 방법
사용 예시
// convex/schema.ts
import { defineSchema, defineTable } from "convex/server";
import { v } from "convex/values";
export default defineSchema({
users: defineTable({
name: v.string(),
email: v.string(),
age: v.optional(v.number()),
role: v.union(v.literal("admin"), v.literal("user")),
}).index("by_email", ["email"]),
posts: defineTable({
title: v.string(),
content: v.string(),
authorId: v.id("users"),
tags: v.optional(v.array(v.string())),
})
.index("by_author", ["authorId"])
.index("by_title", ["title"]),
});
스키마 검증
Convex는 런타임에 스키마를 검증하여 데이터 무결성을 보장합니다. 필드 타입이 일치하지 않으면 오류가 발생합니다.
인덱스 구성
인덱스는 조회 성능을 높이는 데 필수적입니다. 여러 필드에 대한 복합 인덱스도 지원됩니다.
.index("by_author_and_date", ["authorId", "creationTime"])
마이그레이션 전략
스키마 변경 시:
- 항상 선택적 필드로 새 필드를 추가하세요.
- 기존 데이터를 마이그레이션하는 쿼리를 작성하세요.
- 필드를 필수로 변경하기 전에 모든 기존 데이터가 업데이트되었는지 확인하세요.
참고: Convex 공식 문서