AI로 데이터베이스 설계하기
'무엇을 저장할지'를 AI로 테이블로. 컬럼·관계·인덱스, 그리고 처음부터 막다른 길로 가지 않는 설계 순서.
한 문장으로
데이터베이스 설계 = 먼저 무엇을 저장하고 어떻게 연결되는지 정한다. 그다음 AI에게 테이블로 만들게 한다.
만들 결과물
컬럼·타입·관계·인덱스가 명확한 테이블 초안. 그대로 AI에 넘겨 마이그레이션을 생성할 수 있다.
테이블을 건드리기 전에 '명사'를 나열하라
가장 쉬운 시작: 제품을 한 문장으로 설명하고 그 안의 명사에 동그라미를 칩니다. "사용자가 주문해서 상품을 산다"라면 명사는 사용자·주문·상품. 이 셋이 보통 세 개의 테이블이 됩니다.
명사 먼저, 그다음 컬럼. 반대로(컬럼 먼저) 하면 설계할수록 엉키기 쉽습니다.
먼저 답해야 할 세 가지
- 각 대상에 어떤 컬럼과 타입이 필요한가? 사용자는 email(문자열)과 생성 시각(타임스탬프), 주문은 금액(숫자)과 상태(문자열).
- 무엇과 무엇이 연결되는가? 한 사용자는 여러 주문을 가진다(1대다). 한 주문은 여러 상품을 포함한다(다대다, 중간 테이블 필요).
- 자주 검색되는 컬럼은? email로 사용자를 자주 찾는다면 email에 인덱스를 두어 검색을 빠르게 유지합니다.
AI에게 이렇게 말하세요
명사 목록·컬럼·관계를 정리한 뒤 AI에게 스키마와 마이그레이션을 생성하게 하고, 다음을 명시적으로 요구하세요.
- 모든 테이블에
id·created_at·updated_at을 두고, 시각은 UTC로 저장. - 올바른 타입 사용(금액을 문자열로, 불리언을 "0"/"1" 문자열로 저장하지 않기).
- 관계는 외래 키로 표현하고, 검색하는 컬럼에 인덱스를 둔다.
- 마이그레이션은 롤백 가능해야 한다(up이 있으면 down도).
예: 단순한 주문 시스템
한 사용자는 여러 주문을 가지고, 한 주문은 여러 '주문 항목'으로 구성되며, 각 항목은 하나의 상품을 가리킵니다. 가운데의 ORDER_ITEM이 '다대다'를 처리하는 중간 테이블입니다.
초보자가 빠지는 함정
- 거대한 한 테이블에 전부 담기: 컬럼이 폭발하고 한 곳의 변경이 전체에 파급. 필요하면 분리.
- 전부 문자열 타입: 합계·정렬·크기 비교가 나중에 괴로워집니다.
- 시각을 UTC로 저장하지 않기: 시간대를 넘으면 버그 확정. 표시할 때 로컬로 변환하면 됩니다.
- 처음부터 과도한 설계: 쓸 것을 만들고, 필요해지면 추가. YAGNI.
다음 단계
- 개념을 다집니다: 데이터베이스 Database
- 실제로 쓸 데이터베이스 선택: 데이터베이스 선택: D1 vs Postgres vs SQLite
자주 묻는 질문
데이터베이스 설계를 완전히 AI에 맡기고 저는 아무 생각도 안 해도 되나요?
권하지 않습니다. 적어도 ‘무엇을 저장할지(명사)와 어떻게 연결되는지’는 직접 나열해야 하며, 그것은 당신만 아는 업무 지식입니다. 그걸 명확히 해 AI에 스키마를 생성하게 하면 제품에 맞습니다. 아니면 AI는 일반적 추측만 하게 되어 나중에 바꾸기가 괴롭습니다.
처음부터 데이터베이스를 완벽하게 설계해야 하나요?
아닙니다. 실제로 쓸 컬럼과 관계만 만들고(YAGNI) 필요할 때 더합니다. 다만 ‘형태’는 처음에 맞추는 게 좋습니다. 금액은 숫자, 시각은 UTC, 자주 조회하는 컬럼에 인덱스—이런 건 나중에 바꾸는 비용이 큽니다.
참고 자료
- PostgreSQL Documentation — PostgreSQL Global Development Group
- SQLite Documentation — SQLite
CRM 경로 다음 단계: 인증 →