본문 바로가기

두 사람이 동시에 같은 좌석을 예약한다면 | 정보처리의 흐름 FLOW 03 | K-BOOKS

FLOW 03 · INFORMATION PROCESSING
DIRECTION 03 · 연결된 세계를 걷다 · DB · SQL · 트랜잭션

두 사람이 동시에 같은 좌석을 예약한다면

DB · SQL · 트랜잭션

QUESTION · 질문에서 시작합니다

한 명만 사용할 때는 문제가 없던 프로그램도 여러 사람이 동시에 접근하면 새로운 문제가 생긴다.

사용자 A → 10:00 비어 있음 확인
사용자 B → 10:00 비어 있음 확인
사용자 A → 예약 저장
사용자 B → 예약 저장

두 사람 모두 같은 시간을 예약해 버릴 수 있다.

문제의 핵심은 두 사용자가 같은 순간에 ‘비어 있음’을 읽었다는 데 있다. 확인과 저장이 서로 떨어진 작업으로 처리되면, 한 사용자가 저장하기 전에 다른 사용자가 같은 상태를 읽을 수 있다.

데이터베이스는 이런 상황에서 한 작업을 중간에 끊기지 않는 단위로 처리하고, 동시에 실행되는 작업끼리 서로 잘못된 상태를 보지 않도록 제어해야 한다. 트랜잭션과 동시성 제어가 필요한 이유다.

동시에 접근할 때 데이터가 꼬이지 않게

여러 트랜잭션이 같은 데이터를 동시에 읽고 수정할 때는 실행 순서를 적절히 제어해야 한다.

기술 이름 여러 트랜잭션이 동시에 실행되어도 데이터의 일관성을 유지하도록 관리하는 것을 동시성 제어라고 한다.

한 트랜잭션이 중요한 데이터를 수정하는 동안 다른 트랜잭션의 접근을 제한하는 방법을 사용할 수도 있다.

잠금(Locking) 데이터에 잠금을 걸어 동시에 충돌하는 접근을 제어한다.

잠금이 많으면 또 다른 문제가 생긴다

A는 회원 데이터를 잠그고 예약 데이터를 기다린다.

B는 예약 데이터를 잠그고 회원 데이터를 기다린다.

A → B가 가진 자원을 기다림
B → A가 가진 자원을 기다림

둘 다 상대가 풀어 주기만 기다리며 영원히 진행하지 못할 수 있다.

기술 이름 둘 이상의 작업이 서로 상대가 가진 자원을 기다리며 멈춰 버리는 상태를 교착상태(Deadlock)라고 한다.
ILLUST B | ILL-12 | 두 트랜잭션의 순환 대기 | OS 교착상태 그림과 병합

장애가 나도 데이터는 돌아와야 한다

트랜잭션을 처리하던 중 갑자기 전원이 꺼질 수도 있다.

완료되지 않은 변경은 취소하고, 이미 확정된 작업은 유지해야 한다.

기술 이름 장애가 발생한 뒤 데이터베이스를 정상적인 상태로 되돌리는 과정을 회복(Recovery)이라고 한다.

로그를 사용해 이전 값을 복원하거나, 완료된 작업을 다시 반영하는 방법 등이 사용된다.

UNDO와 REDO

아직 완료되지 않은 작업이 데이터에 반영되어 있다면 작업 전으로 되돌려야 한다.

UNDO → 완료되지 않은 변경을 취소한다.

반대로 완료되었지만 저장장치에 반영되지 못한 작업이라면 다시 적용해야 한다.

REDO → 완료된 변경을 다시 반영한다.
더 찾아보고 싶다면846면 학습 아카이브에서 검색하세요.
K-BOOKS Q&A이 내용이 헷갈리나요?

공부하던 페이지를 자동으로 연결해 질문할 수 있습니다.

RELATED STUDY MATERIALS

이 개념과 이어서 볼 정보처리 자료

학습자료실 65개 →

CONTINUE · INFORMATION PROCESSING ENGINEERDB에서 시험 학습으로 이어가기
이야기형 개념 설명은 그대로 두고, 필요한 시험 요약·문제·실습으로 연결합니다.