본문 바로가기
INFORMATION SECURITY · FREE LEARNING정보보안 학습센터원리 → MASTER → 문제·복습 → MUST KNOW

동시에 두 번 출금하면 왜 잔액이 틀릴 수 있는가 · 정보보안 사례

CASE STUDY · 방향 5 · 원문 사례

동시에 두 번 출금하면 왜 잔액이 틀릴 수 있는가

잔액 30,000원을 두 작업이 동시에 읽고 각각 10,000원을 빼려 합니다.

출처: 열 번째 발걸음 · 데이터베이스는 값을 저장하고 상태 변화를 묶는다. 연결된 쪽은 해당 발걸음의 시작 쪽입니다.

원문 풀이 흐름과 깨달음 펼치기

함께 따라가기 · 동시에 두 번 출금하면 왜 잔액이 틀릴 수 있는가

잔액 30,000원을 두 작업이 동시에 읽고 각각 10,000원을 빼려 합니다.

  1. 작업 A와 B가 모두 30,000을 읽고 자기 메모리에서 20,000을 계산한 뒤 그 값을 그대로 저장하면 마지막 결과가 20,000일 수 있습니다. 두 번의 출금 의도 중 하나가 사라진 갱신 유실입니다.

  2. 단순한 한 행 변경은 DB 안에서 balance = balance - 10000처럼 상대 연산으로 수행하면 현재 행에 대한 잠금·재검사를 이용할 수 있습니다. 여러 행의 조건을 읽고 판단하는 작업은 이것만으로 충분하지 않아 SELECT FOR UPDATE나 적절한 격리 수준 등 업무에 맞는 설계가 필요합니다.

  3. 직렬화 가능한 격리는 성공한 거래들의 결과가 어떤 순차 실행과 일치하도록 요구합니다. 충돌하는 거래가 중단될 수 있으므로 애플리케이션은 안전한 전체 재시도를 준비합니다. 재시도할 때 외부 결제나 메일 발송이 중복되지 않게 DB 밖 효과도 연결해야 합니다.

깨달음동시성 오류는 공격 문자열이 없어도 생깁니다. 읽기·판단·쓰기 사이의 관계를 DB의 실제 격리 규칙과 맞추어야 합니다.

© K-BOOKS · 무료 웹 열람용 콘텐츠입니다. 무단 복제·저장·인쇄·재배포를 제한합니다.


CONTINUE LEARNING

지금 공부한 흐름을 책으로 이어가세요

무료 학습은 그대로, 종이책은 필요한 분을 위한 선택지입니다.

정보보안 MUST KNOW전체 도서 12권