포스트

데이터베이스 기초 (0) - Introduction

SQL과 관계형 데이터베이스를 기초 문법부터 설계, 성능, 동시성, 운영까지 다루는 데이터베이스 기초 시리즈의 0편입니다. 아홉 편의 전체 구성과 실습 환경, 시리즈를 마쳤을 때의 도달 기준을 정리합니다. 실습은 PostgreSQL 18 Docker container와 psql 기준이며 MySQL 8.4와의 차이도 각 편에서 다룹니다.

데이터베이스 기초 (0) - Introduction

SQL과 관계형 데이터베이스를 기초부터 운영까지 다루는 데이터베이스 기초 시리즈의 0편입니다. 시리즈 구성과 실습 환경, 도달 기준을 정리하며, 본문은 1편부터 시작합니다.

무엇을 다루나

SQL과 관계형 데이터베이스를 기초 문법부터 운영까지 다룹니다. SELECT, INSERT, UPDATE, DELETE 기본 문법에서 시작해 schema 설계, JOIN과 집계, index와 EXPLAIN, transaction과 lock, application 연동, 백업과 권한 관리까지가 범위입니다.

PostgreSQL 편MySQL 편 단편이 설치와 기본 조작을 다뤘습니다. 이 시리즈는 그 다음 단계입니다. 명령을 따라 치는 수준을 넘어 schema를 직접 설계하고, 필요한 query를 작성하고, 문제가 생겼을 때 원인을 진단할 수 있는 상태, 즉 데이터베이스를 실제로 다룰 줄 아는 상태가 목표입니다.

누구를 위한 시리즈인가

  • SELECT는 쳐봤지만 JOIN이 필요한 순간마다 검색에 의존하는 사람
  • table을 나눌지 합칠지, column 타입을 무엇으로 할지 감으로 정하는 사람
  • query가 느려졌을 때 어디를 봐야 할지 모르는 사람

전제 조건은 두 가지입니다. 터미널 기본 조작이 가능해야 하고, Docker로 container를 띄워본 경험이 있어야 합니다. Docker가 처음이라면 Docker 기초 시리즈를 먼저 보면 됩니다.

어떻게 진행하는가

아홉 편으로 진행하며, 순서는 아래와 같습니다.

주제
(1)Relational Model and Basic SQL: table/row/column과 타입, NULL, SELECT/INSERT/UPDATE/DELETE 기본기
(2)Constraints and Schema Design: 제약, 정규화 실용편, 게시판 schema 기본 완성
(3)JOIN: INNER/LEFT JOIN, JOIN과 집계 결합, 다대다와 junction table
(4)Aggregation, Subqueries, and Window Functions: GROUP BY, HAVING, subquery, CTE, window function
(5)Indexes and EXPLAIN: B-tree index 원리, EXPLAIN ANALYZE 읽기, 복합 index
(6)Transactions, Isolation, and Locks: ACID, MVCC, isolation level, deadlock
(7)Using a Database from Application Code: parameterized query, connection pool, ORM, migration
(8)Operations Basics: 백업과 PITR, 권한 관리, monitoring, VACUUM, replication
(9)MySQL vs PostgreSQL and Next Steps: 두 DB의 비교, 선택 기준, RDB 이외의 데이터베이스 개요

1편이 SQL 기본, 2편부터 4편이 설계와 조회의 핵심, 5편과 6편이 성능과 동시성, 7편과 8편이 application 연동과 운영, 9편이 두 DB의 비교와 다음 단계입니다.

실습 환경

실습 기준은 PostgreSQL 18 Docker container와 PostgreSQL 기본 명령줄 client인 psql입니다. 설치와 접속은 PostgreSQL 편에서 다뤘으므로 다시 설명하지 않습니다. 아직 환경이 없다면 1편을 시작하기 전에 PostgreSQL 편을 따라 container 실행과 psql 접속까지 마쳐 두면 됩니다. MySQL로 따라가려는 독자는 MySQL 편으로 환경을 만들고, 각 편의 “MySQL 차이” 섹션에서 달라지는 부분을 확인하면 됩니다.

예제는 시리즈 전체가 게시판 하나를 공유합니다. 사용자 table은 1편에서 만들고, 글과 댓글을 더한 schema를 2편에서 완성하며, 3편에서 태그를 위한 다대다 구조를 더합니다. 이후 모든 편의 query가 같은 데이터를 대상으로 실행됩니다. 편마다 새 예제를 익힐 필요가 없고, 같은 데이터를 설계, 조회, index, lock의 각 관점에서 어떻게 다루는지 비교할 수 있습니다.

어디까지 가는가

시리즈를 마친 독자는 아래 세 가지를 할 수 있어야 합니다.

  1. 글 목록에 글쓴이와 댓글 수를 함께 보여주는 query를 검색 없이 쓸 수 있습니다. 3편에서 다룹니다.
  2. 느린 query를 EXPLAIN으로 진단하고 어떤 index를 만들지 판단할 수 있습니다. 5편에서 다룹니다.
  3. deadlock이 왜 발생하는지 설명하고 예방할 수 있습니다. 6편에서 다룹니다.

세 항목을 포함한 전체 체크리스트는 9편 끝에서 다시 확인합니다.

1편에서는 relational model의 table, row, column과 타입, NULL의 동작, 그리고 SELECT, INSERT, UPDATE, DELETE 기본 문법을 다룹니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.