logo

동시성 문제에 대한 고찰, 점진적으로 접근하기

language-logoMySQL

• 프로젝트에서 결제 시스템 구축 시 동시성 문제를 해결하기 위해 격리 수준을 SERIALIZABLE로 설정했지만, 예상과 달리 데드락이 발생하여 일부 트랜잭션이 롤백되면서 쿠폰 사용이 정확히 이루어지지 않았다. 이는 격리 수준만으로는 동시성 문제를 완전히 해결할 수 없음을 보여준다.
• 동시성 문제를 해결하기 위해 Synchronized와 같은 다른 동기화 메커니즘을 고려해야 하며, 이는 Java에서 스레드 간 동시 실행을 방지하는 방법으로 특정 블록이나 메서드에 Lock을 걸어 1개의 스레드만 접근할 수 있도록 한다.
• `synchronized` 키워드는 단일 JVM 내에서 스레드 간 동시성을 제어할 수 있지만, 분산 서버 환경에서는 각 서버의 JVM이 독립적으로 동작하기 때문에 동시성 제어가 불가능하다. 따라서 여러 서버가 있는 환경에서는 `synchronized`를 사용하여 동시성을 완벽하게 제어할 수 없다.
• 분산 환경에서 동시성을 제어하기 위해서는 낙관적 락(Optimistic Lock)과 같은 명시적인 동시성 제어 기법이 필요하다. 낙관적 락은 대부분의 경우 충돌이 발생하지 않는다는 가정 하에 동작하며, 데이터 수정 시 Version 필드를 사용하여 충돌 여부를 검사하고, 충돌이 발생하면 롤백하거나 재시도하는 방식으로 동시성을 관리한다.

thumbnail
북마크
공유하기
신고하기
30분 분량
조회수 95
profile-image우쨈
15일 전
Copyright © 2025. Codenary All Rights Reserved.