운영자가 고객 계정 여러 개를 선택해 ‘일괄 비활성화’를 눌렀습니다. 화면은 잠시 멈췄다가 성공 메시지를 보여줬지만, 실제로는 일부만 처리됐습니다. 그사이 목록의 필터 조건도 바뀌어 어떤 고객을 대상으로 삼았는지 설명하기 어렵습니다. 일괄 작업은 버튼 하나가 아니라 대상 확정부터 결과 확인까지 이어지는 변경 프로세스입니다.
먼저 ‘선택한 대상’을 고정한다
현재 검색 결과 전체에 적용할지, 체크한 항목만 적용할지 명확해야 합니다. 페이지를 넘긴 뒤에도 선택이 유지되는지, 필터가 바뀌면 선택이 취소되는지, 실행 직전에 신규 항목이 검색 조건에 들어오면 포함할지 정합니다. ‘현재 조건에 맞는 전체’는 실행 시점에 다시 계산하면 위험합니다. 검토한 대상과 실제 변경 대상이 달라질 수 있기 때문입니다.
실행 요청에는 대상 ID 집합 또는 변경 불가능한 스냅샷 참조, 작업 종류, 요청자, 요청 시각, 중복 실행 방지 키를 묶습니다. 단순한 건수만 기록하면 나중에 누가 영향을 받았는지 알 수 없습니다. 다만 대상 목록에 개인정보가 많다면 접근 통제와 보관 기간도 필요합니다.
미리보기는 ‘가능 건수’보다 ‘변경 결과’를 보여준다
미리보기에는 변경 전·후 값, 실행 가능·불가능 건수, 제외 이유, 외부 알림이나 연동 영향, 되돌릴 수 있는 범위를 보여줍니다. 예를 들어 주문 상태를 바꾸는 작업이라면 일부 주문은 이미 출고돼 수정할 수 없을 수 있습니다. 승인자는 이런 예외를 본 뒤 결정을 내려야 합니다.
승인이 필요한 작업은 위험도에 따라 좁게 정의합니다. 모든 일괄 작업에 이중 승인을 붙이면 우회가 생깁니다. 반면 다수 고객 계정 잠금, 과금 설정 변경, 개인정보 삭제처럼 영향이 큰 작업은 요청자와 승인자를 분리하는 것이 합리적입니다. Microsoft의 승인 워크플로 설명과 AWS의 콜백 대기 패턴은 사람의 결정을 작업 흐름 중간에 포함하는 구현 참고가 됩니다.

오래 걸리는 작업은 요청과 실행을 분리한다
수천 건을 웹 요청 하나에서 끝내려 하면 연결이 끊겼을 때 성공 여부가 모호합니다. 요청을 접수한 뒤 작업 ID를 돌려주고, 백그라운드에서 처리하며, 사용자는 진행 상태를 조회하게 합니다. 상태는 대기·실행 중·완료·부분 실패·실패·취소처럼 정의하되, ‘완료’가 모든 항목의 성공을 뜻하는지 분명히 해야 합니다. Microsoft의 장기 실행 작업 API 문서도 비동기 요청과 상태 조회를 기본 패턴으로 설명합니다.
동시 실행 제어도 중요합니다. 같은 고객을 두 일괄 작업이 동시에 수정한다면 순서에 따라 결과가 달라집니다. 항목 단위 버전 검사 또는 업무별 잠금 범위를 정하고, 충돌 항목은 실패 이유를 남겨야 합니다.

부분 실패와 재시도를 정상 흐름으로 다룬다
실패 항목만 다시 실행할 수 있어야 하고, 이미 성공한 항목은 다시 바뀌지 않아야 합니다. 외부 API 호출이 포함되면 네트워크 오류 때문에 ‘상대 시스템에는 반영됐지만 우리 쪽은 실패로 보이는’ 상황도 생깁니다. 이때 무작정 재시도하면 중복 처리될 수 있으므로 외부 작업의 결과를 조회하거나 멱등성 키를 전달해야 합니다.
복구는 작업별로 다릅니다. 상태 변경은 이전 상태로 되돌릴 수 있어도 발송된 메일은 회수할 수 없습니다. 화면의 ‘되돌리기 가능’ 문구는 이런 비가역적 효과를 제외한 범위를 정확하게 말해야 합니다. 요청·승인·실행·항목별 결과·복구 시도를 같은 작업 ID로 이어 놓으면 감사와 고객 설명이 쉬워집니다.
관리자 화면의 문구도 안전장치다
‘선택 항목 처리’라는 버튼보다 ‘선택한 고객 248명의 계정 비활성화’처럼 대상과 효과를 구체적으로 보여주는 편이 실수를 줄입니다. 숫자는 실행 직전 서버가 확인한 값이어야 하고, 사용자가 승인한 미리보기와 차이가 생기면 다시 검토하게 해야 합니다. 되돌릴 수 없는 조치에는 확인 절차를 더하고, 반복되는 저위험 작업에는 불필요한 경고창을 남발하지 않습니다.
완료 화면에도 ‘성공’ 한 단어 대신 성공·실패·건너뛰기 건수와 실패 사유를 내보냅니다. 운영자는 실패 항목을 내려받거나 다시 실행할 수 있어야 합니다. 고객에게 영향을 주는 변경이라면 작업 종료 후 어떤 알림이 발송됐는지까지 연결해서 확인합니다. 이렇게 해야 대량 작업이 편리하면서도 설명 가능한 기능이 됩니다.
설계 체크리스트
- 미리보기와 실제 실행의 대상 집합이 동일한가?
- 영향이 큰 작업에만 적절한 승인 단계를 두었는가?
- 작업과 항목의 상태를 각각 확인할 수 있는가?
- 같은 요청의 재시도가 중복 변경을 만들지 않는가?
- 부분 실패, 충돌, 취소, 복구의 의미가 화면에 드러나는가?
#SaaS일괄작업 #대량수정 #승인워크플로 #변경미리보기 #부분실패 #비동기작업 #권한관리 #변경이력 #복구설계 #관리자화면