한 줄 정의
데이터베이스는 여러 요청이 동시에 들어오고 서버가 갑자기 멈춰도, 약속한 규칙에 따라 데이터를 저장하고 다시 찾게 해 주는 시스템이다.
게임에서 철수의 전설 검이 영희에게 넘어가고 영희의 1,000골드가 철수에게 가는 거래를 생각해 보자. 두 변화 중 하나만 저장되면 아이템 복사나 골드 증발이 생긴다. 관계형 데이터베이스의 트랜잭션은 이 여러 작업을 하나의 논리적 작업으로 묶는다.
왜 파일 대신 데이터베이스를 쓰는가
JSON 파일에도 캐릭터 정보를 적을 수 있다. 하지만 플레이어 수천 명이 동시에 구매·강화·우편 수령을 요청하면 누가 먼저 썼는지, 중간 실패를 어떻게 되돌릴지, 재시작 후 어느 상태가 진짜인지 판단해야 한다. DBMS(Database Management System)는 저장뿐 아니라 동시성 제어, 무결성 검사, 복구, 질의를 함께 제공한다.
관계형 데이터베이스는 데이터를 행과 열로 된 테이블에 두고 기본 키와 외래 키로 관계를 표현한다. 스키마는 데이터의 모양과 규칙이며, SQL은 그 데이터를 정의하고 조회하고 바꾸는 언어다.
ACID의 네 가지 약속
ACID는 데이터베이스 트랜잭션이 안전하게 처리되기 위해 지켜야 하는 네 가지 성질의 앞글자를 모은 말이다. 먼저 전체 뜻을 짧게 살펴보자.
원자성(Atomicity) — 여러 변경을 전부 성공시키거나 전부 취소한다.
일관성(Consistency) — 거래가 끝난 뒤에도 정해 둔 데이터 규칙을 지킨다.
격리성(Isolation) — 동시에 실행되는 거래가 서로의 미완료 상태를 함부로 건드리지 못하게 한다.
지속성(Durability) — 완료된 거래 결과를 장애가 발생해도 보존한다.
원자성: 전부 성공하거나 전부 취소한다
Atomicity(원자성)는 여러 SQL을 하나의 거래로 묶어 일부만 반영되는 일을 막는다. 한 SQL만 사용해야 한다는 뜻은 아니다.
철수 골드 -1000 영희 골드 +1000 영희 인벤토리에서 전설의 검 삭제 철수 인벤토리에 전설의 검 추가그런데 철수 돈만 빠지고 서버 오류가 났다면?
철수: 돈 1000골드 사라짐 영희: 검 그대로 가지고 있음이러면 안되기 때문에 하나라도 실패하면 모두 롤백(ROLLBACK)한다.
일관성: 정해 둔 규칙을 지킨다
Consistency(일관성)는 성공한 거래 전후에 데이터 규칙이 계속 지켜지는 성질이다. PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK 같은 제약 조건과 애플리케이션 검증을 함께 사용한다.
예시: 거래가 끝나도 플레이어의 골드는 0보다 작을 수 없고, 전설 검의 소유자는 정확히 한 명이어야 한다.
격리성: 동시 거래가 서로 끼어들지 못하게 한다
Isolation(격리성)은 동시에 실행되는 트랜잭션이 서로의 미완료 작업에 함부로 간섭하지 않도록 한다. 행 잠금과 조건부 UPDATE를 사용하면 같은 아이템을 두 사람이 동시에 사는 문제를 막을 수 있다.
예시: 영희가 전설 검을 사는 동안 민수의 구매 요청은 기다린다. 영희의 거래가 끝난 뒤 민수는 소유자가 이미 바뀐 것을 보고 구매에 실패한다.
게임에서 상자 같은것을 서로 열고 아이템을 가져갈때 둘이 동시에 가져가더라도 먼저 누른 1명만 가져가 져야 한다.
PostgreSQL의 기본 격리 수준은 Read Committed다. 더 강한 Repeatable Read나 Serializable은 동시 실행 문제를 더 줄이지만 실패한 거래를 처음부터 재시도해야 할 수 있다.
지속성: 완료한 결과를 장애 뒤에도 남긴다
Durability(지속성)는 COMMIT 성공을 응답한 변경이 전원 장애나 프로세스 재시작 뒤에도 보존되는 성질이다. PostgreSQL은 변경된 데이터 페이지보다 WAL 기록을 먼저 저장한다.
예시: 거래 완료 메시지를 본 직후 게임 서버가 재시작되어도, 영희의 인벤토리에는 전설 검이 남아 있어야 한다.
트랜잭션은 모두 성공하거나 모두 취소한다
트랜잭션(transaction)은 하나의 업무 단위다. PostgreSQL에서는 BEGIN으로 시작하고 COMMIT으로 확정하며, 문제가 생기면 ROLLBACK으로 시작 전 상태로 돌아간다.
영희의 골드: 1,500 → 500
철수의 골드: 100 → 1,100
전설 검 소유자: 철수 → 영희
참고 자료
PostgreSQL 공식 문서 — Transactions (2026-08-11 확인)
PostgreSQL 공식 문서 — Concurrency Control (2026-08-11 확인)
PostgreSQL 공식 문서 — Write-Ahead Logging (2026-08-11 확인)
PostgreSQL 공식 문서 — Constraints (2026-08-11 확인)
댓글 0
댓글을 불러오는 중…