지지 On Air

1-2-3. 모델이 표현하는 트랜잭션의 이해 [ SQLD / SQLP / SQL 가이드 ] 본문

개발/SQL [SQLD&SQLP]

1-2-3. 모델이 표현하는 트랜잭션의 이해 [ SQLD / SQLP / SQL 가이드 ]

슈스 지지 2022. 7. 13. 18:12
반응형


이번절에서는 '트랜잭션' 에 관해 간단한 설명을 담았습니다.

2과목에서 다루게될 내용의 기초가 되는 부분이니 간단하게 이해하고 넘어가주세요 :)


과목 I. 데이터 모델링의 이해
  - 제2장 데이터 모델과 SQL
    > 제3절 모델이 표현하는 트랜잭션의 이해 

트랜잭션은 데이터베이스의 논리적 연산단위이다.

계좌이체를 예를 들어 생각해보자. 돈을 보내는 사람의 계좌에서 이체금액을 차감하고, 돈을 받는사람의 계좌에 이체금액을 가산한다. 즉, '계좌이체' 라는 업무는 이렇게 2가지 단계로 진행되며, 데이터 정합성을 위해 이 두가지 작업은 전부 실행되든지 전부 취소되든지 해야 한다. 보내는사람의 계좌에서 금액을 차감했는데 받는사람의 계좌에 돈이 들어오지 않으면 안되니 말이다.

즉, 하나의 업무 단위로 묶여서 처리돼야 한다는 것이고, 이러한 업무 단위를 '트랜잭션' 이라고 한다.

 

고객이 상품을 구매하면서 발생하는것이 주문이다. 또한 하나의 주문은 여러개의 상품을 구매할 수 있다. 위 그림은 이에 대한 모델을 나타낸다.

그림에서 설명한바와 같이 IE표기법에서는 이러한 필수적인 관계에 동그라미를 붙이지 않고, 바커 표기법에서는 관계선을 실선으로 표기한다.

 

위와 같은 모델이 있다고 생각해보자.

선택적인 관계를 나타내고 있다. 그림에서 설명한바와 같이 IE표기법에서는 선택적인 관계에 원을 붙이고, 바커표기법에서는 관계선을 점선으로 표기한다.

위의 관계는, 주문에 대해 주문상세 데이터가 없을수도 있다는 것을 나타낸다. 주문만 하고 상품을 구매하지 않는일은 없을것이다. 즉 주문과 주문 상세의 데이터가 동시에 발생된다면, 당연히 하나의 트랜잭션으로 묶어서 처리해야 한다.

트랜잭션을 하나로 묶는다는 것은, All or Nothing인 원자성이 보장되도록 개발을 해야 한다는 것이다. 

즉 커밋(Commit)의 단위를 하나로 묶어야 함을 의미한다. 그래야만 트랜잭션은 전체가 실행되거나 전체가 취소될 수 있다.

 

고객이 주문하는 도중에 핸드폰이 배터리가 다 되었을 수도 있고, 앱을 실수로 꺼버렸을 수도 있으며, 장애가 발생되어 연결이 끊어질 수도 있다. 이렇게 다양한 요인들로 인해 주문과 주문상세 API가 함께 수행되지 못하고 하나만 수행 된다면, 이는 주문과 주문상세에 잘못된 데이터가 발생할 수 있음을 의미한다. 따라서 반드시 하나의 트랜잭션으로 처리되어야 한다.

의사코드 (Pseudo Code)로 표현하자면 다음과 같다.

//고객의 주문 발생
Step1. 주문API{주문입력(주문번호=>110001, 고객명=>A, ...);
		주문상세입력(주문번호=>110001, 상품번호=>1234, ...);
                commit();}

 

 

본 포스팅은 '한국데이터산업진흥원' 에서 발행한 'SQL 전문가 가이드' 를 참고/인용 하였음을 밝힙니다.
반응형
Comments