[AI와 같이 고친 에러들] 코드는 똑같은데 상품은 서로 달랐던 날

오늘은 별것 아닌 줄 알았던 주문서 엑셀 하나 때문에 한참을 헤맸다.

거래처에서 보내주는 주문서 엑셀을 우리 ERP에 올리면, 상품코드를 보고 자동으로 재고에 있는 상품과 연결해주는 기능이 있다. 편하게 잘 쓰고 있었는데, 어느 날 거래처 담당자한테서 “이거 단가가 이상한데요?” 하는 연락을 받았다. 처음엔 또 단순 오타인가 싶었다.

그런데 확인해보니 더 찜찜한 문제였다. 화면에는 “매칭 실패”라는 표시가 하나도 없었다. 전부 정상으로 연결된 것처럼 보였는데, 그중 몇 건이 전혀 다른 상품의 가격과 재고로 잡혀 있었다. 조용히 틀려 있었다는 뜻이다.

처음엔 엑셀 파일 자체가 깨졌거나, 거래처가 상품코드를 잘못 적어 보낸 줄 알았다. 그래서 AI한테 “엑셀 파일에 이상한 값 있는지 확인해줘”라고 물었다. 그런데 파일 자체는 멀쩡했다. 코드도 사람이 보기엔 다 맞아 보였다.

비개발자 입장에서는 여기서부터 머리가 아파진다. 파일이 멀쩡하고 코드도 맞는데, 왜 결과는 틀리는가.

AI랑 같이 주문서 엑셀을 한 줄씩 다시 열어봤다. 그러다 알게 된 게, 이 엑셀에는 사실 상품코드 역할을 하는 열이 두 개 있었다는 거다. 하나는 거래처 쪽에서 쓰는 짧은 코드, 다른 하나는 우리 ERP의 전체 상품코드였다. 우리 시스템은 그동안 짧은 코드 하나만 보고 매칭을 했다.

문제는, 짧은 코드가 서로 다른 두 상품에 똑같이 찍히는 경우가 있었다는 거다. 비유하자면 주민등록번호 뒷자리만 보고 사람을 찾았는데, 알고 보니 그 뒷자리가 같은 사람이 두 명 있었던 셈이다. 앞자리(전체 코드)까지 봐야 누가 진짜인지 구별이 됐다.

AI한테 물어봤더니 처음엔 “코드가 일치하면 같은 상품으로 보는 게 맞다”고 자신 있게 말했다. 그 말을 그대로 믿었다가, 실제 데이터를 다시 대조해보니 역시나 확인은 따로 해야 했다. 짧은 코드 기준으로 전체 주문 건을 다시 세어보니, 눈에 보이는 “매칭 실패”는 10건 정도였는데, 눈에 안 보이게 다른 상품으로 잘못 연결된 건이 8건 더 있었다. 후자가 훨씬 위험했다. 멀쩡하게 처리된 것처럼 보이니까.

결국 핵심은, “코드가 같다”는 것과 “같은 상품이다”는 것이 늘 같은 말이 아니라는 거였다. 짧은 코드는 원래 전체 코드의 일부를 잘라서 만든 값인데, 서로 다른 두 상품의 전체 코드 중 그 일부분만 우연히 똑같을 수 있었다. 화면에는 “매칭됨”이라고만 뜨니, 사람 눈으로는 어느 게 진짜 맞는 매칭인지 구별할 방법이 없었다.

거래처 엑셀에 전체 코드가 들어 있는 열이 있으면 그 열을 먼저 보고, 없을 때만 짧은 코드로 매칭하도록 순서를 바꿨다. 전체 코드가 있는 경우는 더 이상 짧은 코드만으로 헷갈릴 일이 없다. 내 환경에서는 과거 주문서 전체를 다시 돌려서, 바뀐 기준으로 하나도 안 틀리고 맞는지 먼저 확인한 다음에 실제 화면에 반영했다.

고친 다음에는 타입 검사와 전체 빌드까지 한 번 더 돌려서 다른 화면이 깨지지 않았는지 확인했다. 다행히 빌드도 무사히 통과했고, 그제서야 커밋했다.

돌이켜보면 AI가 “코드가 일치하니 맞는 상품”이라고 자신 있게 말해도, 그 코드가 정말 한 상품만을 가리키는 값인지는 내가 따로 확인해야 했다. 특히 “매칭 실패”처럼 눈에 보이는 에러보다, 아무 표시 없이 조용히 다른 값으로 연결되는 쪽이 훨씬 늦게 발견된다는 걸 이번에 다시 배웠다. 결과가 멀쩡해 보일 때 오히려 한 번 더 들여다봐야 한다는 게, 이번에 가장 크게 남은 교훈이다.

비개발자 김부장의 바이브코딩 도전기는 오늘도 조용히 틀려 있던 숫자 하나에서 이렇게 또 하나를 배우고 지나간다.

#바이브코딩 #비개발자개발기 #AI협업 #ERP자동화 #김부장

댓글 남기기