본문 바로가기
C.W.K.
Stream
Lesson 01 of 10 · published

데이터베이스는 무엇을 맡는가

~15 min · foundations, concepts

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

정확히 기억하는 시스템

데이터베이스는 구조를 갖춘 정보를 정확하게 기억하는 소프트웨어야. 프로그램이 갑자기 죽거나 컴퓨터를 다시 켜도, 수백 명이 한꺼번에 달려들어도 약속한 데이터를 지켜야 해. 저장된 정보에 색인을 만들어 두면 필요한 답도 ms 단위로 찾아줘. 이 역할을 맡길 곳이 없으면 CSV를 뒤지다가 결국 “어느 스프레드시트가 진짜야?”라는 회의부터 열게 돼.

파일 보관함과 데이터베이스를 가르는 건 엔진이 보장하는 네 가지 약속이야. 구조는 열마다 자료형을 정하고, 정합성은 규칙을 어긴 값이 들어오지 못하게 막아. 동시성은 여러 사람이 함께 써도 데이터가 깨지지 않게 조율하고, 지속성은 COMMIT이 끝난 뒤 1ms 만에 전원이 나가도 확정된 변경을 지켜.

앞으로 계속 쓸 세 낱말

이 퀘스트의 모든 개념은 테이블, , 에서 시작해. 테이블은 같은 구조의 데이터를 모으고, 행은 개별 기록 하나를 나타내며, 열은 자료형이 정해진 속성을 담아. 관계형 이론의 relation, tuple, attribute가 각각 이 셋에 대응하지. SQL은 이 구조를 만들고 그 안의 데이터에 질문하는 언어야.

출발점과 도착점

PostgreSQL 경험은 전혀 없다고 보고 출발할게. 터미널에 익숙하면 편하지만 필수는 아니야. 예제는 그대로 실행할 수 있는 psql 세션으로 준비했어. 끝까지 가면 스키마를 설계하고, 윈도 함수를 쓰고, EXPLAIN 결과를 읽으며, 격리 수준을 근거 있게 고를 수 있게 돼.

Code

작은 도서관 데이터베이스·sql
-- 테이블 한 개, 행 세 개, 쿼리 한 번 — 데이터베이스의 전체 호.
CREATE TABLE books (
    id    INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    title TEXT NOT NULL,
    genre TEXT,
    year  INTEGER CHECK (year BETWEEN 1450 AND 2100)
);

INSERT INTO books (title, genre, year) VALUES
    ('The Pragmatic Programmer', 'tech', 2019),
    ('Designing Data-Intensive Applications', 'tech', 2017),
    ('The Three-Body Problem', 'sci-fi', 2008);

SELECT title, year
FROM   books
WHERE  genre = 'tech'
ORDER  BY year DESC;
같은 내용을 깨지기 쉬운 CSV에 담으면·text
# Postgres 도입 전 너네 팀이 쓰던 '데이터베이스'.
books.csv
id,title,genre,year
1,"The Pragmatic Programmer",tech,2019
2,"Designing Data-Intensive Applications",tech,2017
3,"Three-Body Problem",scifi,2008          <-- 오타: sci-fi 여야 함
4,"Foundation",sci-fi,                     <-- year 누락
5,"Dune",sci-fi,1965,extra                 <-- 컬럼 깨짐

External links

Exercise

PostgreSQL을 로컬에 설치해. brew install postgresql@17이나 공식 설치 파일을 쓰면 돼. psql에서 위 books 테이블을 만들고, 소장한 책 두 권을 더 INSERT해봐. 연도가 1200인 책도 넣어 보고 CHECK 제약이 어떤 오류로 거절하는지 정확히 읽어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.