Transaction

5ERN·2023년 1월 11일
0

위치킨

목록 보기
7/7

이번 프로젝트를 진행하며 carts 테이블과 cart_item_options라는 테이블에 각각 데이터를 넣어주는 API를 만들게 되었다.

문제는 carts에 데이터가 추가되고 cart_item_options에도 데이터가 추가되어야 추후 carts 목록을 불러오는 쿼리를 이용했을때 정상적으로 불러와지는데,
나의 경우 cart_item_options에 오류가 발생하여 carts에만 데이터가 들어가게 되었고
이로 인해 carts 테이블만 봤을때는 정상적으로 cartId가 배정되어 장바구니에 물품이 있는것처럼 보이지만, 실제로 조회API를 사용하면 보이지 않는 문제가 발생하였다.

이를 방지하기 위해 멘토님께서 트랜잭션(TransAction)에 대해 찾아보라고 조언을 주셨고 학습하며 적용한 후 내가 이해한 선에서 작성하는 정리글이다.

한 예시를 들어보겠다.

마트에서 무값을 주고 무를 받는다.
무값을 주었는데, 점원이 갑자기 쓰러져 무를 받지 못하였다.
'내 무 어딨니?'
'사람이 쓰러졌는데 뭔 무여 몰라 돌아가 아 몰라'

==> 트랜잭션을 적용해보자!

은행에서 현금을 수표로 교환하기 위해 찾아갔다.
현금을 주었는데, 갑자기 은행에 강도가 들어 은행 서비스가 혼란상태에 빠졌다가 복구되었다.
'나 돈 줬는데요? 내 수표 어딨나여?'
'네에 고갱넴 현금 받은 이력은 있는데 수표를 드리지 않았군녀! 일단 현금 돌려드리겠습니다!'

예시를 기반으로 나름대로 트랜잭션을 정의해보면,

두가지 작업을 '트랜잭션'을 적용하면, 작업을 진행하다 오류가 발생했을 시
이미 진행된 작업의 결과'만' 출력되는 것이 아닌,
다시 롤백(Rollback)하여 작업을 시행하기 전의 상태로 돌아가게 된다.
당연히, 작업이 정상적으로 처리가 되었을 때는
> DB가 일관성있는 상태를 알려주기 위해 커밋(Commit)하여 결과가 도출된다!

profile
응애개발자

0개의 댓글