2023-05-22[TIL]

jenna·2023년 6월 6일
0

TIL/WIL

목록 보기
26/60

트랜잭션(Transaction)

트랜잭션은 여러개의 작업을 하나로 묶은 실행 유닛입니다.
(MySQL에서는 입력하는 모든 쿼리 명령어들을 각각 하나의 트랜잭션이라고 할 수 있습니다.)

ACID

트랜잭션의 성질을 나타내는 4가지 기본 원칙입니다:

  1. 원자성(Atomicity): 한 트랜잭션의 연산들이 모두 성공하거나 반대로 모두 실패되도록 보장합니다. 트랜잭션은 성공적으로 commit 되거나, 중단되고 rollback됩니다.
  2. 일관성(Consistency): 데이터베이스의 상태가 일관되어야합니다. 예를 들어 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야합니다.
  3. 격리성(Isolation): 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리해야합니다. 예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야합니다.
    • 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준을 선택할 수 있습니다.
    • 트랜잭션 격리 수준:
      1. READ UNCOMMITED(커밋되지 않은 읽기)
      2. READ COMMITTED(커밋된 읽기)
      3. REPEATABLE READ(반복 가능한 읽기)
      4. SERIALIZABLE(직렬화 가능: 독립)
  4. 지속성(Durability): 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 합니다. 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야 합니다.

API의 요청을 통해 여러개의 삽입, 업데이트, 삭제 쿼리가 실행되어야 할 경우 트랜잭션 처리를 해준다면 요청 중 오류가 발생할 경우 rollback을 하여 요청이 실행되기 전 상태로 돌립니다. 정상적으로 처리가 이루어지는 경우 commit을 하여 서버에 변경된 데이터를 반영할 수 있게 됩니다.

Commit

모든 작업들을 정상 처리하겠다고 확정하는 명령어로서, 해당 처리 과정을 DB에 영구 저장하겠다는 의미입니다. Commit을 수행하면 하나의 트랜잭션 과정이 종료되는 것입니다. Commit을 수행하면 이전 데이터가 완전히 반영되어 UPDATE됩니다.

Roll-back

작업 중 문제가 발생되어 트랜잭션의 처리 과정에서 발생한 변경사항을 취소하는 명령어입니다. 해당 명령을 트랜잭션에게 하달하면, 트랜잭션은 시작되기 이전의 상태로 되돌아갑니다. 이것은 마지막 Commit을 완료한 시점으로 돌아간다는 말과 상통합니다. 즉, Rollback은 Commit하여 저장한 예전 상태를 복구하는 것입니다.

profile
https://github.com/jennaaaaaaaaa

0개의 댓글