Ch.9 바이브코더 용어집 — 웹 · 아키텍처 · 보안
데이터베이스
데이터는 어디에 저장될까?
인스타그램의 게시글, 쿠팡의 주문 내역, 넷플릭스의 시청 기록 — 이 모든 데이터는 데이터베이스에 저장됩니다.
수십억 개의 데이터를 어떻게 빠르고 안전하게 관리할까?
데이터베이스는 디지털 창고입니다. 체계적으로 정리하고, 빠르게 찾고, 안전하게 보관합니다.
핵심 내용
데이터베이스는 디지털 세계의 창고입니다
AI는 데이터 없이는 아무것도 할 수 없습니다. Ch1에서 배웠듯이, LLM은 수조 개의 텍스트 데이터로 훈련되었습니다. 이 데이터를 어디에 저장하고, 어떻게 빠르게 꺼낼까요? 바이브코더가 앱을 만들면 사용자 정보, 대화 기록, 학습 진도 등을 반드시 저장해야 합니다. 데이터베이스는 프로그래밍의 필수 인프라입니다.
엑셀 시트를 떠올려보세요. 행과 열로 데이터를 정리하죠? 데이터베이스는 그것의 초대형·초고속 버전입니다.
DB, SQL, NoSQL, Table, Schema, Migration, CRUD, ORM, Query, Index, PK/FK, Join, Transaction, Seed
데이터베이스는 크게 두 진영으로 나뉩니다. 엑셀처럼 깔끔한 표로 관리하는 SQL 진영과, 자유로운 형태로 저장하는 NoSQL 진영입니다. 둘 중 어떤 것이 더 좋다는 건 없습니다. AI에게 '어떤 DB가 좋을까?' 물어볼 때, 데이터 특성에 따라 다르다는 것을 알아야 올바른 판단을 할 수 있습니다.
DB(Database) — 데이터를 구조화하여 저장하는 시스템입니다. PostgreSQL, MySQL, MongoDB 등이 있습니다.
SQL(Structured Query Language) — 데이터베이스와 대화하는 언어입니다. `SELECT * FROM users WHERE age > 20` 처럼 씁니다. NoSQL — SQL이 아닌 방식의 DB입니다. MongoDB(문서형), Redis(키-값형) 등. 유연하지만 관계 표현이 약합니다.
Table(테이블) — 엑셀 시트 하나와 같습니다. 행(Row)은 하나의 데이터, 열(Column)은 속성입니다. Schema(스키마) — 데이터 구조의 설계도입니다. '사용자 테이블에는 이름, 이메일, 나이 컬럼이 있다'는 것이 스키마입니다.
SQL DB = 테이블·관계 기반 (PostgreSQL, MySQL) NoSQL DB = 유연한 구조 (MongoDB, Redis) Table = 엑셀 시트 (행 = 데이터, 열 = 속성) Schema = 데이터 구조 설계도
CRUD — 데이터의 4가지 기본 동작입니다. • Create (생성) — INSERT • Read (조회) — SELECT • Update (수정) — UPDATE • Delete (삭제) — DELETE
Query(쿼리) — DB에 보내는 질문/명령입니다. '20세 이상 사용자 보여줘' = `SELECT * FROM users WHERE age >= 20` ORM(Object-Relational Mapping) — SQL 대신 코드로 DB를 다루는 도구입니다. Prisma, SQLAlchemy 등. 영어 대신 한국어로 주문하는 것과 같습니다.
Migration(마이그레이션) — DB 구조를 버전 관리하는 것입니다. '사용자 테이블에 전화번호 컬럼 추가' 같은 변경을 기록하고 실행합니다. DB의 Git이라고 생각하세요. Seed(시드) — 테스트용 초기 데이터를 넣는 것입니다. 빈 식당에 샘플 메뉴를 채워넣는 것과 같습니다.
CRUD = Create/Read/Update/Delete (4대 동작) Query = DB에 보내는 질문 ORM = 코드로 DB 다루기 (SQL 없이) Migration = DB 구조 버전 관리
Index(인덱스) — 데이터 검색을 빠르게 하는 목차입니다. 책의 색인(찾아보기)과 같습니다. 없으면 처음부터 끝까지 뒤져야 합니다.
PK(Primary Key, 기본키) — 각 행을 유일하게 식별하는 값입니다. 주민등록번호와 같습니다. FK(Foreign Key, 외래키) — 다른 테이블의 PK를 참조하는 값입니다. '이 주문은 3번 사용자의 것'처럼 테이블 간 관계를 연결합니다.
Join(조인) — 여러 테이블을 연결해서 조회하는 것입니다. 사용자 테이블 + 주문 테이블을 합쳐 '누가 뭘 주문했는지' 볼 수 있습니다. Transaction(트랜잭션) — '전부 성공하거나, 전부 취소하거나'. 은행 이체처럼 중간에 실패하면 전체를 되돌립니다.
Index = 검색 속도 향상 (책의 색인) PK = 고유 식별자 / FK = 테이블 간 연결 Join = 여러 테이블 합쳐 조회 Transaction = 전부 성공 or 전부 취소
Python에는 SQLite라는 가벼운 DB가 내장되어 있습니다. 설치 없이 바로 사용할 수 있어 프로토타이핑에 완벽합니다. CRUD 4가지 동작을 코드로 확인해봅시다.
import sqlite3
# DB 연결 (파일이 없으면 자동 생성)
conn = sqlite3.connect("my_app.db")
cursor = conn.cursor()
# Create — 테이블 만들기
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE
)
""")
# Create — 데이터 삽입
cursor.execute(
"INSERT INTO users (name, email) VALUES (?, ?)",
("짓친", "jit@example.com")
)
# Read — 데이터 조회
cursor.execute("SELECT * FROM users WHERE name = ?", ("짓친",))
print(cursor.fetchone()) # → (1, '짓친', 'jit@example.com')
conn.commit() # 변경사항 저장
conn.close() # 연결 종료SQL의 ?는 파라미터 바인딩입니다. 사용자 입력을 직접 넣지 않아 SQL Injection을 방지합니다 — 보안 섹션에서 자세히 배웁니다
CRUD에서 R이 의미하는 것은?
DB 구조 변경을 버전 관리하는 것을 무엇이라 하는가?
Transaction은 중간에 실패해도 부분적으로 적용된다
데이터 검색 속도를 높이기 위해 테이블에 추가하는 것은?
데이터베이스
정리 노트
데이터베이스 핵심 용어 정리
DB 종류 & 구조
- SQL DB
- 테이블·관계 기반 (PostgreSQL, MySQL) — 엑셀 시트형
- NoSQL DB
- 유연한 구조 (MongoDB, Redis) — 자유 형식 저장
- Table / Schema
- Table = 엑셀 시트, Schema = 데이터 구조 설계도
CRUD & 쿼리
- CRUD
- Create·Read·Update·Delete — 데이터 4대 동작
- Query
- DB에 보내는 질문/명령 (SELECT, INSERT 등)
- ORM
- 코드로 DB 다루기 — SQL 없이 프로그래밍 언어로 조작
관계 & 안전
- PK / FK
- PK = 고유 식별자, FK = 테이블 간 연결 고리
- Join
- 여러 테이블을 합쳐서 조회 (누가 뭘 주문했는지)
- Transaction
- 전부 성공 or 전부 취소 — 은행 이체처럼 안전 보장
- Index
- 검색 속도를 높이는 목차 (책의 색인)
Migration은 DB의 Git이다 — DB 구조 변경을 버전 관리합니다
핵심 정리
- 1SQL DB(테이블·관계) vs NoSQL DB(유연한 구조)
- 2CRUD = Create/Read/Update/Delete
- 3Migration은 DB의 Git, Transaction은 전부 or 전무
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 레슨 시작