development/database 3

[DB] 트랜잭션 격리 수준과 부정합 문제 (2)

지난 포스팅에 이어 이번 글에서는 트랜잭션 격리 수준에 따른 부정합 문제에 대해 정리할 것이다.격리수준 별로 발생할 수 있는 부정합 문제들을 정리하고, 사례들을 직접 실습해볼 것이다.격리 수준과 부정합 문제DBMS의 부정합 문제는 다음과 같은 것들이 있다.1. Dirty Read : 하나의 트랜잭션에서 데이터의 상태를 변경한 후 커밋 또는 롤백하지 않은 상태에서 다른 트랜잭션이 변경된 데이터를 읽는 것을 의미한다.해당 트랜잭션이 롤백 되는 경우 치명적인 문제가 발생할 수 있다. 롤백이 이루어지기 전에 다른 트랜잭션이 변경된 데이터를 조회한 경우, 서로 바라보는 데이터의 상태에 차이가 발생하기 때문이다.2. Non-Repeatable Read : 하나의 트랜잭션 내에서 동일한 조건으로 조회를 시도했을 때 ..

[DB] 트랜잭션 격리 수준과 부정합 문제 (1)

DBMS의 데이터 변경 작업을 진행할 때 우리는 작업의 최소 단위인 트랜잭션을 기준으로 데이터의 상태를 변경한다.트랜잭션을 이해하기 위해서는 전파 속성과 격리 수준을 반드시 살펴보아야 한다. 지난 글에서 전파 속성에 대해 정리하였으니, 이번 글에서는 격리 수준에 대해 정리하고자 한다.그리고 격리 수준에 따른 부정합 문제에 대해서도 간략하게 다뤄본다.스프링을 활용한 개발에서는 일반적으로 Configuration에서 PlatformTransactionManager를 Bean으로 등록한 후 비즈니스 Layer 혹은 application Layer에서 @Transactional 어노테이션을 활용하여 트랜잭션을 관리한다.@Transactional 어노테이션은 전파 속성과 격리 수준을 트랜잭션 별로 제어할 수 있도..

[DB] 낙관적, 비관적 락 (Optimistic Lock, Pessimistic Lock)

개요다중 요청을 처리하는 동시성 환경에서 데이터의 정합성과 일관성을 보장하기 위해 Lock을 사용한다.이 글에서는 Lock의 종류와 스프링 애플리케이션에서 Jpa를 활용하여 Lock을 처리하는 방법에 대해 정리한다. 락 (LOCK)데이터베이스에는 중요한 정보가 저장된다. 따라서 무결성과 일관성, 정합성이 반드시 지켜져야 한다. 하지만, 여러 사용자(Transaction)가 동시에 자원을 획득하게 되면 문제가 생기게 될 것이다. 이러한 문제를 방지하기 위해 데이터베이스는 Lock 기능을 제공한다. 한 트랜잭션이 특정 Row에 대한 Lock을 획득하면, 다른 트랜잭션이 이를 변경할 수 없는 것이다. 이는 데이터에 대한 처리 순서를 보장하여 정합성과 무결성을 지키고 안전한 데이터 처리를 가능하게 한다. Loc..