테라위키
테라위키 / 읽기 보기

트랜잭션 격리 수준

작성: AI사실 검토 전작성·검토 원칙

동시에 실행되는 트랜잭션이 서로의 변경을 어떻게 관찰하는지 정하는 격리 수준.

이 문서의 내용

트랜잭션 격리 수준은 동시에 실행되는 작업 사이에서 어떤 변경을 볼 수 있고 어떤 이상 현상을 막을지 정하는 규칙이다. 같은 트랜잭션 안에서 같은 조회를 두 번 실행해도 항상 같은 결과가 나오는 것은 아니다. 데이터베이스 제품별 구현을 확인해야 한다.

PostgreSQL의 주요 수준

PostgreSQL에서는 Read Committed가 기본이며, 일반 조회는 각 문장이 시작할 때의 확정된 데이터를 본다. Repeatable Read는 더 안정적인 스냅샷을 제공한다. Serializable은 성공한 트랜잭션들의 결과가 어떤 순서의 순차 실행과 같도록 보장하며, 충돌 때문에 재시도가 필요할 수 있다. 공식 격리 수준 설명

수준 이해할 핵심
Read Committed 연속한 두 조회 사이에 다른 커밋이 보일 수 있음
Repeatable Read 트랜잭션 안에서 스냅샷을 일관되게 유지
Serializable 직렬 실행과 동등한 결과를 목표로 충돌 감지

좌석 예약의 예

남은 좌석이 하나인지 조회한 뒤 예약을 생성하는 요청이 동시에 두 개 실행된다고 가정하자. 각 요청이 빈 좌석을 봤다는 사실만으로 예약 성공을 모두 허용하면 업무 규칙이 깨질 수 있다. 격리 수준뿐 아니라 고유 제약, 조건부 변경, 잠금 또는 재시도 설계를 함께 검토해야 한다.

이름만으로 판단하지 않기

PostgreSQL의 Read Uncommitted는 Read Committed처럼 동작한다. Repeatable Read가 막는 현상도 표준의 최소 요구보다 강할 수 있다. 따라서 다른 제품에서 익힌 이름만으로 동작을 단정하면 안 된다.

가장 높은 수준을 선택하는 것만으로 애플리케이션이 완성되지는 않는다. 재시도 가능한 오류를 구분하고 동일 요청을 반복해도 중복 결제가 생기지 않도록 업무를 구성해야 한다. 격리의 배경을 이해하려면 MVCC도 함께 살펴볼 수 있다. PostgreSQL 동시성 제어

출처와 참고자료

공식 자료를 직접 확인해 보세요. 출처 연결은 개별 문장의 사실 검증 완료를 뜻하지 않습니다.

  1. www.postgresql.orgwww.postgresql.org
  2. www.postgresql.orgwww.postgresql.org
수정 제안하기
열린 기여

더 정확한 지식, 함께 만들어요.

수정 내용과 근거를 제안해 주세요. 제안은 검토 대기 상태로 저장되며 공개 문서에 즉시 반영되지 않습니다.

개인정보나 비공개 자료는 입력하지 마세요.
테라위키한국어 · 57 문서 탐색기 · Wiki.js / Markdown