본문 바로가기

데이터베이스

MySQL 8.4에서 회원과 게시글을 저장하는 작은 게시판을 만들며 SQL의 조회와 집계, JOIN과 서브쿼리, 인덱스와 실행 계획, 제약과 트랜잭션, ERD와 키, 정규화와 물리 설계를 익히고, 공통 코드와 계층, 이력, 소프트 삭제, 상속, JSON, 분산 트랜잭션 같은 운영의 모델까지 공식 문서로 계산한 결과와 함께 따라갑니다.

회원 가입 화면에서 이메일을 넣고 게시판에 글을 쓰면, 그 데이터는 어딘가의 테이블에 행으로 저장됩니다. 그 사이에서 데이터베이스는 같은 이메일로 두 번 가입하지 못하게 막고, 없는 회원이 글을 쓰지 못하게 하며, 두 사람이 동시에 같은 글을 고쳐도 한쪽의 변경이 사라지지 않게 합니다. 이 교재는 왜 쿼리가 갑자기 느려지는지, 통계의 숫자가 왜 원래 데이터와 어긋나는지, 탈퇴한 회원의 이메일로 다시 가입하게 하려면 어떻게 해야 하는지 같은 질문에 차례로 답해 갑니다.

개념마다 회원 게시판의 작은 요구를 정해 두고, 먼저 잘못된 설계가 어떤 결과를 내는지 재현한 뒤 제약과 쿼리로 고칩니다. 본문에 실은 SQL의 결과는 MySQL 8.4의 공식 레퍼런스 매뉴얼과 서버 오류 메시지 참조에 적힌 동작에 따라 손으로 계산한 것이며, 실제 서버에서 실행해 맞춘 출력은 아닙니다. 오류는 ERROR 번호 (SQLSTATE): 메시지의 형식으로 공식 메시지를 옮겼고, 외래 키 오류처럼 긴 메시지는 제약의 이름까지만 싣고 뒤를 줄였습니다. AUTO_INCREMENT의 id처럼 실행의 이력에 따라 달라지는 값과, 데이터와 통계에 따라 달라지는 EXPLAIN의 비용은 결과에서 빼거나 무엇을 확인할지만 적었으므로, 서버의 버전이나 sql_mode, 정렬 규칙, time_zone이 다르면 결과가 달라질 수 있습니다.

실습은 MySQL 8.4 서버에 board_lab 데이터베이스를 만들어 1장부터 이어서 씁니다. 장마다 앞 장이 만든 데이터를 이어 쓰므로 순서대로 실행하는 것이 좋고, 12장 4편은 board_lab을 지운 뒤 최종 스키마로 다시 만듭니다. 누적 데이터를 바꾸지 않아야 하는 별도의 실습과 14장의 계층 예제는 cs_db_lab에서, 18장 6편의 XA 예제는 cs_xa_lab에서 실행합니다. 데이터베이스를 지우거나, 트랜잭션을 PREPARED로 남기거나, 서버를 종료하는 예제는 반드시 내가 관리하는 실습용 서버에서만 실행하세요.


학습 경로

1단계 · SQL 기초(1–4장)에서는 MySQL 서버에 연결해 환경을 확인하고, 데이터베이스와 테이블, 기본 키와 외래 키, CHECK를 만듭니다. 이어서 INSERT와 UPDATE, DELETE로 데이터를 바꾸고, WHERE와 ORDER BY, LIMIT로 조회하며, NULL의 세 값 논리와 함수, GROUP BY와 HAVING의 집계를 다룹니다.

2단계 · 관계와 성능(5–7장)에서는 INNER JOIN과 OUTER JOIN, 자기 참조와 CROSS JOIN으로 여러 테이블을 읽고, 서브쿼리와 EXISTS, 집합 연산과 CASE, 뷰를 익힌 뒤 관계 대수와 디비전으로 SQL과 이론을 잇습니다. 마지막으로 B+Tree 인덱스와 실행 계획, 복합 인덱스와 정렬, 커버링 인덱스로 쿼리의 비용을 읽습니다.

3단계 · 무결성과 트랜잭션(8장)에서는 제약이 지키는 규칙과 트랜잭션의 멱등성, 격리 수준과 잠금, 교착 상태를 다루고, 트리거와 저장 프로시저, 로그와 체크포인트에 의한 장애 회복, 계정과 역할의 최소 권한을 봅니다.

4단계 · 모델링(9–11장)에서는 요구에서 엔티티와 관계를 찾아 ERD를 그리고, 후보 키와 대리 키, 1:1과 1:N, M:N 관계를 테이블로 옮깁니다. 이어서 식별 관계와 비식별 관계, 공유 기본 키와 조합 기본 키를 비교해 회원 게시판의 논리 모델을 완성합니다.

5단계 · 정규화와 물리 설계(12장)에서는 함수 종속과 2NF, 3NF, BCNF로 갱신 이상을 없애고, 타입과 이름을 물리 모델로 확정하며, 역정규화한 통계를 원래 데이터에서 다시 계산하는 방법과 최종 DDL, 4NF와 5NF의 반례를 다룹니다.

6단계 · 선택 심화(13–18장)에서는 필요한 주제를 골라 읽습니다. 공통 코드와 캐시의 동기화, 인접 리스트와 클로저 테이블의 계층, 스냅샷과 유효 기간, 감사 원장과 이중 시간 모델, 소프트 삭제와 익명화, 통계의 재계산과 마이크로배치, 상속 전략과 EAV, JSON의 검증과 검색 인덱스, AI 콘텐츠의 검수, 분산 트랜잭션과 XA의 복구까지 운영에서 자주 만나는 모델을 비교합니다.

다른 교재로 이어가기

집합과 관계, 함수 종속의 바탕이 되는 수학은 이산수학에서, 해시 함수와 충돌은 자료구조·알고리즘에서 더 자세히 다룹니다. 로그와 fsync, 페이지 캐시처럼 회복이 기대는 저장 장치의 동작과 프로세스가 죽은 뒤의 안전한 재시도는 운영체제에서, 데이터베이스에 연결하는 소켓과 TLS는 네트워크에서, 요구 분석과 배포, 마이그레이션의 절차는 소프트웨어공학에서 이어집니다. 자격시험의 답안 형식이 필요하면 정보관리기술사 교재를 참고할 수 있습니다.


장별 목차

다 읽은 뒤에는 SQL을 얼마나 빨리 쓰는지보다, 회원 게시판의 요구 하나를 키와 관계, 제약과 트랜잭션으로 나타낼 수 있는지, 느린 쿼리의 실행 계획을 읽고 어떤 인덱스가 결과를 떠받치는지 설명할 수 있는지, 원래 데이터와 어긋난 통계나 이력을 진단 쿼리로 찾아낼 수 있는지를 점검해 보세요.

이 페이지 목차

이 페이지 목차