Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

거인의 코딩일지

선언적 트랜잭션? @Transctional? JPA? Proxy? 본문

코딩/JAVA

선언적 트랜잭션? @Transctional? JPA? Proxy?

코딩거인 2023. 8. 24. 09:50
728x90
선언적 트랜잭션 ( @Transctional )

  • 소스코드에 직접 트랜잭션 관련 로직을 넣어두지 않고 비지니스 로직에서 완전히 분리 하는 방식이다
  • 프로그래밍에 의한 트랜잭션에서 나온 단점인 트랜잭션 코드 중복문제, 소스코드 유지보수의 문제를 모두 해결 가능
  • 트랜잭션이라는 횡단 관심사를 비지니스 로직에서 완전히 분리하기 때문에 SRP 관점에서 봤을 때도 적합하고 많은양의 트랜잭션 로직을 적용하기에도 합리적
트랜잭션의 격리 수준 (Isolation Level)
  • DEFAULT : 데이터베이스에서 설정된 기본 격리 수준을 따른다
  • READ UNCOMMIT 
    • 트랜잭션에서 처리 중인, 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
    • Dirty Read, Non-Repeatable Read, Phantom Read 현상 발생
  • READ COMMIT
    • Dirty Read 방지 : 트랜잭션이 커밋되어 확정된 데이터만 읽는 것을 허용
    • 대부분의 DBMS가 기본모드로 채택하고 있는 일관성모드
    • Non-Repeatable Read, Phantom Read 현상은 여전히 발생
  • REPEATABLE READ
    • 선행된 트랜잭션이 종료될 때 까지 다른 트랜잭션은 그 영역에 해당하는 데이터를 수정 할 수 없음
    • Phantom Read 현상은 여전히 발생
  • SERIALIZABLE READ
    • 가장 엄격한 트랜잭션 격리 수준으로 완벽한 읽기 일관성을 제공한다
    • 신형 트랜잭션이 읽은 데이터를 후행 트랜잭션이 갱신하거나 삭제하지 못할 뿐만 아니라 중간에 새로운 레코드를 산입하는 것도 막아줌
    • 이 격리 수준에서는 Phantom Read 상태가 발생하지 않지만 동시성 처리 성능이 급격히 떨어질 수 있다.

 

Dirty Reads?
  • Dirty Reads 란?, 동시에 진행되고 있는 다른 트랜잭션(아직 커밋하지 않은 상태)에서 변경한 데이터를 현재 진행 중인 트랜잭션에서 읽어 들이는 것을 말한다.
Non-repeatable Reads?
  • Non-repeatable Read란, 하나의 트랜잭션 중 읽어 들였던 특정 row의 값을 같은 트랜잭션 내에서 다시 읽어 들이는데 중간에 변경사항이 생겨 (실제로COMMIT이 된 변경사항) 결괏값이 다르게 나오는 현상을 뜻합니다.
Phantom Reads?
  • Phantom read란, 트랜잭션 시작 시점 데이터를 읽었을 때 존재하지 않았던 데이터가 다시 같은 조건으로 데이터를 읽어 들였을 때 존재해 (유령처럼) INCONSISTENT 한 결괏값을 반환하는 현상을 뜻합니다.
JPA의 @Transaction 과 Proxy

  • JPA 의 @Transaction 은 Proxy 형태로 동작
  • Proxy 형태로 동작하기에 Private method 에 적용 불가하고 같은 class 안의 method에서 다른 method 를 호출했을 때 중첩 Transaction 이 동작하지 않는다.
    (무조건 진입점의 Transaction 기준으로 동작한다.)
728x90