LeanX

데이터베이스와 SQL 감각

데이터베이스(database)는 데이터를 엑셀 시트처럼 테이블(표) 구조로 저장하고, SQL(Structured Query Language)이라는 언어로 조회·생성·수정·삭제(CRUD)하며, 비개발자도 SELECT·INSERT·WHERE 같은 기본 구문을 읽는 능력만 있으면 AI가 만든 DB 코드를 검토할 수 있습니다.

앱을 만들면 반드시 데이터를 어딘가에 저장해야 합니다. 회원 정보, 게시글, 주문 내역, 설정값 — 이 모든 것을 담는 곳이 데이터베이스(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를 뒤엎는 일을 줄일 수 있습니다.