공부용 블로그

Transaction이란? 본문

설계/WebServer

Transaction이란?

tomato212 2018. 7. 28. 15:51

Transaction이란?


퓨터 과학분야에 트랜잭션은 "쪼개질 수 없는 업무처리의 단위"를 의미한다. ATM(Automated Teller Machine, 현금자동입출기)로 계좌이체를 한다고 생각해보자. 내 계좌의 잔액에서 이체한 금액만큼 빼는 일과, 상대 계좌의 잔액에서 해당 금액만큼 더하는 일은 쪼개어져서는 안된다. 즉 하나의 업무로 함께 진행되어야 하는 일이다. "더이상 쪼갤 수 없다는" 표현 때문에 이를 원자성(Atomicity)을 보장해야 한다라고 얘기한다. 쪼갤 수 없기 때문에 일부만 동작해선 안된다. 즉, 내 계좌 잔액에서 돈을 빼고, 상대 계좌 잔액을 더하려는 순간 정전이 일어났다면, 내 계좌에서 돈을 뺀 작업은 되돌려져야 한다. 각각의 부분 작업들이 동시에 동작하여 성공하던가, 하나라도 안되면 다 원래로 돌아가던가.


부분 작업들 여러개가 모여진 이러한 트랜잭션을 처리하기 위해 데이터베이스는 다음과 같은 기술을 제공한다.


  1. 롤백(Rollback): 부분 작업이 실패하면 트랜잭션 실행 전으로 되돌린다.
  2. 커밋(Commit): 모든 부분작업이 정상적으로 완료하면 이 변경사항을 한꺼번에 DB에 반영한다.

생물정보분석 관련 시스템을 만든다면, 뭔가 일괄로 동작해야 하는 다수의 부분작업을 하나의 트랜잭션으로 처리하게 할 필요가 있는 경우가 많다. 중간에 예상치 못한 오류가 발생하면, 작업 시작 전으로 되돌려져야 한다.


오늘날 대다수의 소프트웨어가 (Web) 환경에서 동작한다. 웹 페이지에서 특정 링크를 클릭하는 순간 "요청(Request)"이 발생하고, 서버는 이 요청에 적당한 "응답(Response)"을 만들어 사용자의 웹 브라우저로 보낸다. 만일 인터넷 뱅킹에서 계좌이체를 한다고 하면, 계좌이체 버튼을 누른 순간부터, 결과화면이 보여지는 순간까지는 하나의 트랜잭션이라고 봐도 무방하다. 물론 세밀히 구분해 보면 그 내부에 더 다양한 트랜잭션이 있겠지만, 웹 환경의 특성상 요청부터 응답까지를 통상 하나의 트랜잭션으로 볼 수 도 있다. 이 얘기는 계좌 이체 부분업무가 다 완료됐는데, 마지막에 결과 화면을 보여주는 부분에서 서버에 이상이 생겨 화면에 출력되지 않는 일이 생긴다면 이 트랜잭션은 반드시 롤백되어야 하는 것임을 의미한다. 결과화면이 사용자에게 제대로 전송되지 않았다면 거래 자체가 안돼야 하는 것이기 때문이다.


성능은 was하나로 결정되는 것이 아니라 서버 스펙, 네트워크 환경, OS, 사용언어, 짜져있는 비즈니스 로직, RDB 종류에

따라 천차만별입니다.