앱을 만들면 반드시 데이터를 어딘가에 저장해야 합니다. 회원 정보, 게시글, 주문 내역, 설정값 — 이 모든 것을 담는 곳이 데이터베이스(Database, DB)입니다. 엑셀 스프레드시트를 생각하면 90%는 이해됩니다.
데이터베이스 = 여러 장의 엑셀 시트
엑셀 파일 하나에 여러 개의 시트(Sheet)가 있듯이, 데이터베이스 하나에 여러 개의 테이블(Table)이 있습니다. 각 테이블은 행(Row, 한 건의 데이터)과 열(Column, 데이터의 속성)로 이루어져 있습니다.
| 엑셀 용어 | 데이터베이스 용어 | 예시 |
|---|---|---|
| 파일 | 데이터베이스(Database) | leanx_db |
| 시트 | 테이블(Table) | users, posts, orders |
| 행(가로줄) | 행/레코드(Row / Record) | 사용자 한 명의 데이터 |
| 열(세로줄) | 열/컬럼(Column) | id, name, email, created_at |
| 셀 값 | 값(Value) | "김바이브", 42, true |
SQL — 데이터베이스에게 말을 거는 언어
SQL(Structured Query Language, 구조적 쿼리 언어)은 데이터베이스에 명령을 내리는 언어입니다. 영어 문장처럼 생겨서, 코딩 경험이 없어도 읽으면 대략 무슨 뜻인지 알 수 있습니다.
기본 SQL 명령 4가지 — CRUD
-- CREATE (생성): 새 사용자 추가
INSERT INTO users (name, email, is_premium)
VALUES ('김바이브', '[email protected]', false);
-- READ (조회): 모든 사용자 목록 가져오기
SELECT id, name, email FROM users
WHERE is_premium = true
ORDER BY created_at DESC
LIMIT 10;
-- UPDATE (수정): 특정 사용자 정보 변경
UPDATE users
SET is_premium = true
WHERE id = 42;
-- DELETE (삭제): 특정 사용자 삭제
DELETE FROM users
WHERE id = 42;
관계형 DB vs 비관계형 DB
데이터베이스의 종류는 크게 두 가지입니다. 관계형(Relational) DB는 테이블 구조로 데이터를 저장하고 SQL을 씁니다(PostgreSQL, MySQL, SQLite). 비관계형(Non-relational, NoSQL) DB는 JSON처럼 유연한 구조로 저장합니다(MongoDB, Firebase Firestore). 바이브코딩으로 만드는 앱 대부분은 Supabase(PostgreSQL 기반)나 Firebase를 씁니다.
기본 키와 외래 키
각 행을 고유하게 식별하는 열을 기본 키(Primary Key, PK)라고 합니다. 보통 'id' 컬럼이 그 역할을 합니다. 외래 키(Foreign Key, FK)는 다른 테이블의 기본 키를 참조해서 테이블 간의 관계를 만드는 열입니다. 예를 들어 'posts' 테이블의 'user_id'가 'users' 테이블의 'id'를 참조합니다.
테이블 관계 예시 — 게시글과 작성자
-- users 테이블 (기본 키: id)
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL
);
-- posts 테이블 (외래 키: user_id → users.id)
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
content TEXT,
user_id INTEGER REFERENCES users(id),
created_at TIMESTAMP DEFAULT NOW()
);
-- JOIN: 게시글과 작성자 이름을 함께 조회
SELECT posts.title, users.name AS author
FROM posts
JOIN users ON posts.user_id = users.id;
Supabase나 Firebase를 쓰면 GUI(그래픽 화면)에서 테이블을 만들고 데이터를 직접 보고 수정할 수 있습니다. 처음에는 코드보다 대시보드 화면에서 데이터 구조를 잡는 게 훨씬 편합니다.
바이브코딩할 때: AI에게 DB 구조를 설계해 달라고 할 때 '어떤 테이블이 필요하고, 테이블 간의 관계는 어떻게 되나요?'라고 먼저 물어보세요. AI가 ERD(Entity Relationship Diagram) 수준의 설명과 함께 테이블 구조를 제안해 줍니다. 이 구조를 먼저 이해하고 승인한 뒤에 코드를 생성하게 하면 나중에 DB를 뒤엎는 일을 줄일 수 있습니다.