생각/개발

[AppSheet억까일기] 새로 추가한 데이터에 이전 버전이 어디 있어

카와즈 2025. 1. 9. 21:22

어느날 저는 재고가 변경될 때마다 이력을 남기는 기능을 만들고 있었습니다. 별로 어려울 것 없는 기능이잖아요, 그렇죠? 아무런 고민 없이 저는 봇을 만들었습니다.

 

"어디 보자……. 재고 테이블에 Add나 Update가 일어났을 때…… 흠, 재고 변경량을 계산해야 하니까 이전 데이터와 새 데이터를 비교해야 하겠군."

 

앱시트에서는 이럴 때 쓰라고 [_THISROW_BEFORE], [_THISROW_AFTER]라는 개념이 있습니다. 어떤 행(데이터)에 수정이 일어났을 때, 수정되기 직전과 수정된 직후의 상태의 복사본을 떠 놓는 겁니다. 또 저는 별 고민 없이 변경 수량을 다음과 같이 적었습니다.

 

[_THISROW_AFTER].[amount] - [_THISROW_BEFORE].[amount]

 

그리고 재고를 변경해 보고 이력이 잘 추가되길래 그대로 티켓을 QA에 넘겼습니다. 그리고 QA도 별일 없이 지나가, 재고 변경 이력 기능은 개발완료 처리가 되었습니다.

 

그로부터 2개월 정도 지나서, 한창 시스템 검수 작업을 진행하던 클라이언트에게서 버그 보고가 들어옵니다. 재고 변경량이 0이 되는 경우가 있다는 내용이었습니다.

 

데이터를 자세히 보니 한 상품의 재고가 처음으로 등록될 때, 그러니까 재고 데이터가 Update가 아니라 Add될 때 이력이 문제란 것을 발견했습니다. 아니 잠깐만요, 그럼 그게 QA는 어떻게 통과한 건데요? 분명히 재고가 신규등록되는 케이스도 테스트를 했단 말입니다.

 

데이터를 더 자세히 보니 또 다른 공통점을 발견합니다. 문제가 된 데이터는 전부 봇이 추가한 데이터였습니다. 사람이 폼으로 입력한 게 아니라요. 어……그러니까 수동으로 데이터를 추가할 때랑 봇이 데이터를 추가할 때 [_THISROW_BEFORE]에 든 값이 다르다고요? 믿을 수 없지만 일단 값을 확인해 보기로 합니다(앱시트의 봇은 이럴 때 값을 확인하기가 정말정말 귀찮습니다). 그리고, 엄……진짜로 값이 달랐습니다.

 

수동으로 데이터를 추가하면 [_THISROW_BEFORE]는 비어 있었습니다. 그런데 봇이 데이터를 추가할 때 [_THISROW_BEFORE]에는 [_THISROW_AFTER]와 똑같은 값이 들어 있더랩니다.

 

……아니 새로 추가한 데이터에 이전 버전이 어디 있어! 왜 이전 버전과 새 버전이 똑같은데!!