- 교착 상태는 동시 요청 간의 순환 의존성으로, 데이터베이스뿐 아니라 운영 체제 등 다양한 환경에서 발생합니다. 🔄
- 트랜잭션은
BEGIN, 작업,COMMIT으로 구성되며, 데이터 일관성을 해치는 경쟁 조건(race condition)을 방지하는 핵심 메커니즘입니다. 🛡️ - 교착 상태는 트랜잭션 A가 자원 1을, 트랜잭션 B가 자원 2를 잠근 상태에서 서로 상대방이 잠근 자원을 요청할 때 발생합니다. 🔗
- 데이터베이스는 주기적으로 교착 상태를 감지하여 한 트랜잭션을 '희생자'로 종료시키고 재시작을 권고합니다 (예: 에러 코드 1213). 💥
- 교착 상태 발생 시, 오류를 감지하고 롤백한 후 트랜잭션을 재시도하는 것이 가장 효과적인 대응 방법입니다. ♻️
- 모든 트랜잭션이 동일한 순서로 자원(테이블/행)을 잠그도록 설계하면 순환 대기를 방지하여 교착 상태를 예방할 수 있습니다. 🚦
- 트랜잭션을 가능한 한 작게 유지하여 잠금 시간을 줄이고, 교착 상태 발생 가능성과 대기 시간을 최소화합니다. 🤏
- 데이터베이스의 격리 수준(Read Uncommitted, Read Committed, Repeatable Read, Serializable)을 이해하고 적절히 활용하여 동시성 제어 및 교착 상태 발생 가능성에 영향을 줄 수 있습니다. 📊
SELECT ... FOR UPDATE와 같은 명시적 행 잠금을 사용하여 트랜잭션 시작 시 필요한 모든 자원을 선제적으로 잠금으로써 교착 상태를 효과적으로 방지할 수 있습니다. 🔒





