동시성 제어의 중요성데이터베이스나 분산 시스템에서는 여러 트랜잭션이 동시에 하나의 데이터에 접근할 때, 데이터의 일관성과 무결성을 보장하기 위해 동시성 제어가 필수적입니다.올바른 동시성 제어가 이루어지지 않으면 더티 리드(Dirty Read), 레이스 컨디션(Race Condition)과 같은 동시성 관련 문제가 발생할 수 있습니다.낙관적 락과 비관적 락낙관적 락과 비관적 락은 트랜잭션 제어를 통한 동시성 제어의 대표적인 락 기법으로, 데이터 무결성과 일관성을 유지하기 위해 사용됩니다.이 글에서는 낙관적과 비관적 락에 대한 정의와 동작원리 그리고 구현 방법에 대해 정리해 보겠습니다.낙관적 락 (Optimistic Lock)정의와 동작 원리낙관적 락은 동시성 제어 방식 중 하나로, 데이터의 충돌 가능성이 ..
트랜잭션 격리 수준(Isolation Level)이란?트랜잭션의 격리 수준은 여러 트랜잭션이 혼재되어 있는 상태에서, 하나의 트랜잭션이 다른 트랜잭션의 데이터에 접근 할 수 있는 '정도'를 의미한다. 트랜잭션 격리 수준은 4단계로 나뉘어 진다.0 - Read Uncommitted1 - Read Committed2 - Repeatable Read3 - Serializable 격리 수준이 높아질 수록 트랜잭션의 고립 강도가 높아지는 반면, 성능저하도 야기된다.일반적인 서비스에서는 Read Committed 혹은 Repeatable Read 수준을 사용하며, 서비스의 요구사항에 따라 적절한 격리 수준을 정해 사용해야 한다. 여러 트랜잭션이 존재하는 상황에서 트랜잭션들의 경합으로 발생하는 문제는 격리수준별 다음..
1. 트랜잭션(Transaction) 이란? - 논리적인 여러 작업을 하나로 묶는 단위 - 하나의 일련된 작업 예시 - 손님이 카페에서 음료를 주문 했을 경우, 손님의 주문 그리고 음료가 제조 및 준비되어 손님에게 전달되기까지의 모든 과정을 하나의 트랜잭션으로 볼 수 있다. 트랜잭션의 특징은 모두 성공하거나, 하나라도 실패하면 전체가 실패한다는 특징을 가지고 있다. 만약 손님의 음료가 완성되어 전달되는 과정에서 음료가 엎어지게 되면, 손님의 주문은 전체가 실패하게 되는 것과 동일하다. 2. 트랜잭션의 ACID란? 트랜잭션에는 4가지의 핵심 속성이 있으며, 해당 속성이 하나라도 충족되지 않으면 해당 트랜잭션은 보장되지 않는다. 즉 ACID는 트랜잭션이 안정적으로 수행되기 위해 보장되어야할 4가지 핵심 속..
이슈사내 회원 서비스 운영중 로그인 과정에서 '트랜잭션이 잠금 리소스에서 다른 프로세스와의 교착 상태가 발생하여 실행이 중지되었습니다. 트랜잭션을 다시 실행하십시오.'에러와 함께 서버로 들어온 요청이 처리되지 못하고 Error가 발생한 부분을 모니터링을 통해 감지됨. 해당 이슈가 발생한 DataBase는 Ms-SQL 사용중이었으며,각각 [05:47:300], [05:47:726] 요청시간으로 같은 회원에 의해 동일한 요청이 거의 비슷한 시간에 들어오게 됨 요청 1의 경우 긴 지연시간을 가진후 정상 처리 되었고,요청 2의 경우 요청 1의 지연시간을 대기하다 위와 같이 DeadLock 처리됨.원인 및 해결DeadLock이 발생한 원인을 파악하기 위해 다양한 추론을 통해 접근 1. 로직 처리시간이 느리기 때문..