동시에 써도 안 꼬이게, 트랜잭션
친구에게 만 원을 보낸다고 해봐요. 내 잔액에서 만 원을 빼고, 친구 잔액에 만 원을 더해요. 두 가지가 모두 돼야 정상이죠. 그런데 빼기만 되고 더하기 직전에 전원이 꺽 꺼지면? 내 돈은 사라졌는데 친구는 못 받았어요. 이런 사고를 막으려고, 여러 손질을 한 묶음으로 다루는 방법이 트랜잭션이에요.
이체는 빼기와 더하기, 둘이 짝이에요
앞에서 데이터베이스가
정보를 안전하게 담는 창고라고 배웠죠.
그런데 한 가지를 고치는 게 아니라
둘을 함께 고쳐야 할 때가 있어요.
계좌 이체가 딱 그래요.
내 잔액에서 돈을 빼고,
받는 사람 잔액에 그만큼 더해요.
이 둘은 떼어 놓을 수 없는 짝이에요.
하나만 되면 곧바로 사고가 나요.
빼기와 더하기를 따로따로 눌러봐요. 하나만 누르면 돈이 사라지거나 갑자기 생겨요.
빼기만 누르니 내 돈이 사라졌죠.
더하기만 누르면 없던 돈이 생기고요.
어느 쪽도 옳지 않아요.
전체 돈의 합이 달라졌으니까요.
빼기와 더하기 사이의 그 짧은 틈,
바로 거기가 위험한 구간이에요.
그 틈에 무언가 끼어들면
장부가 어긋나 버려요.
그래서 둘을 묶을 방법이 필요해요.
전부 되거나, 전부 안 되거나
해결법은 의외로 단순해요.
빼기와 더하기를 한 묶음으로 묶어요.
이 묶음을 트랜잭션이라고 불러요.
묶음 안의 손질은 모두 임시예요.
전부 끝나야 한꺼번에 진짜로 반영하고,
하나라도 어긋나면 전부 취소해요.
그래서 절반만 남는 일이 없어요.
전부 되거나, 전부 안 되거나.
중간 상태는 누구에게도 안 보여요.
한 묶음으로 진행해봐요. 두 손질이 모두 준비돼야 확정되고, 취소하면 둘 다 사라져요.
둘이 함께 확정되니 합이 딱 맞죠.
취소를 누르면 둘 다 깨끗이 사라지고요.
어느 쪽이든 돈의 합은 그대로예요.
묶음으로 다루기만 했는데
그 위험한 틈이 사라진 거예요.
이렇게 전부 아니면 전무로 다루면
장부가 절대 어긋나지 않아요.
그런데 묶음 안에서 일하는 도중에
진짜로 전원이 꺼지면 어떻게 될까요?
끊겨도 통째로 되돌려요
묶음 안의 손질이 임시라고 했죠.
그 임시가 바로 안전장치예요.
일을 시작하기 전 상태를 잊지 않고
따로 적어 두거든요.
그래서 도중에 전원이 꺼져도
돌아왔을 때 보면 알아요.
이 묶음은 다 끝나지 못했구나, 하고요.
그러면 절반만 남기지 않고
적어 둔 이전 상태로 통째로 되돌려요.
한 단계 진행한 뒤 끊김을 눌러봐요. 절반만 남기지 않고 시작 전 상태로 통째로 되돌아가요.
끊겼는데도 장부가 멀쩡하죠.
절반만 남아 엉망이 되는 대신
깨끗이 시작 전으로 돌아갔어요.
이렇게 통째로 되돌리는 걸 롤백이라고 해요.
실패해도 흔적이 남지 않으니
다시 처음부터 해보면 그만이에요.
덕분에 마음 놓고 일을 맡길 수 있죠.
그런데 여러 사람이 같은 잔액을
동시에 고치려 들면 또 어떻게 될까요?
동시에 와도 차례로 처리해요
운영체제에서 비슷한 걸 본 적 있어요.
둘이 같은 자원을 동시에 건드리면
결과가 꼬이던 경쟁상태 말이에요.
잔액도 똑같아요.
두 사람이 동시에 잔액을 읽고
각자 고친 값을 써 넣으면,
나중에 쓴 사람이 앞사람 결과를 덮어써요.
한 번의 변경이 통째로 사라지는 거죠.
그래서 한 명씩 차례로 처리하게 막아요.
두 사람을 동시에 보내봐요. 그대로 두면 한쪽이 덮어써 꼬이고, 차례로 막으면 둘 다 반영돼요.
그대로 두니 한쪽 변경이 사라졌죠.
차례로 처리하니 둘 다 잘 반영됐고요.
동시에 와도 잠깐 줄을 세워
한 명이 끝난 뒤 다음 사람을 받는 거예요.
순서만 정해 주면 덮어쓰기가 사라져요.
앞에서 본 묶기, 롤백과 더해서
이제 동시에 써도 안 꼬여요.
이 셋이 모이면 데이터를
믿고 맡길 만큼 든든해져요.
정리해볼까요
한 줄로 모으면 이래요.
짝지어 고쳐야 할 손질을 한 묶음으로 묶어요.
전부 되거나, 전부 안 되거나.
중간에 어긋나면 절반을 남기지 않고
시작 전으로 통째로 되돌려요. 이게 롤백이에요.
여러 사람이 동시에 같은 곳을 고치려 들면
차례로 줄 세워 덮어쓰기를 막아요.
전부 아니면 전무, 어긋나면 롤백,
동시에도 안 꼬임. 그게 트랜잭션이에요.
핵심을 차례로 눌러 되짚어봐요. (이체는 짝 → 전부 아니면 전무 → 어긋나면 롤백 → 동시에도 안 꼬임)
이제 데이터를 안전하게 바꾸는
든든한 약속을 알게 됐어요.
돈이 사라지던 아찔한 틈도,
전원이 꺼져 절반만 남던 사고도,
동시에 고쳐 뒤엉키던 혼란도
한 묶음이라는 생각 하나로 풀렸죠.
많은 사람이 함께 쓰는 시스템일수록
이 약속이 더없이 소중해요.
다음에도 데이터를 다루는 지혜를
함께 이어서 살펴봐요.