-
[SQL 전문가 가이드] 1과목 - 제 8장. 모델(Model)이 표현하는 트랜잭션(Transaction)의 이해 (필수/선택 관계)데이터베이스(DataBase)/SQL 전문가 가이드 (2020 개정판) 2023. 7. 10. 11:32728x90
<< 시작 전, 참고하세요 ! ✏️ >>
[SQL 전문가 가이드] 1과목 - 제 4장. 관계(Relationship) 정리 ( + RDBMS, Relation과 Relation의 차이)
1. 관계(Relation)의 개념 가. 관계의 정의 관계(關係, Relationship) : 둘 이상의 사람, 사물, 현상이 서로 관련을 맺거나 관련이 있음. 즉, 상호 연관성이 있는 상태를 뜻한다. 이러한 관계를 데이터 모
01-study-for-me.tistory.com
트랜잭션(Transaction)이란?
업무 처리를 위한 논리적인 작업 단위
또는
데이터베이스의 논리적 연산 단위
트랜잭션(Transaction)은 "쪼갤 수 없는 업무 처리의 최소 단위"로, 직역하면 '거래, 거래내역'이라 할 수 있다.
이러한 트랜잭션은 흔히 계좌이체를 통해 설명할 수 있는데, 이보다 더 적합한 사례는 찾아보기 힘들다.
A가 B에게 5만원을 송금하는 것을 예로 들자.
- A의 계좌에서 5만원을 차감한다.
- B의 계좌에 5만원을 입금한다.
정상적인 송금을 위해서는, 위처럼 2가지 단계로 진행되어야 함을 알 수 있다.
이때 만약 1은 정상적으로 작업이 이루어졌으나, 2에 문제가 발생한다면 어떻게 될까?
2번 단계에 문제가 발생하는 경우 (B의 계좌에 5만원을 입금)
- A는 5만원이 차감되어 있지만, B의 계좌에는 송금되어야 할 금액이 입금되지 않은 채 종료가 됨.
위처럼 금액이 차감 되었으나 입금 작업이 이루어지지 않아, 송금하고자 한 금액이 사라지는 문제가 발생하게 된다.
이러한 문제를 방지하기 위해, '데이터 정합성'을 고려하여 위 단계의 작업이 모두 실행되든지(All) 아니면 전부 취소되든지(Nothing) 하여야 한다.
* Tip. 작업의 논리적 단위가 단일 연산이 아닐 수 있다.
더보기이는, 위 예시를 통해 확인할 수 있다.
송금이라는 작업의 트랜잭션을 자세히 살펴보면, 단계가 1,2 단계로 나뉘어진 것을 확인할 수 있다.
하지만 우리는 이것을 전부 실행하던지(All) 또는 모두 취소하던지(Nothing) 하여야 하기 때문에,
여러 단계가 존재하는 작업 또한 트랜잭션인 것이다.
즉 하나의 업무 단위로 묶어서 처리돼야 한다는 것이고 이러한 업무 단위를 트랜잭션이라 한다.
여기까지는 트랜잭션의 정의와 이해에 대한 내용이다.
그렇다면 업무적으로 발생되는 트랜잭션 말고 모델에도 트랜잭션이 발생할 수 있다는 것을 알고 있는가?
데이터 모델링 진행 시에도 트랜잭션을 표현할 수 있다.
1. 모델 필수 관계
주문과 주문상세 모델 필수 관계 고객이 상품을 구매하면서 발생하는 것이 주문이다. 또한 하나의 줌누은 여러 개의 상품을 구매할 수 있다.
이때, 주문과 주문상세의 데이터는 함께 발생되는지, 아니면 독립적으로 발생되는지를 생각해보아야 한다.
*** 참고 ***
- IE 표기법을 통해, 필수적인(Mandatory) 관계일 경우 관계선 끝에 원이 붙지 않는다.2. 모델 선택 관계
주문과 주상세 모델 선택 관계 위 모델은 주문과 주문상세 모델의 관계가 선택적임을 표현하고 있다.
즉, 이는 주문에 대해 주문 상세 데이터가 없을 수도 있다는 것으로, 주문만하고 상품을 구매하지 않은 경우이다.
일반적인 쇼핑몰 업무에서는,
애초에 고객이 상품을 구매함으로써 주문이 발생되는 구조이므로 '필수적'일 수 밖에 없다.
하지만 아이러니하게도 대부분의 관계는 선택적인 경우가 더 많다.
필수 / 선택적인 관계에 대한 예시를 확인해보자.
관계선택사양 설명을 위한 지하철 예시
요즈음 웬만한 대도시에는 지하철이 많이 운행된다. 만약 지하철 문이 닫히지 않았는데 지하철이 떠난다면 무슨 일이 발생할까? 아마도 어떤 사람은 머리만 지하철 안에 들어오고 몸은 밖에 있는 채로 끌려갈 것이고, 또 어떤 사람은 가방만 지하철에 실어 보내는 사람도 있을 것이고, 지하철과 승강기 사이에 몸이 낄 수도 있을 것이다. 물론 지하철운행과 지하철문의 관계는 이렇게 설계되지 않아 위와 같은 어처구니없는 일은 발생하지 않을 것이다. “반드시 지하철의 문이 닫혀야만 지하철은 출발한다.” 지하철출발과 지하철문닫힘은 필수(Mandatory)적으로 연결 관계가 있는 것이다. 이와 같은 것이 데이터 모델의 관계에서는 필수참여관계(Mandatory)가 된다.
또 지하철 안내방송시스템의 예를 들어보자. 지하철의 출발을 알리는 안내방송은 지하철의 출발과 상관없이 방송해도 아무런 문제가 발생하지 않는다. 물론 정해진 시간에 방송을 하면 승객에게 정보로서 유익하겠지만 꼭 그렇게 할 필요는 없다. 그래서 가끔씩 시스템의 녹음된 여성의 목소리가 아닌 시끄러운 남자 기사가 방송을 하는 경우가 있다. 안내방송시스템이 고장이 나도 지하철운행에는 별로 영향을 주지 않는다. 방송시점도 조금씩 다르게 나타나도 지하철이 출발하는 것과는 밀접하게 연관되지 않는다. 이와 같이 지하철의 출발과 지하철방송과는 정보로서 관련은 있지만 서로가 필수적인(Mandatory) 관계는 아닌 선택적인 관계(Optional)가 되는 것이다.728x90'데이터베이스(DataBase) > SQL 전문가 가이드 (2020 개정판)' 카테고리의 다른 글