일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 부산
- 속초여행
- sql
- 남원맛집
- 의왕
- sqlp
- 데이터모델링의이해
- SQL가이드
- 부산여행
- 안양
- 조인
- 부산카페
- 영월카페
- 의왕맛집
- 수원
- 단일행함수
- 영월여행
- 삼겹살
- SQL전문가가이드
- join
- 속초카페
- sql 전문가 가이드
- 신멘
- 부산숙소
- 속초
- 코트야드메리어트호텔 서울판교
- 부산맛집
- 해운대
- SQLD
- 남원여행
- Today
- Total
지지 On Air
1-2-3. 모델이 표현하는 트랜잭션의 이해 [ SQLD / SQLP / SQL 가이드 ] 본문
이번절에서는 '트랜잭션' 에 관해 간단한 설명을 담았습니다.
2과목에서 다루게될 내용의 기초가 되는 부분이니 간단하게 이해하고 넘어가주세요 :)
과목 I. 데이터 모델링의 이해
- 제2장 데이터 모델과 SQL
> 제3절 모델이 표현하는 트랜잭션의 이해
트랜잭션은 데이터베이스의 논리적 연산단위이다.
계좌이체를 예를 들어 생각해보자. 돈을 보내는 사람의 계좌에서 이체금액을 차감하고, 돈을 받는사람의 계좌에 이체금액을 가산한다. 즉, '계좌이체' 라는 업무는 이렇게 2가지 단계로 진행되며, 데이터 정합성을 위해 이 두가지 작업은 전부 실행되든지 전부 취소되든지 해야 한다. 보내는사람의 계좌에서 금액을 차감했는데 받는사람의 계좌에 돈이 들어오지 않으면 안되니 말이다.
즉, 하나의 업무 단위로 묶여서 처리돼야 한다는 것이고, 이러한 업무 단위를 '트랜잭션' 이라고 한다.
고객이 상품을 구매하면서 발생하는것이 주문이다. 또한 하나의 주문은 여러개의 상품을 구매할 수 있다. 위 그림은 이에 대한 모델을 나타낸다.
그림에서 설명한바와 같이 IE표기법에서는 이러한 필수적인 관계에 동그라미를 붙이지 않고, 바커 표기법에서는 관계선을 실선으로 표기한다.
위와 같은 모델이 있다고 생각해보자.
선택적인 관계를 나타내고 있다. 그림에서 설명한바와 같이 IE표기법에서는 선택적인 관계에 원을 붙이고, 바커표기법에서는 관계선을 점선으로 표기한다.
위의 관계는, 주문에 대해 주문상세 데이터가 없을수도 있다는 것을 나타낸다. 주문만 하고 상품을 구매하지 않는일은 없을것이다. 즉 주문과 주문 상세의 데이터가 동시에 발생된다면, 당연히 하나의 트랜잭션으로 묶어서 처리해야 한다.
트랜잭션을 하나로 묶는다는 것은, All or Nothing인 원자성이 보장되도록 개발을 해야 한다는 것이다.
즉 커밋(Commit)의 단위를 하나로 묶어야 함을 의미한다. 그래야만 트랜잭션은 전체가 실행되거나 전체가 취소될 수 있다.
고객이 주문하는 도중에 핸드폰이 배터리가 다 되었을 수도 있고, 앱을 실수로 꺼버렸을 수도 있으며, 장애가 발생되어 연결이 끊어질 수도 있다. 이렇게 다양한 요인들로 인해 주문과 주문상세 API가 함께 수행되지 못하고 하나만 수행 된다면, 이는 주문과 주문상세에 잘못된 데이터가 발생할 수 있음을 의미한다. 따라서 반드시 하나의 트랜잭션으로 처리되어야 한다.
의사코드 (Pseudo Code)로 표현하자면 다음과 같다.
//고객의 주문 발생
Step1. 주문API{주문입력(주문번호=>110001, 고객명=>A, ...);
주문상세입력(주문번호=>110001, 상품번호=>1234, ...);
commit();}
본 포스팅은 '한국데이터산업진흥원' 에서 발행한 'SQL 전문가 가이드' 를 참고/인용 하였음을 밝힙니다.
'개발 > SQL [SQLD&SQLP]' 카테고리의 다른 글
1-2-5. 본질식별자 vs 인조식별자 [ SQLD / SQLP / SQL 가이드 ] (8) | 2022.07.16 |
---|---|
1-2-4. Null 속성의 이해 [ SQLD / SQLP / SQL 가이드 ] (3) | 2022.07.14 |
1-2-2. 관계와 조인의 이해 [ SQLD / SQLP / SQL 가이드 ] (14) | 2022.07.12 |
1-2-1. 정규화 (정규화/반정규화) [ SQLD / SQLP / SQL 가이드] (4) | 2022.07.11 |
1-1-5. 식별자 (Identifier) [ SQLD / SQLP / SQL 가이드 ] (6) | 2022.07.10 |