트랜잭션(Transaction)

고장난 고양이·2022년 8월 26일
0

데이터베이스

목록 보기
5/5
post-thumbnail

🤝 트랜잭션이란?

트랜잭션(Transaction)이란, 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다.

데이터베이스에 접근하는 방법은 쿼리(SELECT,INSERT,DELETE,UPDATE)를 이용하여 데이터베이스를 접근하는 것을 의미한다.

작업의 단위는 한문장이아닌 여러개의 쿼리를 하나로 묶는 단위를 말한다.

🤝 트랜잭션의 특징

1️⃣ 원자성(Atomicity)

  • 트랜잭션과 관련된 일이 모두 수행되었거나, 전혀 반영되지 않았다 둘중 하나여야 함을 뜻한다.

  • 트랜잭션 단위로 데이터를 처리하지않으면, 설계한사람이 시스템을 이해하기 힘들며, 오류가생길 때 원인을 찾기 힘들어 대처하기 힘들다.

2️⃣ 일관성(Consistency)

  • 일관성은 허용된 방식으로만 데이터를 변경해야하는 것을 의미합니다.

  • 즉, 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야함을 의미합니다.

3️⃣ 독립성(Isolation)

  • 독립성은 둘이상의 트랜잭션이 동시에 실행할 경우 서로 끼어들지 못하는 것을 말합니다.

  • 이는 복수의 병렬 트랜잭션이 서로 격리되어 마치 순차적으로 실행되는 것처럼 작동되어야하고, 데이터베이스는 여러 사용자가 같은 데이터에 접근할 수 있어야합니다.

  • 독립성은 여러개의 격리 수준으로 나누어서 보장합니다.

    • Sperializable : 트랜잭션을 순차적으로 진행시키는 것을 의미합니다.
      이는 매우 엄격한 수준으로 해당 행에 대해 격리 시키고 이후 트랜잭션이 이행에 대해 일어난다면 기다려야합니다. 교착상태가 일어날 확률이 많고 가장 성능이 떨어지는 격리 수준입니다.
    • Repeatable_read : 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만, 새로운 행을 추가하는 것은 막지 않습니다.
    • Read_committed : 가장 대중적인 격리 수준입니다. 커밋 완료된 데이터에 대해서만 조회를 허용합니다.
    • Read_Uncommitted : 가장 낮은 격리수준이며, 하나의 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출되는 문제가 있으나 속도는 가장 빠릅니다.

4️⃣ 지속성(Durability)

  • 성공적으로 수행된 트랜잭션은 영원히 반영되는 것을 의미합니다.

  • 이는 데이터베이스에 시스템장애가 나타나도 원래되로 복구되는 회복기능이 있어야하며, 이를 위해 데이터베이스는 체크섬, 롤백, 저널링을 제공합니다.

  • 저널링 : 커밋하기전에 변경사항을 로깅하는것, 변경사항에대한 로그를 남기는 것

  • 체크섬 : 중복검사의 한종류이며 오류정정을 통해 자료를 보호

💾 트랜잭션의 Commit, RollBack

1️⃣ Commit

  • 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성있는 상태에 있을 때, 하나의 트랜잭션이 끝났다라는 것을알려주기위해 사용하는 연산이다.

  • 이 연산을 사용하면 수행했던 트랜잭션이 로그에 저장되며, 후에 Rollback 연산을 수행했었던 트랜잭션단위로 하는것을 도와준다.

2️⃣ RollBack

  • 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진경우, 트랜잭션을 처음부터 다시 시작하거나, 트랜잭션의 부분적으로만 연산된 결과를 다시 취소시킨다.

  • 후에 사용자가 트랜잭션 처리된 단위대로 Rollback을 진행할 수도 있다.

✅ 참고

https://mommoo.tistory.com/62

https://wonit.tistory.com/462

profile
개발새발X발일지

0개의 댓글