본문 바로가기
Java | spring/Java Basic

알아도 어려운 트랜잭션 개념정리

by 워니 wony 2021. 6. 4.

트랜잭션은 백엔드 개발자라면 제대로 알고 있어야 하는 개념이다. 간단한 서비스만 개발한다면 덜 중요하게 느껴지기도 하겠지만 복잡한 서비스를 개발하고 운영을 하다보면 중요성을 느끼게 된다.

 

대용량 데이터 동기화 등을 처리하다 보면 트랙잭션을 어떻게 처리 하느냐에 따라 데이터의 정합성 등에 영향을 주게 된다. 단건이 아닌 여러건의 배치를 진행하다 보면 트랜잭션으로 인해 단건(나는 각 처리 단위별로 롤백되게 하고자 했었음)이 아닌 전체가 롤백되어 서비스 오픈 전 테스트를 하다 놀란적이 있기도 했다. 이 때 관련 설정을 보고 다양한 테스트를 하면서 내용을 배우기도 했다.

 

참고로 정보처리기사 등 자격증을 준비하다보면 필수적으로 알아야하는 문제로 나오는 개념이기도 하다. 문제를 풀다보면 가끔 헷갈려서 잘못된 답을 선택 하기도 했던 기억이 있다. 제대로 알아놓으면 좋으니 개념에 대해서도 알아보자.

 

트랜잭션 Transaction

  • 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위
  • 데이터베이스 상태를 변화시킨 다는 것은 SQL 이용하여 데이터베이스에 접근하는 것을 의미(Select, insert, update, delete)
  • 작업 단위는 질의어 한문장이 아니라, 기준에 따라 정해짐
  • 트랜잭션 설계를 하는 것이 개발자에게 중요함

 

트랜잰셕의 특징

원자성 Atomicity

  • 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 하는
  • 트랜잭션은 사람이 설계한 논리적인 작업단위로 일처리는 작업 단위별로 이루어져야 데이터가 깨지지 않음
  • 트랜잭션이 일부만 처리되는 경우 오작동 하더라도 원인을 찾기 힘들어
  • 오류가 발생하는 경우 전체를 롤백 시키게 작업

 

일관성 Consistency

  • 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는
  • 트랜잭션이 진행되는 동아 데이터베이스가 변경되더라도 트랜잭션을 진행하기 위해 참조한 데이터베이스를 기준으로 처리가 완료 되어, 일관성 있는 데이터 확인 가능

 

독립성 Isolation

  • 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우 어느 하나의 트랜잭션이라도 다른 트랜잭션의 연산을 끼어 없음
  • 하나의 트랜잭션이 완료될 때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 없음

 

지속성 Durability

  • 트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야

 

 

트랜잭션의 Commit, Rollback

 

Commit

  • 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성있는 상태에 있을 트랜잭션이 끝났다는 것을 알려주는 연산
  • 트랜잭션이 로그에 저장되고, 이후 Rollback 있도록 하는 중간 단위가

 

Rollback

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

댓글