동시에 실행된 작업이 무엇을 볼까
격리 수준은 한 트랜잭션이 다른 트랜잭션의 변화를 언제 볼 수 있는지 정해. PostgreSQL의 READ UNCOMMITTED는 READ COMMITTED와 똑같이 동작하므로 더티 읽기를 허용하지 않아. 기본인 READ COMMITTED에서는 반복 불가능 읽기와 팬텀 읽기가 생길 수 있지만, REPEATABLE READ는 PostgreSQL에서 둘을 막아.
더 안정된 스냅샷과 더 강한 보장
REPEATABLE READ는 트랜잭션 동안 같은 스냅샷을 유지해 반복 조회가 흔들리지 않게 해. PostgreSQL의 SERIALIZABLE은 SSI로 직렬화 이상까지 검사해 결과가 순서대로 실행한 것과 같도록 보장하고, 충돌하면 한쪽을 실패시켜. 이 실패는 버그가 아니라 재시도를 요구하는 정상 동작이야.
가장 강한 수준이 언제나 정답은 아니야
보장이 강해질수록 충돌과 재시도 비용도 커져. 실제 업무 불변식과 경쟁 모양을 보고 수준을 고르고, SERIALIZABLE을 쓴다면 전체 트랜잭션을 안전하게 재실행할 수 있게 만들어.