이전에 회사에서 정말 특수한 조건때문에 몽고디비에 데이터 히스토리를 남겨야 할 일이 있었어..


아래와 같이 값이 있다 했을때


x => 1, 2, 3, 4, 5, 4, 3, 6, 7, 9


----------------------> 시간



현재 최종값을 달라하면 9를 주면 되는거고


어떻게 값이 변해왔는지 보려면 히스토리 특정 영역을 주면 되는거고



그리고 문제가 되었던 당시의 상황


(내가만든 서비스) <-> (서드파티) <-> 실데이터


형태로 데이터 in/out이 일어나던 상황이었는데,



서드파티 입장에서 delete를 구현하고 싶어 했음


나한테 하는 얘기가


그분이 말하길 [

x => 1, 2, 3, 4, 5, 4, 3, 6, 7, 9

----------------------> 시간


일때,


x => 1, 2, 3, 4, 5, 4, 3, 6, 7, (지워짐)

----------------------> 시간


형태로 값을 지워주실 수 있나요?

]


하는거..



그래서 내가 [

음? 9란값이 없어져도 괜찮나요? 나중에 지우기 전 마지막값 안필요하세요?

]


라고 했더니


그분께서 [

x => 1, 2, 3, 4, 5, 4, 3, 6, 9(<= 요놈을 업데이트), (지워짐)

----------------------> 시간


하면 돼지 않아요?

]


하는거임


그래서 내가 [

아, 그렇게 앞 값을 수정해버리면, 히스토리 일관성이 깨진다.


데이터를 지우는 행위 역시 히스토리의 일종이므로,


x => 1, 2, 3, 4, 5, 4, 3, 6, 7, 9, {deleted}

----------------------> 시간


형태로 지워졌다는 히스토리가 새로 추가되는것이 맞다.


히스토리를 관리하는 입장에서는


append도 insert고, update도 insert고 delete도 insert다.


결국 너는 나한테 올바른 시간만 주면 내가 그 당시의 값을 리턴 해주겠다.

]


했더니 그분이 갑자기 [

음?? 몽고 update 되지 않아요? update 명령이 있는걸로 알고있는데..

]


이러기 시작함..


내가 [

아, mongodb에 update가 당연하게 가능하구요, 

지금 얘기하는건 몽고가 update를 지원 안하기때문에 저렇게 해야된다는게 아니고,

히스토리를 보관하는 매커니즘에 관한 설명을 드린거에요

]


그분 왈[

흐음... 이상하다..

]


이러고는 머 여튼 각자 다른 업무들 보고 그날이 다 가고, 다음날이 됨


그분 왈[

제가 어제 해봤는데요, mongodb update 되던데요?

자 보세요 어떻게 하냐면요..

]


하면서 나에게 mongodb 강의를 하기 시작함..


ㅋㅋ 이만한 발암 이길사람 있음?


하 글쓰다가 다시 기억이 났는데 또 빡치넼ㅋㅋㅋㅋㅋ 하 진짜 암걸릴거같아....................