블로그
article

엑셀 일괄 수정하듯 운영 데이터를 고치면 안 됩니다

재고·거래처·매출 데이터를 한 번에 바꾸는 작업의 위험과, 개발을 맡길 때 요구할 세 가지 안전장치를 정리합니다.

이국환SION.LAB 대표예상 읽기 시간 6

엑셀 일괄 수정하듯 운영 데이터를 고치면 안 됩니다

"거래처 코드 체계를 바꿔야 해서 기존 데이터를 한 번에 정리해 주세요." 시스템을 쓰다 보면 이런 요청이 생깁니다. 엑셀에서 열 하나 바꾸는 일처럼 느껴집니다.

엑셀과 다른 점이 하나 있습니다. 엑셀은 저장 전이면 되돌릴 수 있고, 잘못되면 눈에 보입니다. 운영 데이터는 덮어쓰는 순간 이전 값이 사라지고, 잘못된 값이 들어가도 화면은 정상으로 보입니다.

저희가 자료실 123건의 등록일을 재배치할 때 쓴 절차를 정리합니다. 항목 수가 많지 않아도 같은 순서를 씁니다. 한 건이든 백 건이든 되돌릴 수 없는 것은 같습니다.

실행 버튼을 누르기 전에 결과를 봅니다

스크립트를 세 모드로 나눴습니다. 계획, 적용, 복원입니다.

계획 모드는 아무것도 쓰지 않고 무엇이 어떻게 바뀔지만 출력합니다. 첫 실행 결과는 대상 123건, 변경 123건, 배정될 고유 날짜 123개였습니다. 이 숫자를 보고 나서야 적용합니다.

담당자가 이 단계에서 얻는 것이 있습니다. 대상 건수를 눈으로 확인할 수 있습니다. 거래처 500곳 중 200곳만 바꿀 생각이었는데 계획 출력에 500건이 찍히면, 실행하기 전에 그 자리에서 멈출 수 있습니다.

계획과 적용을 분리하지 않으면 실행 버튼을 누르는 순간까지 결과를 모릅니다. 조건을 잘못 걸어 의도보다 넓은 범위가 걸려도 실행 전에는 드러나지 않습니다. 계획 출력을 읽는 데 드는 시간은 잘못 바꾼 데이터를 되돌리는 시간보다 훨씬 짧습니다.

바꾸기 전 상태를 파일로 남깁니다

적용 모드는 스냅샷 없이는 실행되지 않게 했습니다. 변경 대상의 현재 값을 파일로 저장한 뒤에야 쓰기가 시작됩니다.

스냅샷 파일에는 운영 데이터가 들어 있으므로 권한을 소유자만 읽고 쓸 수 있게 제한합니다. 임시 폴더에 두더라도 다른 사용자가 읽을 수 있는 상태로 남기지 않습니다. 거래처 정보나 매출 수치가 담긴 파일이라면 이 조치는 선택이 아닙니다.

복원 모드는 그 스냅샷을 그대로 되돌립니다. 실제로 쓸 일이 없더라도 준비해 둡니다. 되돌릴 방법을 만들어 놓는 것과 만들어 놓지 않는 것은, 문제가 생겼을 때 판단의 여유가 다릅니다. 되돌릴 수 있으면 원인을 차분히 찾고, 되돌릴 수 없으면 급하게 덧칠하다가 더 망가집니다.

같은 작업을 두 번 해도 결과가 같아야 합니다

편집 도식: 본문에서 설명한 계획·스냅샷·적용·재확인 순서를 배치했습니다. 적용이 끝나면 계획을 한 번 더 돌려 변경 0건이 나오는지 확인하고, 그렇지 않으면 멱등성이 깨진 것으로 보고 원인을 찾습니다.

적용이 끝난 뒤 계획 모드를 다시 돌렸습니다. 두 번째 계획 결과는 변경 0건, 변경 없음 123건이었습니다.

계획 모드를 재실행해 변경 0건이 출력된 터미널 화면
출처: 자료실 등록일 재배치 스크립트의 계획 모드 실제 출력입니다. DB에 쓰지 않는 읽기 전용 실행이며, 첫 실행에서는 같은 자리에 변경 123건이 표시됐습니다.

이 확인이 왜 필요한지는 실패 상황을 생각하면 분명합니다. 작업 중간에 네트워크가 끊겨 절반만 적용된 상태에서 다시 돌린다고 해봅시다. 스크립트가 실행할 때마다 다른 결과를 만든다면, 일부는 첫 번째 값이고 일부는 두 번째 값이라 섞입니다. 어디까지 적용됐는지도 알 수 없습니다.

그래서 날짜 배정에 무작위 함수나 현재 시각을 쓰지 않았습니다. 각 항목의 고유 키와 고정된 값을 함께 해시해 날짜를 정합니다. 입력 순서가 바뀌어도 같은 항목에는 같은 날짜가 배정되고, 며칠 뒤에 다시 돌려도 결과가 같습니다.

무작위로 섞는 것이 목적처럼 보이는 작업에도 재현 가능한 방법을 씁니다.

건드리지 않기로 한 것을 확인합니다

바꿀 필드만 담아서 보냈습니다. 등록일 하나입니다. 나머지 필드를 포함하지 않으면 실수로 덮어쓸 일이 없습니다.

그래도 적용 후에 읽어서 대조했습니다. 식별자, 생성일, 수정일, 검증일, 다운로드 수, 댓글 수, 공개 여부를 스냅샷과 비교해 123건 모두 일치하는 것을 확인했습니다.

바꾸지 않기로 한 필드가 그대로인지 확인하는 것은 바꾼 필드가 제대로 들어갔는지 확인하는 것만큼 중요합니다. 의도한 변경은 눈에 띄지만 의도하지 않은 변경은 한참 뒤에 발견됩니다. 단가를 고치는 작업에서 거래처 여신 한도가 함께 초기화됐다면, 그 사실은 대금 결제가 막히는 날에야 드러납니다.

개발을 맡길 때 요구할 것

단계하는 일없으면 생기는 문제
계획무엇이 바뀔지 출력만실행하고 나서야 범위를 안다
스냅샷현재 값을 파일로 저장되돌릴 방법이 없다
적용바꿀 필드만 전송다른 필드를 덮어쓴다
재확인읽어서 스냅샷과 대조안 바뀌어야 할 것이 바뀐 줄 모른다
재계획계획을 한 번 더 실행두 번 돌리면 결과가 달라진다

담당자가 쓸 수 있는 형태로 바꾸면 질문 세 개입니다. 실행 전에 무엇이 바뀔지 보여줄 수 있는지, 되돌릴 수단이 있는지, 바꾸지 않기로 한 값이 그대로인지 확인했는지입니다.

다섯 단계가 번거로워 보이지만 실제로 드는 시간은 작업 자체보다 짧습니다. 되돌릴 수 없는 작업에서 아낄 시간이 아닙니다.

저희가 고객사 시스템의 데이터를 다룰 때도 같은 순서를 씁니다. 데이터 정합성과 운영 중 변경에 관한 관점은 업무 자동화 운영 체크리스트에서 알림과 재시도 구조로 다뤘습니다.

데이터 운영 절차 상담받기

#운영 데이터 변경#데이터 복구#시스템 이관 안전#롤백 준비
문의하기