트랜잭션 격리수준
·
Computer Science/데이터베이스
트랜잭션이란?트랜잭션은 작업의 완전성을 보장해 준다. 즉, 트랜잭션은 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구하여 작업의 일부만 적용되는 현상(Partial update)이 발생하지 않도록 해준다. 잠금(Lock)과 비슷한 개념이라고 생각할 수 있지만, 잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다.또한, 트랜잭션은 여러 개의 변경 작업을 수행하는 쿼리가 조합됐을 때만 의미 있는 개념이 아니다. 트랜잭션은 하나의 논리적인 작업 셋에 쿼리의 수와 상관없이 원자성을 보장하는 것이다.주의사항트랜잭션 범위를는 최소화해하는 것이 좋다. 이유가 무엇일까? 데이터베이스 커넥션은 개수가 제한적이어서 각 단위 프로그램이 커넥션을 소..
[Spring] 스프링 DB 2편 - 섹션 10~11
·
Spring
외부 트랜잭션과 내부 트랜잭션트랜잭션 전파란, 이미 진행 중인 트랜잭션이 존재할 때 추가로 트랜잭션을 수행하려는 상황에서 어떻게 동작할 지 결정하는 것을 트랜잭션 전파(propagation)이라고 한다. 트랜잭션 전파에는 여러가지 옵션이 존재하지만, 기본 옵션이 REQUIRED를 기준으로 설명하겠다.외부 트랜잭션이란 쉽게 말해서 가장 먼저 시작된 트랜잭션이다. 그리고 내부 트랜잭션은 그 이후에 호출된 트랜잭션으로 외부에 트랜잭션이 수행되고 있는 도중에 호출되기 때문에 마치 내부에 있는 것처럼 보여서 내부 트랜잭션이라 한다.흐름내부 트랜잭션을 시작하는 시점에는 이미 외부 트랜잭션이 진행중인 상태이다. 이 경우 내부 트랜잭션은 외부 트랜잭션에 참여한다. 즉, 내부 트랜잭션은 외부 트랜잭션을 기대로 이어 받아..
[Spring] 스프링 DB 2편 - 섹션 9
·
Spring
선언적 트랜잭션과 AOP@Transactional이라는 애노테이션을 사용하여 매우 편리하게 트랜잭션을 적용하는 것을 선언적 트랜잭션 관리라고 한다. 이 방식은 기본적으로 프록시 방식의 AOP가 적용된다.AOP의 핵심은, 실제 객체 대신 트랜잭션을 처리해주는 프록시 객체가 스프링 빈에 등록된다는 것이다. 또한 주입을 받을 때도 실제 객체 대신에 프록시 객체가 주입된다. 즉, 선언적 트랜잭션을 사용하면 항상 프록시를 통해서 대상 객체를 호출한다는 것이다.프록시 내부 호출만약, 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 어떻게 될까? 2가지 상황에 대해 알아보자.상황 1트랜잭션이 적용된 Internal() 메서드가 내부 호출로 External() 메서드를 호출하는 상황이다. Internal() 메서..
[Spring] 스프링 DB 1편 - 섹션 3~4
·
Spring
트랜잭션트랜잭션은 작업의 완전성을 보장해 준다. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구하여 작업의 일부만 적용되는 현상(Partial update)이 발생하지 않도록 해준다.ACID원자성(Atomicity)트랜잭션 내에서 실행한 작업들은 모두 성공하거나 모두 실패해야 한다.일관성(Consistency)모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들어 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야 한다.격리성(Isolation)동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다. → 격리성은 동시성과 관련된 성능 이슈로 인해, 트랜잭션 격리 수..