안전한 대량 가져오기: 미리보기, 검증, 커밋 패턴
안전한 대량 가져오기는 잘못된 데이터와 예상치 못한 변경을 방지합니다. 미리보기, 검증, 행별 오류 처리, 롤백 친화적 커밋 패턴을 사용하세요.

대량 변경이 잘못되는 이유(그리고 사용자가 기대하는 것)
대량 변경은 사소하지만 현실적인 이유로 실패합니다. 파일은 거의 맞는데 열 이름 하나가 다르거나, 몇몇 행에 필수 필드가 비어 있거나, ID가 데이터베이스와 일치하지 않아 매칭이 안 되는 경우가 있습니다. 또는 데이터는 유효하지만 필드에 잘못 매핑되어 전화번호가 메모 열로 들어가는 식입니다.
이게 더 위험한 이유는 속도입니다. 한 번의 잘못된 가정이 수백에서 수천 건의 레코드에 적용된 뒤에야 발견될 수 있습니다. 안전한 대량 가져오기는 단순한 백엔드 문제가 아니라 신뢰의 문제입니다.
사용자가 기대하는 한 가지는 단순합니다: 일이 일어나기 전에 무엇이 일어날지 보여 달라는 것. 가장 신뢰할 수 있는 패턴은 미리보기 → 검증 → 커밋입니다.
- 미리보기: 변경 요약과 실제 변경 샘플을 명확히 보여줍니다.
- 검증: 누락된 필드, 잘못된 형식, 불일치 참조를 잡는 규칙을 실행합니다.
- 커밋: 사용자가 확인한 뒤 위험에 맞는 방식으로 변경을 적용합니다.
사람들은 또한 두 가지 실패 유형에 대한 보호를 원합니다.
수정 가능한 문제는 행별로 처리해야 합니다. 예: 12개의 행에 잘못된 이메일 형식이나 우편번호 누락이 있는 경우 사용자는 그 행들만 고치고(리포트 다운로드, 인라인 편집 또는 재업로드) 나머지는 커밋 준비 상태로 두고 싶어합니다.
차단 문제는 모든 것을 멈춰야 합니다. 매핑이 잘못되어 핵심 필드를 덮어쓰거나 파일이 잘못된 워크스페이스/고객용이라면, 명확한 설명과 함께 강제 중단(hard stop)이 최선입니다.
사용자는 또한 감사 추적을 원합니다: 실행 ID, 타임스탬프, 누가 실행했는지, 어떤 파일을 사용했는지, 무엇이 변경되었고 무엇이 실패했는지. 이게 지원을 빠르게 하고 문제가 생겼을 때 정리를 가능하게 만듭니다.
미리보기-검증-커밋 흐름을 쉬운 말로 정리하면
대량 변경은 버튼 한 번으로 수천 건을 건드릴 수 있어서 위험해 보입니다. 위험을 줄이는 가장 단순한 방법은 작업을 세 단계로 분리하는 것입니다. 각 단계는 자체 출력물을 가집니다.
1단계: 미리보기(배치 준비)
입력(CSV, 붙여넣은 행, 앱 내 선택된 레코드)을 받아서 준비된 배치로 만듭니다. 이 단계의 목적은 시스템이 실제로 무엇을 하려고 하는지 변경 전에 보여주는 것입니다.
좋은 미리보기는 세 가지에 답합니다: 무엇이 변경되는가, 몇 건이 영향을 받는가, 그리고 무엇이 의심스러운가.
최소한 합계(총 행, 매칭된 레코드, 신규 레코드, 건너뛴 행), 실제 행의 작은 샘플, 그리고 위험한 항목에 대한 명확한 경고(필수 필드 누락, 애매한 매칭, 특이값)를 포함하세요. 또한 매칭 규칙(예: "이메일로 매칭" 또는 "외부 ID로 매칭")을 명시하고, 배치에 이름, 타임스탬프, 고유 배치 ID 같은 정체성을 부여하세요.
2단계: 검증(드라이런)
드라이런은 데이터베이스에 쓰지 않는 것을 의미합니다. 실제 업데이트 때 사용할 동일한 검사를 실행하되 결과만 보고서로 만드세요.
검증은 행 규칙(이 행이 유효한가?)과 행간 규칙(이 행들이 서로 충돌하는가?)을 모두 포함해야 합니다. 출력은 모호한 통과/실패가 아니라 요약과 특정 행에 연결된 문제 목록이어야 하며, 사람들이 추측 없이 문제를 고칠 수 있게 해야 합니다.
3단계: 커밋(변경 적용)
커밋은 되돌릴 수 없는 지점이므로 성공적인 드라이런 후에만 가능해야 합니다. 사용자는 "파일" 자체를 확인하는 것이 아니라, 미리보기와 검증을 거친 특정 준비된 배치를 확인하는 것입니다.
이 결정 지점이 중요합니다. 파일이 바뀌거나 매핑이 바뀌거나 데이터가 다시 업로드되면 새 배치를 생성하고 다시 확인을 요구하세요.
예: 5,000명의 고객을 가져옵니다. 미리보기는 이메일로 4,920건이 매칭되고 60건이 신규이며 20건은 이메일 누락으로 건너뛴다고 보여줍니다. 드라이런은 12개 행에서 잘못된 전화 형식을 발견합니다. 그 12개가 고쳐져야만 해당 배치 ID에 대해 "배치 커밋"이 가능해집니다.
입력, 매핑, 레코드 식별 방법
많은 대량 작업은 검증 시작 전에 이미 실패합니다. 입력이 엉망이거나 열이 필드와 맞지 않거나 시스템이 해당 행을 새로 만들지 업데이트할지 판단하지 못하는 경우입니다.
대량 작업은 보통 CSV 내보내기, 붙여넣은 스프레드시트 행, 앱 내 선택된 레코드(대량 수정), 또는 API로 트리거된 배치 작업에서 시작됩니다. 출처와 관계없이 사용자가 가진 것("what the user has")과 시스템이 저장하는 것("what your system stores") 사이의 명확한 매핑이 필요합니다.
매핑은 열→필드 매칭, 작은 변환(공백 자르기, 날짜 파싱, 전화번호 정규화), 누락값에 대한 기본값 적용을 포함해야 합니다. 열이 비었을 때 어떤 처리를 하는지 숨기지 마세요. 빈 셀이 기존 값을 그대로 두는지, 값을 지우는지, 기본값을 적용하는지 사용자가 알아야 합니다.
식별(Identity)은 다음 큰 결정입니다: 각 행을 기존 레코드와 어떻게 매칭할 것인가?
안정적인 식별자를 선호하고, 매칭이 없거나 여러 건 매칭될 때 어떤 결과가 나오는지 명시하세요. 일반적인 선택지는 내부 ID(사용자가 내보낼 수 있다면 최선), 외부 시스템 ID(통합에 유용), 이메일(유용하지만 중복과 대소문자 문제에 주의)입니다. 때로는 account_id + invoice_number 같은 복합 키가 적합합니다. 경우에 따라 "신규만 생성(create only)" 모드를 제공해 절대 매칭하지 않고 항상 새 레코드를 만드는 것도 있습니다.
마지막으로 권한 규칙을 대량 수준에서 적용하세요. 한 건의 레코드를 편집할 수 있다고 해서 자동으로 수천 건의 모든 필드를 변경할 수 있어서는 안 됩니다. 어떤 역할이 가져오기를 실행할 수 있는지, 어떤 필드가 변경 가능한지, 언제 추가 승인이 필요한지 결정하세요.
신뢰를 쌓는 미리보기 설계
미리보기는 사용자가 "커밋"을 눌러도 안전하다고 느끼게 만드는 지점입니다. 미리보기가 모호하면 사용자는 시스템이 추측한다고 생각합니다. 좋은 미리보기는 영수증처럼 읽혀야 합니다: 무엇이 바뀌는지, 시스템의 확신 정도, 무엇이 업데이트를 막는지.
간결한 요약부터 시작하세요. 대부분의 사용자는 방향을 잡기 위해 몇 가지 숫자만 보면 됩니다: 총 행, 건너뛸 행 수, 생성 vs 업데이트(그리고 삭제를 허용하면 삭제 수), 경고 vs 치명적 오류 행 수, 사용된 매칭 규칙(예: "이메일로 매칭"). 가능하면 가장 흔한 경고 카테고리를 그룹화해 사용자가 패턴을 빠르게 볼 수 있게 하세요.
그다음 사용자가 실제 데이터를 샘플로 확인하게 하세요. 업데이트의 경우 변경 전 vs 변경 후를 보여주는 작은 스크롤 가능한 샘플(10~50행 권장)과 검색 및 필터(예: "경고만 보기")를 제공하세요. 전체 파일 처리는 백그라운드에서 진행하세요. "이전 값 -> 새 값"을 보면 빈 셀로 전화번호가 덮어써지는 등의 놀라움을 방지할 수 있습니다.
불확실성은 가시적으로 드러내야 합니다. 한 행이 여러 기존 레코드와 매칭될 가능성이 있으면 후보를 보여주고, 필수 필드가 비어 있으면 정확한 셀을 가리키세요. 가져오기가 중복을 생성하면 짧은 이유(예: "같은 이메일이 파일에 두 번 나타남")를 표시하세요. 시스템이 모르는 것을 인정할수록 사용자는 더 신뢰합니다.
또한 다음 행동을 명확히 제시하세요. 사용자는 행 번호와 정확한 메시지가 포함된 오류 리포트를 다운로드하거나, 매핑을 다시 만들 필요 없이 수정 후 재업로드하거나, 변경 없이 취소하거나, 위험이 낮고 권한이 있을 때만 진행할 수 있어야 합니다.
문제를 조기에 잡는 검증 규칙
좋은 검증이 대량 가져오기를 안정적으로 느껴지게 만듭니다. 목표는 변경 전에 문제를 찾아서 사용자가 고칠 수 있게 설명하는 것입니다.
검증을 명확한 유형으로 분리하세요
하나의 거대한 "유효하지 않음" 메시지는 혼란을 만들 뿐입니다. 각 검사는 서로 다른 해결책을 제시하므로 별도의 버킷으로 취급하세요.
형식 검사(타입, 날짜 형식, 숫자 범위, 전화/이메일 패턴), 필수 필드 검사(누락값, 빈 문자열, 0과 빈칸의 혼동 같은 경우), 참조 검사(ID 존재 여부와 허용된 상태), 비즈니스 규칙(신용 한도, 권한, 또는 "미결 항목이 있으면 주문을 닫을 수 없음")을 분리해 처리하세요.
핵심 규칙: 커밋할 때 사용하는 것과 동일한 논리로 검증하세요. 미리보기와 커밋이 다른 규칙을 따르면 사용자는 금방 신뢰를 잃습니다. 같은 파서, 같은 검증기, 같은 권한 검사를 처음부터 끝까지 재사용하세요.
검증은 빠르고 예측 가능하게 만들기
큰 파일은 시간이 걸릴 수 있으니 검증이 반응형으로 느껴지게 하세요. 청크 단위로 검증(예: 500~2,000행), 진행 상황과 예상 시간을 표시하고, 자주 참조하는 데이터는 캐시해 반복 조회를 줄이세요.
행간 규칙(파일 내 중복, 두 행이 같은 레코드에 대해 다른 값을 설정하려는 충돌)은 전체 업로드를 봐야 하므로 특별한 처리가 필요합니다. 파싱 중에 경량 인덱스를 만들어 두 행 모두를 플래그하면 사용자가 어느 것을 유지할지 선택하기 쉽습니다.
행 수준 오류: 두려움을 주지 말고 실행 가능하게 만들기
행 수준 오류는 신뢰를 얻거나 잃는 지점입니다. 빨간색 텍스트로 가득한 화면은 사용자를 멈추게 합니다. 명확하고 고칠 수 있는 항목은 사용자의 흐름을 유지합니다.
심각도부터 구분하세요. 차단 오류는 행을 그대로 적용할 수 없음을 의미합니다(필수 값 누락, 형식 불일치, 레코드 미발견 등). 경고는 행을 적용할 수는 있지만 사용자가 선택을 해야 함을 의미합니다(값이 잘릴 예정, 기본값이 적용됨, 잠재적 중복 존재 등).
좋은 행 수준 피드백은 구체적이고 재현 가능해야 합니다. 각 문제는 파일 행 번호와 이메일이나 외부 ID 같은 안정적 키, 열 이름과 대상 필드, "Phone must be E.164 format"처럼 명확한 메시지, 그리고 예시 값이나 허용 범위 같은 제안된 수정 방법을 포함해야 합니다. 심각도 태그는 일관되게 유지하세요.
부분 성공은 의도된 옵션이어야지 우연이면 안 됩니다. 행들이 독립적일 때만 부분 적용을 허용하세요. 고객 태그 업데이트는 부분 적용해도 괜찮지만, 송장과 해당 항목 업데이트는 보통 그렇지 않습니다.
재시도를 UX의 일부로 계획하세요. 사용자는 소스 파일을 고치고 매핑을 다시 만들지 않고 재실행할 수 있어야 합니다. 실용적인 패턴은 매핑 선택과 행별 결과를 저장하는 "import run" 레코드를 유지해 다음 실행에서 "여전히 실패" vs "이제 고쳐짐"을 하이라이트하는 것입니다.
커밋 패턴: 원자적, 부분적, 그리고 멱등성
커밋 단계에서 대량 가져오기는 신뢰를 얻거나 깨집니다. 사용자는 이미 미리보기를 봤고 문제를 고쳤습니다. 이제 시스템은 검증된 것과 정확히 일치하는 것을 적용해야 합니다.
커밋 모드를 선택하고 규칙을 미리 알리세요
두 가지 모드가 일반적이며, 규칙이 명확하면 둘 다 유용합니다.
원자적(all-or-nothing)은 어떤 행이라도 실패하면 아무것도 쓰지 않습니다. 금전, 재고, 권한처럼 일관성이 중요한 경우에 적합합니다. 부분 커밋(best-effort)은 유효한 행은 적용하고 잘못된 행은 건너뛰어 보고서하는 방식으로, 연락처 보강처럼 일부 진행이 전체보다 나을 때 적합합니다. 일부 팀은 실패 비율 임계값(예: 실패가 2% 초과하면 중지) 같은 하이브리드 방식을 사용합니다.
무엇을 선택하든지 커밋 화면과 최종 요약에 분명히 표시하세요.
커밋을 정확히 검증된 배치에 묶으세요
미리보기 시 생성된 import job ID(배치 ID)를 사용하세요. 커밋 요청은 그 ID를 참조해야 하며 데이터를 재업로드하면 안 됩니다.
이렇게 하면 누군가 한 파일을 미리보기한 뒤 다른 파일을 업로드하고 커밋을 눌러 잘못 적용하는 실수를 방지할 수 있습니다. 또한 여러 관리자가 동시에 작업할 때도 도움이 됩니다.
멱등성(idempotency): 이중 적용을 방지하세요
사람들은 버튼을 두 번 클릭합니다. 브라우저는 재시도합니다. 커밋은 두 번 실행되어도 안전해야 합니다.
가장 단순한 방법은 작업별(필요하면 행별) 고유한 멱등성 키를 사용하고, 가능하면 업서트(upsert)를 사용하며, 잡 상태를 잠가 한 번만 Validated → Committing → Committed로 이동하게 하는 것입니다.
결과를 영수증처럼 기록하세요
커밋 후에는 간결한 요약을 보여주고 사용자가 결과를 다운로드하거나 복사할 수 있게 하세요. 생성, 업데이트, 건너뛰기, 실패 건수와 짧은 원인 설명을 포함하면 두려운 대량 변경도 사용자가 검증하고 설명할 수 있는 형태가 됩니다.
실무에서 통하는 롤백 계획
롤백 계획이 있으면 대량 가져오기는 "되길 바라는" 작업이 아니라 월요일 아침에도 돌려볼 수 있는 작업이 됩니다. 결과가 잘못되면 무엇이 바뀌었는지 추측하지 않고 이전 상태로 되돌릴 수 있어야 합니다.
적절한 접근법은 배치 크기, 작업 소요 시간, 외부 시스템(이메일, 결제, 메시지)에 미치는 영향 여부에 따라 다릅니다.
실무적인 세 가지 롤백 접근법
작업이 작고 빠르게 끝나면 단일 데이터베이스 트랜잭션이 가장 간단한 안전망입니다. 모든 변경을 적용하고 중간에 실패하면 데이터베이스가 전체를 취소합니다. 이는 수백~수천 행을 자체 PostgreSQL 테이블만 업데이트할 때 잘 맞습니다.
대형 가져오기에는 스테이징 우선 방식이 보통 안전합니다. 파일을 스테이징 테이블에 로드하고 거기서 검증한 뒤 프로덕션 테이블로 승격(promotion)하세요. 이상이 있으면 스테이징 데이터를 삭제하면 프로덕션은 전혀 건드리지 않습니다. 또한 매핑이나 규칙을 조정해 재시도하기가 쉬워집니다.
진정한 롤백이 불가능한 경우 보상(compensating) 조치를 계획하세요. 대량 업데이트가 이메일이나 결제를 트리거하면 시간을 되돌릴 수 없습니다. 되돌리기 계획은 "레코드를 취소로 표시", "환불 처리", "정정 메시지 전송" 같은 조치가 될 수 있습니다. 실행 전에 되돌리기 절차를 정의하세요.
간단한 선택 가이드:
- 배치가 작고 자체 DB만 건드리면 단일 트랜잭션을 사용하세요.
- 배치가 크거나 느리거나 위험하면 스테이징과 프로모션을 사용하세요.
- 외부 사이드 이펙트를 트리거하면 보상 조치를 계획하세요.
- 같은 입력이 중복 적용되지 않도록 반복 가능한 재실행 계획을 항상 마련하세요.
감사 로그가 롤백을 현실적으로 만듭니다
롤백은 무슨 일이 일어났는지 정확히 아는 것에 달려 있습니다. 누가 잡을 실행했는지, 언제 실행했는지, 소스 파일이나 잡 ID, 어떤 레코드가 변경되었는지(이전/이후 값 또는 최소한 변경 요약)를 캡처하세요.
구체적 예: 지원 담당자가 고객 상태 5,000건을 일괄 업데이트했습니다. 스테이징에서 200건의 불일치가 발견되어 프로모션 전에 잡았습니다. 그래도 커밋했는데 나중에 매핑이 반대로 되었음을 알게 된 경우, 감사 로그가 있으면 전체 시스템을 되돌리기보다 영향을 받은 레코드만 대상으로 표적 복구를 실행할 수 있습니다.
피해야 할 흔한 실수와 함정
대량 작업은 예측 가능한 방식으로 실패합니다. 대부분의 문제는 "나쁜 데이터"가 아니라 기대 불일치입니다: 사용자는 한 가지를 기대했는데 시스템이 다른 것을 했습니다.
큰 함정 중 하나는 검증에 한 규칙 세트를 사용하고 커밋에 다른 규칙 세트를 사용하는 것입니다. 미리보기는 빠른 검사(또는 다른 서비스)를 사용하고 커밋 경로에는 추가 제약이나 다른 기본값이 있으면 사용자는 "모두 정상"으로 보다가 실제 작업이 실패하거나 다른 결과로 성공하는 것을 보게 됩니다. 하나의 파서와 하나의 규칙 집합, 동일한 매칭 로직을 끝까지 사용하세요.
불분명한 매칭 로직도 고전적인 실패 원인입니다. "이메일로 매칭"은 중복, 대소문자 차이, 사용자가 이메일을 바꾼 경우에 문제를 일으킬 수 있습니다. UI는 매칭이 정확히 어떻게 작동하는지, 여러 건이 매칭되거나 매칭이 없을 때 무엇이 일어나는지 명확히 밝혀야 합니다. 예: 영업 관리자가 2,000건의 연락처를 업데이트하려다 절반이 전화번호만 있어 시스템이 새 레코드를 생성해버리는 경우가 발생할 수 있습니다.
"도움되는" 자동 수정을 조심하세요. 무언의 잘림(silent truncation), 자동 공백 제거, 날짜 형식 추정은 데이터 손실을 숨길 수 있습니다. 값을 정규화하면 미리보기에서 보여주고(이전 값 -> 새 값) 위험한 변환은 플래그를 달아주세요. 필드가 길이 제한 때문에 잘릴 경우에는 가시적인 경고로 표시하세요.
사용자가 결과를 잃지 않게 하세요. 탭을 닫았을 때 리포트가 사라지면 지원 티켓이 폭주합니다. 각 가져오기 실행을 상태, 결과 파일, 요약과 함께 객체로 저장하세요.
스케일을 대비해 설계하세요. 배치 처리가 없으면 실제 볼륨에서 타임아웃과 부분 쓰기가 발생합니다. 배칭과 진행 업데이트, 속도 제한과 백오프, 멱등성 키, 부분 성공 처리, 실패 행 재실행 저장 옵션으로 시스템을 보호하세요.
간단한 체크리스트와 다음 단계
모두가 어떤 일이 일어날지, 무엇이 잘못될 수 있는지, 문제를 빠르게 발견하는 방법을 알 때 대량 변경은 안전하게 느껴집니다.
커밋 전에 하는 빠른 사전 점검
데이터에 대해 작은 현실 점검을 하세요, UI만 보지 말고. 일반적인 케이스와 엣지 케이스를 대표하는 몇 행을 골라 확인합니다.
- 작은 샘플(예: 20행)을 점검: 이름, 날짜, 숫자가 올바른지 확인.
- 필드 매핑이 소스 열과 일치하는지(빈 셀이 의도한 대로 동작하는지) 확인.
- 매칭 키(email, SKU, external ID)가 충분히 고유하고 존재하는지 검증.
- 생성·업데이트·건너뛰기 합계를 비교.
- 경고를 소리 내어 읽어 모두가 받아들일 수 있는지 합의.
사람의 결정을 위해 멈추세요. 가져오기가 고객, 청구, 재고에 영향을 주면 담당자의 승인을 받으세요. 예: 영업 관리자가 1,200건이 업데이트될 것으로 기대했는데 미리보기가 12,000건을 보여주면 원인을 알기 전에는 진행하지 마세요.
커밋 후 점검(문제가 남지 않게)
커밋이 끝나면 현실을 다시 확인하되 범위를 좁게 하세요.
- 소수의 업데이트된 레코드를 열어 주요 필드가 올바르게 바뀌었는지 확인.
- 행별 상태, 생성된 ID, 오류가 포함된 결과 리포트를 내보내기.
- 누가 언제 어떤 파일/버전으로 어떤 결과(요약 건수)를 냈는지 기록.
- 오류가 발생하면 빠르게 결정: 실패한 행을 고쳐 재시도할지, 롤백할지.
노코드 플랫폼에서 이 워크플로우를 구축한다면 가져오기를 일회성 관리자 스크립트가 아니라 실제 제품 기능으로 취급하는 것이 도움이 됩니다. 예를 들어 AppMaster (appmaster.io)에서는 Import Run 레코드를 PostgreSQL에 모델링하고, 드라이런·커밋 로직을 Business Process Editor에서 구현하며, 감사 추적을 유지해 대량 업데이트를 반복 가능하고 지원 가능하게 만드는 사례가 많습니다.
자주 묻는 질문
미리보기 → 검증 → 커밋의 세 단계 흐름을 사용하세요. 미리보기는 어떤 변경이 일어날지 보여주고, 검증은 커밋과 같은 규칙으로 드라이런을 실행하며, 커밋은 해당 배치가 검증을 통과했을 때만 가능하도록 합니다.
미리보기는 잘못된 매핑, 예상치 못한 생성 vs 업데이트 건수, 또는 데이터를 덮어쓸 수 있는 빈칸 같은 명백한 실수를 쓰기 전에 잡아냅니다. 합계와 변경 전·후의 작은 샘플을 보여 사용자가 영향 범위를 육안으로 확인할 수 있게 해야 합니다.
검증(드라이런)은 실제 업데이트와 동일한 파싱, 매칭, 권한 검사, 비즈니스 규칙을 적용하지만 데이터베이스에 쓰지는 않습니다. 결과는 모호한 통과/실패가 아니라 요약과 행별 문제 목록이어야 하며, 사용자가 추측 없이 문제를 고칠 수 있어야 합니다.
작업 전체가 위험할 때는 전체 중단(하드 스톱)을 적용하세요. 예를 들어 잘못된 워크스페이스 파일, 위험한 매핑, 주요 필드를 덮어쓰는 경우는 전체를 중단해야 합니다. 반면 이메일 형식 오류처럼 행별로 고칠 수 있는 문제는 그 행만 수정해서 나머지를 유지할 수 있게 하세요.
매칭 키를 명확히 밝히고, 매칭 실패나 중복이 발생할 때의 결과를 설명하세요. 내부 ID가 가장 안정적이고, 외부 ID는 통합에 좋으며, 이메일은 실무에서 유용하지만 중복과 대소문자 처리를 주의해야 합니다.
숨기지 마세요. 각 필드에 대해 빈 셀의 의미를 하나로 정하세요. 예를 들어 업데이트에서는 “빈 값은 기존 값을 유지”, 또는 “빈 값은 값을 지운다” 같은 규칙을 정하고 미리보기에서 보여줘야 사용자가 의도치 않은 데이터 손실을 피할 수 있습니다.
파일 행 번호와 이메일 또는 외부 ID 같은 안정적인 식별자를 함께 보여주고, 열 이름과 대상 필드를 명시하며, "예: 전화는 E.164 형식이어야 함"처럼 구체적이고 수정 방법을 제안하는 메시지를 제공하세요. 사용자가 소스 파일을 빠르게 고쳐서 재실행할 수 있어야 합니다.
일관성이 중요하면 원자적(모두 성공해야 적용) 커밋이 낫고, 독립적인 업데이트(예: 연락처 보강)는 부분 커밋(유효한 행만 적용)으로 괜찮습니다. 어떤 방식을 쓰든 커밋 화면과 최종 요약에서 그 규칙을 분명히 하세요.
검증된 배치에 묶인 idempotency 키를 사용하고, 잡 상태를 잠가 Validated → Committing → Committed로 한 번만 이동하게 하세요. 이렇게 하면 더블 클릭, 브라우저 재시도, 탭 갱신으로 같은 변경이 두 번 적용되는 것을 막을 수 있습니다.
PostgreSQL에 Import Run 레코드를 모델링하고 배치 ID, 매핑 선택, 검증 결과, 최종 결과를 저장하세요. 그런 다음 Business Process 흐름에서 드라이런·커밋 로직을 구현하면 반복 가능한 프로세스와 감사 추적을 갖출 수 있어 문제가 생겼을 때 지원하기 쉬워집니다.


