TIL - 0614

Transaction(2)

30분이라도 정리하고 자자는 마음으로 어제 궁금했던 부분을 간략하게 정리하려고 한다.

분산 트랜잭션

2PC(Two-phase commit protocal)의 경우 분산 트랜잭션에서 많이 사용한다고 한다. 그렇다면 분산 트랜잭션이 정확히 무엇일까?

  • 분산 트랜잭션: 서로 다른 서버에 데이터를 처리할 때 하나의 트랜잭션으로 처리하는 것
  • 예: 서로 다른 은행간의 거래

django transaction exception

Avoid catching exceptions inside atomic!atmoic 블럭 내에서 예외처리하는 것을 피해야 한다. 이유는 블럭안에서 잡는 경우 예외처리를 해결한 줄 알고 예상한 것처럼 작동하지 않을 수도 있기 때문이다.

@transaction.atomic
def viewfunc(request):
    create_parent()

    # 이런식으로 처리
    try:
        with transaction.atomic():
            generate_relationships()
    except IntegrityError:
        handle_exception()

    add_children()

Lock

Lock 이란 무엇인가?

같은 자원을 사용하려는 다중 트랜잭션 환경에서 데이터베이스의 일관성과 무결성을 유지하기 위해 순차적으로 진행을 보장 할 수 있는 직렬화 장치

공유 Lock (Shared lock/Read Lock)

  • 데이터를 read 할 때 사용
  • shared lock이 동시에 여러개 적용 될 수 있음 / shared lock 하나라도 걸려있으면 exclusive lock은 걸수 없음

배타적 Lock (Exclusive lock/ Write lock)

  • 데이터를 읽고 쓸때 사용하며 트랜잭션이 완료될때까지 사용
  • 해당 Lock 이 해제 될때까지 접근 불가

블로킹

  • 하나의 자원에 lock이 연결되어있을 때, 다른 커낵션이 읽거나 쓰기 작업을 원하게 되는 경우 다른 일을 하지 못하고 묶여 있는 것을 의미

참고

Lock이란?