데이터베이스 프롬프트

데이터베이스 설계와 SQL 생성에 AI를 활용하는 방법을 배웁니다. ERD, 테이블 설계, 쿼리 작성을 AI로 도와보세요.

개요

데이터베이스 설계와 SQL 쿼리 작성을 AI의 도움으로 효율적으로 수행할 수 있습니다. 이 가이드에서는 데이터베이스 관련 프롬프트를 활용하는 방법을 배웁니다.

📋 데이터베이스 AI 활용 영역
  • ERD 설계: 테이블 구조 설계
  • SQL 쿼리: SELECT, INSERT, UPDATE, DELETE
  • 마이그레이션: 스키마 변경 스크립트
  • 최적화: 인덱스, 쿼리 최적화
  • ORM 모델: Prisma, TypeORM, SQLAlchemy
  • 데이터 마이그레이션: 데이터 변환, 이전 스크립트

지원 데이터베이스

AI는 다양한 데이터베이스 시스템에서 활용할 수 있습니다.

  • 관계형 데이터베이스: PostgreSQL, MySQL, MariaDB, SQLite, Oracle
  • 문서 데이터베이스: MongoDB, CouchDB
  • 키-값 저장소: Redis, Amazon DynamoDB
  • 시계열 데이터베이스: InfluxDB, TimescaleDB
  • 그래프 데이터베이스: Neo4j, ArangoDB
💡 데이터베이스 선택 가이드
  • 트랜잭션 필수: PostgreSQL, MySQL (ACID 준수)
  • 유연한 스키마: MongoDB (다양한 데이터 구조)
  • 고속 캐시: Redis (메모리 기반)
  • 간단한 프로토타이프: SQLite (파일 기반, 설정 불필요)

AI 기반 데이터베이스 설계 워크플로우

AI를 활용한 데이터베이스 개발은 반복적인 프롬프트 사이클을 통해 요구사항 분석부터 마이그레이션까지 전 과정을 효율적으로 수행합니다.

요구사항 비즈니스 규칙 정의 AI 프롬프트 (스키마 설계) 테이블 구조 생성 ERD / 스키마 정규화된 테이블 AI 프롬프트 (쿼리 최적화) 인덱스 및 성능 개선 최적화된 쿼리 인덱스 + 실행 계획 AI 프롬프트 (마이그레이션) 스키마 변경 관리 마이그레이션 스크립트 롤백 포함 변경 이력 반복 개선 사이클 AI 프롬프트 기반 반복적 데이터베이스 개발 워크플로우

AI 기반 데이터베이스 설계 워크플로우 — 요구사항부터 마이그레이션까지의 반복 사이클

스키마 설계

데이터베이스 스키마를 설계합니다. AI는 요구사항을 분석하여 최적의 테이블 구조를 제안합니다.

테이블 설계 요청

AI에게 요청
블로그 데이터베이스 스키마를 설계해줘.

요구사항:
- users: id, email, password, name, created_at
- posts: id, title, content, author_id, created_at, updated_at
- comments: id, post_id, user_id, content, created_at
- categories: id, name, slug
- post_categories: post_id, category_id (다대다)

각 테이블의:
- 기본 키
- 외래 키
- 인덱스
- 데이터 타입

ERD 생성 요청

텍스트 기반 ERD나 다이어그램을 요청할 수 있습니다.

AI에게 요청
전자상거래 데이터베이스 ERD를 설계해줘.

엔티티:
- customers: 고객 정보 (id, name, email, phone, address)
- products: 상품 정보 (id, name, price, stock, category_id)
- orders: 주문 (id, customer_id, order_date, status, total_amount)
- order_items: 주문 상세 (id, order_id, product_id, quantity, price)
- categories: 카테고리 (id, name, parent_id)
- reviews: 리뷰 (id, product_id, customer_id, rating, comment)

출력:
- Mermaid 다이어그램 형식
- 각 관계의 Cardinality 명시
- 권장 인덱스 목록

정규화 요구사항

AI에게 정규화 수준을 명시하면 더 정확한 설계를 받을 수 있습니다.

💡 정규화 수준 지정
  • 1NF (제1정규형): 원자값만 허용 (복합 값 금지)
  • 2NF (제2정규형): 부분 함수 종속 제거
  • 3NF (제3정규형): 이행 함수 종속 제거
  • BCNF (보이스-코드 정규형): 결정자 함수 종속 보장
AI에게 요청
3NF 정규화를 적용한 스키마를 설계해줘:
- 직원 테이블 (부서, 직책, 급여 정보 포함)
- 부서별 급여 등급 테이블
- 각 정규화 단계별 설명 포함

SQL 쿼리 생성

다양한 SQL 쿼리를 생성합니다. 구체적인 요구사항을 명시할수록 더 정확한 결과를 얻습니다.

SELECT 쿼리 요청

AI에게 요청
다음 조건의 SELECT 쿼리를 작성해줘:

테이블: posts
조인: users (author), categories
필터: 최근 30일 게시물, 공개 상태
정렬: 작성일 내림차순
페이지네이션: page, limit 파라미터

