데이터베이스 기초집LESSON 12
트랜잭션과 ACID
난이도초급 → 중급
예상 시간35분
선수지식이전 강의
12강. 트랜잭션과 ACID
1. 이번 강의에서 해결할 문제
경기 결과는 저장됐지만 랭킹 갱신이 실패하면 같은 경기에 서로 다른 진실이 생깁니다. 업무상 함께 성공하거나 실패해야 하는 변경을 트랜잭션 경계로 묶습니다.
2. 학습 목표
3. 핵심 개념
원자성은 전부 또는 전무, 일관성은 제약을 만족하는 상태 간 이동, 격리성은 동시 작업의 중간 상태 차단, 지속성은 커밋 결과의 보존을 뜻합니다. 트랜잭션은 기술 명령 묶음이 아니라 하나의 업무 단위여야 합니다. 외부 네트워크 호출을 열린 트랜잭션 안에서 오래 기다리지 않습니다.
4. 단계별 예시
파일 경로: C:\dev\game-ranking-service\database\sql\12-record-match.sql
database/sql/12-record-match.sql
BEGIN;
INSERT INTO ranking.match_results
(game_id, player_id, character_id, score, outcome)
VALUES
(101, 42, 3, 1850, 'win');
UPDATE ranking.players
SET rating = rating + 25,
updated_at = now(),
version = version + 1
WHERE player_id = 42;
INSERT INTO ranking.ranking_snapshots
(player_id, rank_position, rating, recorded_at)
SELECT player_id, 1, rating, now()
FROM ranking.players
WHERE player_id = 42;
COMMIT;
PowerShell · 개발 DB에서 실행
psql -d game_ranking_dev -v ON_ERROR_STOP=1 -f .\database\sql\12-record-match.sql
5. 동작 원리
BEGIN 이후 변경은 같은 세션 안에서 보이지만 COMMIT 전에는 다른 세션에 최종 확정되지 않습니다. 중간 명령이 제약 오류로 실패하면 트랜잭션은 실패 상태가 되며 ROLLBACK해야 합니다. 성공한 세 변경을 함께 커밋해 결과·현재 평점·스냅샷이 같은 업무 사건을 반영하게 합니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2트랜잭션과 ACID 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
12강. 트랜잭션과 ACID 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.