..
Thread-Safe와 동시성 제어: 비관적 락(Pessimistic Lock)
1. 멀티스레드 환경의 도전 과제
다중 스레드가 동시에 같은 데이터(Shared Resource)를 수정하려고 할 때, 데이터의 정합성이 깨지는 문제가 발생할 수 있습니다. 이를 해결하기 위해 자바의 synchronized를 사용할 수 있지만, 이는 단일 서버 내에서만 유효하며 분산 환경(여러 대의 서버)에서는 한계가 있습니다.
2. 데이터베이스 수준의 해결책: 비관적 락
비관적 락(Pessimistic Lock)은 “데이터에 동시성 이슈가 반드시 발생할 것이다”라고 가정하고, 데이터를 읽는 시점부터 미리 락을 걸어버리는 방식입니다.
- 작동 방식: 트랜잭션이 시작될 때 특정 레코드에 대해 락을 획득합니다. 해당 트랜잭션이 끝나기 전까지 다른 트랜잭션은 해당 데이터를 수정하거나 삭제할 수 없습니다.
- 장점: 데이터 정합성을 가장 확실하게 보장할 수 있습니다.
- 단점: 대기 시간이 길어질 수 있고 성능 저하를 초래할 수 있으므로 신중히 사용해야 합니다.
애플리케이션 계층에서의 제어와 DB 계층에서의 제어를 서비스의 특성에 맞게 적절히 혼합하여 사용하는 것이 중요합니다.