JOIN 쿼리 요청

AI에게 요청
게시물과 작성자 정보를 JOIN하는 쿼리를 작성해줘.

필요한 정보:
- 게시물 제목, 내용
- 작성자 이름, 이메일
- 카테고리 이름
- 댓글 수

집계 쿼리 요청

AI에게 요청
주문 데이터를 분석하는 쿼리를 작성해줘:

요구사항:
1. 일별 주문 수와 총 금액
2. 카테고리별 매출 순위 (상위 5개)
3. 고객별 총 주문 금액 (VIP 고객 추출)
4. 평균 주문 금액, 최대/최소 주문 금액
5. 월별 성장률 (전월 대비)

사용 테이블: orders, order_items, products, categories

서브쿼리 요청

AI에게 요청
다음 조건의 서브쿼리를 작성해줘:

1. 평균보다 많은 주문을 한 고객 조회
2. 최근 6개월 내 거래 없는 비활성 고객 조회
3. 재고가 없는 상품의 주문 건 조회
4. 각 카테고리에서 가장 판매량이 많은 상품 조회

테이블: customers, orders, order_items, products

Window 함수 요청

AI에게 요청
Window 함수를 사용한 분석 쿼리를 작성해줘:

1. 행 번호: 주문 내림차순 정렬, 번호 부여
2. 누적 합계: 일별 매출의 누적 합계
3. 이동 평균: 최근 3개월 평균 매출
4. 순위: 카테고리별 매출 순위
5. 비율: 전체 매출 대비 점유율

데이터베이스: PostgreSQL

데이터베이스별 차이점

⚠️ 데이터베이스별 SQL 차이
  • MySQL: LIMIT 지원, 문자열 연결 CONCAT()
  • PostgreSQL: LIMIT/OFFSET, 문자열 연결 || 또는 CONCAT()
  • SQLite: LIMIT 지원, 표현식 제한적
  • SQL Server: TOP, OFFSET-FETCH

마이그레이션

스키마 마이그레이션 스크립트를 생성합니다. 데이터베이스 종류와 ORM을 명시하면 해당 환경에 맞는 스크립트를 생성합니다.

마이그레이션 요청

AI에게 요청
users 테이블에 bio 컬럼을 추가하는
마이그레이션을 작성해줘.

요구사항:
- 컬럼명: bio
- 타입: VARCHAR(500)
- 기본값: NULL
- ALTER TABLE 문으로

Prisma 마이그레이션

AI에게 요청
Prisma 스키마를 다음과 같이 변경하는 마이그레이션:

1. User 모델에 role 필드 추가 (기본값: 'user')
2. Post 모델에 published 필드 추가 (기본값: false)
3. Comment 모델 추가
4. 기존 데이터 마이그레이션 스크립트 포함

환경: PostgreSQL + Prisma

데이터 마이그레이션

AI에게 요청
데이터 마이그레이션 스크립트를 작성해줘:

시나리오:
- users 테이블의 name 필드를 first_name, last_name으로 분리
- email을 소문자로 통일
- created_at이 NULL인 레코드에 현재 시간 설정
- 마이그레이션 전후 데이터 검증 쿼리 포함

데이터베이스: MySQL

롤백 스크립트

⚠️ 롤백 계획 필수
  • 백업: 마이그레이션 전 데이터 백업
  • 순서: 마이그레이션 → 검증 → 롤백 스크립트 순서
  • 테스트: 개발 환경에서 충분한 테스트
AI에게 요청
users 테이블에 email_verified 컬럼을 추가하는
마이그레이션과 대응되는 롤백 스크립트를 작성해줘:

- 컬럼: email_verified (BOOLEAN, 기본값 FALSE)
- 롤백: 컬럼 삭제
- 검증 쿼리 포함

ORM 모델

ORM 모델 코드를 생성합니다. 사용 중인 ORM과 프로그래밍 언어를 명시하면 해당 환경에 맞는 코드를 생성합니다.

Prisma 모델 요청

AI에게 요청
Prisma 스키마를 작성해줘.

테이블:
- User: id, email, name, posts, comments
- Post: id, title, content, author, comments, categories
- Comment: id, content, post, author

관계:
- User 1:N Post
- User 1:N Comment
- Post 1:N Comment

TypeORM 모델 요청

AI에게 요청
TypeORM Entity 클래스를 작성해줘:

환경: TypeScript + PostgreSQL

">엔- @Entity('users')
- @PrimaryGeneratedColumn()
- @Column() with type, length, nullable
- @OneToMany(), @ManyToOne() 관계
- @CreateDateColumn(), @UpdateDateColumn()

SQLAlchemy 모델 요청

AI에게 요청
SQLAlchemy 모델 클래스를 작성해줘:

환경: Python + PostgreSQL

테이블:
- User: id, email, name, password_hash, created_at
- Post: id, title, content, author_id, created_at

요구사항:
- Base 상속
- Column, Integer, String, DateTime 타입
- relationship(), backref()
- relationship 정의 (lazy='select')

Drizzle ORM 모델 요청

