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 studioSQL vs Prisma 최종 비교
| 작업 | 순수 SQL | Prisma |
|---|---|---|
| 유저 조회 | SELECT * FROM users WHERE id = 1 | prisma.user.findUnique({ where: { id: 1 }}) |
| 관계 조회 | 복잡한 JOIN 쿼리 필요 | include: { posts: true } |
| 타입 안전 | 런타임 에러 | 컴파일 타임 체크 |
| 자동완성 | 문자열이라 불가 | IDE 완벽 지원 |
| 마이그레이션 | 수동 SQL 관리 | 자동 생성 및 버전 관리 |
결론: Prisma를 사용하면 SQL을 직접 작성하지 않고도 타입 안전하고 직관적인 방식으로 데이터베이스를 다룰 수 있습니다. 특히 TypeScript 프로젝트에서 그 진가를 발휘합니다.
CC
클론코딩 팀
튜토리얼 기반 학습의 새로운 기준을 만들어가는 클론코딩입니다.
개발 교육콘텐츠 크리에이터