개발·튜토리얼

개발 중 - 스키마 변경 후 DB 동기화

SQLite는 파일 기반의 관계형 데이터베이스입니다. 일반적인 데이터베이스(MySQL, PostgreSQL)와 달리 별도의 서버가 필요 없습니다.

CC
클론코딩 팀
3분 읽기

SQLite 완벽 가이드

SQLite란?

SQLite는 파일 기반의 관계형 데이터베이스입니다. 일반적인 데이터베이스(MySQL, PostgreSQL)와 달리 별도의 서버가 필요 없습니다.

┌─────────────────────────────────────────────────────────┐
│                    일반 데이터베이스                      │
│  [앱] → [네트워크] → [DB 서버 프로세스] → [데이터 파일]    │
└─────────────────────────────────────────────────────────┘
 
┌─────────────────────────────────────────────────────────┐
│                       SQLite                            │
│  [앱] → [라이브러리] → [단일 파일 (database.db)]          │
└─────────────────────────────────────────────────────────┘

SQLite의 핵심 특징

특징설명
서버리스별도 설치/실행 없이 파일 하나로 동작
제로 설정설정 파일, 포트, 사용자 계정 불필요
단일 파일모든 데이터가 .db 파일 하나에 저장
경량라이브러리 크기 약 600KB
트랜잭션 지원ACID 완벽 지원

재미있는 사실: SQLite는 세계에서 가장 많이 배포된 데이터베이스입니다. 모든 스마트폰, 웹 브라우저, 대부분의 TV와 자동차에 내장되어 있습니다.

SQLite가 적합한 경우

  • 모바일 앱 (iOS/Android 기본 내장)
  • 데스크톱 앱 (Electron, VS Code 등)
  • 개발/테스트 환경
  • 소규모 웹사이트 (일 10만 요청 이하)
  • 임베디드 시스템 (IoT 기기)
  • 로컬 캐시/설정 저장

SQLite가 부적합한 경우

  • 동시 쓰기가 많은 대규모 서비스
  • 여러 서버에서 동시 접근
  • 실시간 데이터 동기화 필요

Prisma 완벽 가이드

ORM이란?

ORM(Object-Relational Mapping)은 데이터베이스 테이블을 프로그래밍 객체로 매핑하는 기술입니다.

┌──────────────────┐         ┌──────────────────┐
│   DB 테이블       │         │   코드 객체       │
├──────────────────┤   ORM   ├──────────────────┤
│ users            │ ←─────→ │ User             │
│ - id             │         │ - id: number     │
│ - email          │         │ - email: string  │
│ - name           │         │ - name: string   │
└──────────────────┘         └──────────────────┘

Prisma의 3가지 핵심 구성요소

1. Prisma Schema

데이터 모델을 정의하는 설계도 역할을 합니다.

// prisma/schema.prisma
 
datasource db {
  provider = "sqlite"
  url      = "file:./dev.db"
}
 
generator client {
  provider = "prisma-client-js"
}
 
model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  posts     Post[]
  createdAt DateTime @default(now())
}
 
model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  Int
}

2. Prisma Client

스키마에서 자동 생성된 타입 안전한 쿼리 빌더입니다.

import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
 
// CREATE - 생성
const newUser = await prisma.user.create({
  data: {
    email: 'kim@example.com',
    name: '김철수',
  }
})
 
// READ - 조회 (관계 포함)
const user = await prisma.user.findUnique({
  where: { email: 'kim@example.com' },
  include: { posts: true }
})
 
// UPDATE - 수정
const updated = await prisma.user.update({
  where: { id: 1 },
  data: { name: '김영수' }
})
 
// DELETE - 삭제
const deleted = await prisma.user.delete({
  where: { id: 1 }
})

3. Prisma Migrate

스키마 변경을 DB에 적용하는 마이그레이션 도구입니다.

# 개발 중 - 스키마 변경 후 DB 동기화
npx prisma migrate dev --name add_user_role
 
# 프로덕션 - 마이그레이션 적용
npx prisma migrate deploy
 
# GUI로 데이터 확인
npx prisma studio

SQL vs Prisma 최종 비교

작업순수 SQLPrisma
유저 조회SELECT * FROM users WHERE id = 1prisma.user.findUnique({ where: { id: 1 }})
관계 조회복잡한 JOIN 쿼리 필요include: { posts: true }
타입 안전런타임 에러컴파일 타임 체크
자동완성문자열이라 불가IDE 완벽 지원
마이그레이션수동 SQL 관리자동 생성 및 버전 관리

결론: Prisma를 사용하면 SQL을 직접 작성하지 않고도 타입 안전하고 직관적인 방식으로 데이터베이스를 다룰 수 있습니다. 특히 TypeScript 프로젝트에서 그 진가를 발휘합니다.

CC

클론코딩 팀

튜토리얼 기반 학습의 새로운 기준을 만들어가는 클론코딩입니다.

개발 교육콘텐츠 크리에이터