AI에게 요청
Drizzle ORM 스키마를 작성해줘:

환경: TypeScript + drizzle-orm + PostgreSQL

테이블:
- users: id, email, name, createdAt
- posts: id, title, content, authorId, createdAt

요구사항:
- pgTable 사용
- serial, varchar, timestamp 타입
- primaryKey, references()
- relations 정의

최적화

쿼리 최적화 권장을 받습니다. EXPLAIN 결과나 Slow Query Log를 공유하면 더 정확한 진단이 가능합니다.

최적화 요청

AI에게 요청
다음 SQL 쿼리를 최적화해줘.

```sql
SELECT * FROM posts
WHERE created_at > '2024-01-01'
AND author_id IN (SELECT id FROM users WHERE active = true)
ORDER BY created_at DESC
LIMIT 100;
```

인덱스 제안과 함께

인덱스 설계 요청

AI에게 요청
게시판 기능에 대한 인덱스 전략을 설계해줘.

주요 쿼리:
1. SELECT * FROM posts WHERE category_id = ? ORDER BY created_at DESC
2. SELECT * FROM posts WHERE author_id = ?
3. SELECT * FROM posts WHERE title LIKE '%검색어%'
4. SELECT COUNT(*) FROM posts WHERE status = 'published'
5. SELECT * FROM posts WHERE created_at BETWEEN ? AND ?

데이터 특성:
- 전체 게시물 수: 약 100만 건
- 일일 신규 게시물: 약 1,000건
- 검색 기능 자주 사용

쿼리 분석 요청

AI에게 요청
다음 EXPLAIN 결과를 분석해줘:

```sql
EXPLAIN ANALYZE
SELECT u.name, COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.created_at > '2024-01-01'
GROUP BY u.id;
```

결과:
-> Aggregate  (cost=1500.25..1500.30 rows=1 width=16)
   -> Nested Loop Left Join  (cost=5.50..1200.00 rows=50000 width=24)

파티셔닝 설계

💡 파티셔닝이 필요한 상황
  • 대용량 테이블: 수천만 건 이상
  • 범위 쿼리: 날짜/지역별 조회 빈번
  • 데이터 보관: 과거 데이터 별도 관리
  • 성능 이슈: 인덱스 크기 증가
AI에게 요청
PostgreSQL 파티셔닝 전략을 설계해줘:

테이블: logs
- id, event_type, payload, created_at
- 일일 약 100만 건 INSERT
- 주로 최근 30일 데이터 조회
- 1년 경과 후 삭제

요구사항:
- 파티션 키: created_at (월별)
- 파티션 관리 스크립트
- 인덱스 전략

보안

데이터베이스 보안 설계를 요청합니다.

권한 관리

AI에게 요청
PostgreSQL 권한 설계 방안을 작성해줘:

역할:
- admin: 전체 권한
- developer: 스키마 생성, 자신의 테이블 관리
- application: SELECT, INSERT, UPDATE, DELETE만
- readonly: SELECT only

요구사항:
-ROLLEN 생성 스크립트
- GRANT/REVOKE 문
- 행 수준 보안 (RLS) 포함

SQL 인젝션 방지

⚠️ SQL 인젝션 주의사항
  • 파라미터화 쿼리: Prepared Statement 사용
  • 입력 검증: 화이트리스트 방식으로 검증
  • ORM 사용: ORM이 자동으로 이스케이프
  • 최소 권한: 애플리케이션 계정 권한 최소화

백업 및 복원

백업 및 복원 전략을 설계합니다.

백업 전략 요청

AI에게 요청
PostgreSQL 백업 전략을 설계해줘:

요구사항:
- 일일 전체 백업 (새벽 2시)
- 시간별 증분 백업
- 30일 보관
- 원격지 저장 (S3)
- 복원 시간 목표 (RTO): 4시간
- 복원 지점 목표 (RPO): 1시간

출력:
- 백업 스크립트 (cron)
- 복원 테스트 절차
- 검증 쿼리

트랜잭션 관리

트랜잭션 처리 패턴을 요청합니다.

트랜잭션 패턴

AI에게 요청
주문 처리 트랜잭션을 작성해줘:

시나리오:
1. 재고 확인
2. 재고 차감
3. 주문 생성
4. 결제 처리
5. 재고 부족 시 전체 롤백

요구사항:
- 격리 수준: SERIALIZABLE
-Deadlock 방지
- 재시도 로직
- TypeScript + TypeORM

다음 단계

데이터베이스 개발에 대해 더 자세히 배워보세요!

REST API 구축

DB와 연동된 API 구축

REST API 구축 →

백엔드 Vibe Coding

백엔드 개발 가이드

백엔드 Vibe Coding →

API 디자인

API 설계 방법

API 디자인 →

핵심 정리

  • 스키마 설계: 테이블, 컬럼, 관계 정의
  • SQL 쿼리: SELECT, JOIN, 필터링
  • 마이그레이션: 스키마 변경 스크립트
  • ORM 모델: Prisma, SQLAlchemy
  • 최적화: 인덱스, 쿼리 성능