😺Data Base/😻 SQLD

[DB] Transaction - Atomicity 원자성 이해하기

디카페인라떼 2022. 9. 19. 23:11

2022.09.10 - [DB] - [DB] 트랜잭션 Transaction 이란?

 

[DB] 트랜잭션 Transaction 이란?

트랜잭션 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들 => 데이터베이스의 상태를 변화시킨다는 것?

wearegolden.tistory.com

참고 강의

https://www.youtube.com/watch?v=urpF7jwVNWs&t=0s 


트랜잭션이 무엇인지 알았다면 왜 쓰는지, 왜 중요한지 알아야한다.

 

 Transaction 트랜잭션
  • 여러 읽기/ 쓰기를 논리적으로 하나로 묶음
  • 트랜잭션 시작 - 여러 쿼리 실행 - 커밋 or 롤백
  • 모두 반영 (커밋) 또는 모두 반영하지 않음 (롤백) = All or Nothing

 

트랜잭션이 없다면?

  • 트랜잭션이 없다면?
    • 개발자가 데이터에 대해서 고민해야 하는 부분을 줄여줌
    • 롤백을 통해서 데이터 일관성을 보장할 수 있음

 

 

트랜잭션의 범위

  • 4.3도 롤백이 되어야 하는 걸 원하지만
  • 새로운 커넥션을 만들고 커밋했다면 4.3 은 롤백이 되지않음!
    •  커넥션을 따라감
  • 여러 메소드를 호출할 때 여러 메소드들을 하나의 트랜잭션으로 묶고 싶다면
  • 여러 메소드에서 하나의 커넥션을 사용할 수 있는 방법이 필요

 

👉이를 위해서 필요한 것이 트랜잭션 전파!

트랜잭션 전파
  • 여러 메소드 호출이 한 트랜잭션에 묶이도록 하기 위해 필요
    • 스프링 프레임워크가 해줌 @Transactional
    • 메소드 간 커넥션 객체를 전달하지 않아도 한 트랜잭션으로 묶어서 실행.

 

트랜잭션과 외부 연동

 👉외부 연동이 섞여있으면 롤백 처리에 주의

 

  • 오른쪽 3번 callapi는 롤백되지 않음! (이미 외부연동이 처리됨)
  • 왼쪽 4번 에서 성공했으나 네트워크 문제 발생시 롤백이 발생되면 또한 외부연동이 이미 처리되어 문제가 생김.
    • 롤백 후 외부처리 시스템을 번복하는 방법을 강구해야함
    • ex) 외부시스템에 취소 요청을 보내는 방식을 보통 사용
    • 문제가 생긴 건을 모아서 일 배치로 하기도 하고, 문제 건을 주기 적으로 확인해서 취소 요청을 하기도 함.
    • 문제가 생겼을 때 즉시 취소요청을 하기도 함.

 

글로벌 트랜잭션

  • 글로벌 트랜잭션 (이런 게 있다 정도는 알아두는 게 좋음)
    • 2개 이상의 자원을 1 트랜잭션으로 묶어줌. (서로 다은 db를 한 트랜잭션으로 묶어서 처리)
    • 여러 자원을 한 트랜잭션으로 묶어서 처리
    • 단점 : 성능이 떨어짐.. (단일 자원에 대해서 트랜잭션 처리를 할때와 비교해보면 성능이 떨어짐)

 


정리

🚩트랜잭션의 원자성 = all or nothing

👉 트랜잭션의 범위가 중요 => 문제가 발생했을 때 롤백해야 하는 범위

 

'😺Data Base > 😻 SQLD' 카테고리의 다른 글

[SQL] JOIN  (0) 2022.09.20
[DB] Transaction - 동시성 문제  (0) 2022.09.20
[DB] Index  (0) 2022.09.17
[RDBMS] 관계형 데이터 모델링 2  (0) 2022.09.16
[RDBMS] 관계형 데이터 모델링 1  (0) 2022.09.14