본문 바로가기

트랜잭션3

[Spring] @Transactional - 2 isolation (격리수준) 이전 글에서 트랜잭션 전파레벨에 대해서 알아보았다. 트랜잭션을 사용할 때, 전파레벨과 함께 따라오는 것이 격리수준이다. 트랜잭션에서 일관성이 없는 데이터를 허용하도록 하는 수준을 말한다. 격리수준에는 4가지가 있다. READ_UNCOMMITED (level 0) READ_COMMITED (level 1) REPEATABLE_READ (level 2) SERIALIZABLE (level 3) 격리 수준이 높아질수록 동시성(Concurrency)은 높아지고 속도는 느려진다. 이 둘의 균형을 잘 맞추는것이 중요하다. READ_UNCOMMITED (커밋되지 않는 읽기, level 0) 트랜잭션 처리중 or 아직 commit되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용 어떤 사용자가 A라는 데이터를 B로 변.. 2020. 7. 9.
[Spring] @Transactional - 1 전파 레벨(propagation) @Transactional 사용시 주의사항 @Transactional을 클래스 또는 메소드 레벨에 명시하면 해당 메소드 호출시 지정된 트랜잭션이 작동하게 된다. 단, 해당 클래스의 Bean을 다른 클래스의 Bean에서 호출할 때만 @Transactional을 인지하고 작동하게된다. Propagation.REQUIRED @Transactional(propagation = Propagation.REQUIRED) public void doSomething() { ... } default 값이기 때문에 생략가능 부모 트랜잭션 내에서 실행하며, 부모 트랜잭션이 없을 경우 새로운 트랜잭션 생성 해당 메소드를 호출한 곳에서 별도의 트랜잭션이 설정되어 있지 않다면 트랜잭션을 새로 시작한다.(새로운 연결을 생성하고 실행.. 2020. 7. 6.
[JPA] 변경 감지(dirty checking)와 병합(merge) 본 내용은 인프런 김영한님의 JPA 활용 강의를 수강하며 정리한 내용입니다. 준영속 엔티티란? 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. 객체가 이미 DB에 한번 저장되어 식별자가 존재하는 경우, 기존 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다. jpa가 관리를 하지 않음, persist 상태가 아니기 때문에 값을 바꿔도 DB변경이 일어나지 않음 준영속 엔티티를 수정하는 2가지 방법 dirtyChecking을 사용하여 값을 저장 @Transactional void update(Item itemParam) { //itemParam: 준영속 상태의 엔티티 Item findItem = em.find(Item.class, itemParam.getId()); //같은 엔티티를 조회 findI.. 2020. 5. 2.