Skip to content
← 작업으로
Product · PO

대량 복사

  • Async Batch
  • Whitelist Validation

Summary

여러 재계약을 하나씩 생성하던 업무를 줄이기 위해, 기존 계약을 불러와 바뀌는 항목만 편집하고 한 번에 생성하는 대량 복사를 기획했습니다. 플랫폼에 엑셀 UI/UX를 처음 차용해 기존 업무 방식을 유지하고, 입력 검증과 수거 작업 및 스케줄 이관을 같은 흐름에 연결했습니다.

Role
Product Owner (기획 주도, 정책 정의, 화면과 처리 흐름 설계)
Outcome
계약 대량 생성 도입, 기존 엑셀 업무 방식 유지, 수거 작업과 스케줄 이관 연결

문제 정의

재계약 N건마다 되풀이하던 생성과 후속 이관

단가나 처리장이 바뀌면 기존 정보는 대부분 유지한 채 여러 계약을 다시 맺어야 하는 일이 잦았습니다. CX팀은 재계약 대상을 엑셀에 정리한 뒤 계약을 하나씩 생성하거나, 개발팀에 데이터를 주입해 계약을 만들어 달라고 요청했습니다. 담당자가 직접 처리하면 대상 계약 수만큼 같은 생성 절차를 반복해야 했습니다.

기존 계약 정보는 PO가 메타베이스에서 조회해 전달했고, 담당자는 수거 매뉴얼과 특이사항, 태그를 새 계약에 수기로 옮겼습니다. 올바로 배출처리계획도 함께 복사되지 않아 별도로 챙겨야 했습니다. 등록 과정에서 빠진 정보는 개발팀에 건별로 반영을 요청하고 다시 확인해야 했습니다.

계약을 만든 뒤에도 이관 업무가 남았습니다. 회계팀은 이전 계약의 미청구 수거 작업을, 운영팀은 스케줄을 변경할 작업을 동시에 정리했습니다. 두 팀은 정리한 대상을 하나씩 처리하거나 개발팀에 리스트를 전달해 데이터를 변경한 뒤 사후 검토를 했습니다. 여러 재계약을 만드는 동안 계약 생성뿐 아니라 세 팀의 자료 정리와 전달, 후속 확인도 반복되는 구조였습니다.

기획 판단

기존 엑셀 업무를 유지하며 여러 계약을 한 번에 준비

기존 계약을 대량으로 수정하는 기능보다, 기존 정보를 이어받아 여러 재계약을 만드는 대량 복사가 반복 요청에 먼저 답한다고 판단했습니다.

재계약 대상 계약 N건: 계약 생성부터 미청구 이관, 스케줄 변경까지 이어지는 작업. 기존 흐름 (계약 생성과 이관을 팀마다 따로 처리) → 계약 생성 단계, CX팀이 재계약 대상을 선택해 계약 내용을 기입하고 변경하는 일을 N번 반복하거나 개발팀이 데이터를 주입 → 이관 단계, 회계팀은 이관할 작업을, 운영팀은 스케줄을 변경할 작업을 동시에 정리해 미청구 이관과 스케줄 변경을 N번 반복하거나 개발팀이 리스트를 받아 데이터를 변경 → 사후 검토, 생성한 계약과 이관 결과를 다시 확인. 개선 흐름 (계약 대량 복사 단계 하나에서 이관까지 처리) → 재계약 대상 N건 선택, CX팀이 대상 계약을 한 번에 선택 → 일괄 편집 및 변경, 여러 계약의 값을 함께 바꾸고 유효성 검사 → 유효성 검사 및 벌크 생성, 계약 생성과 함께 미청구 이관과 스케줄 이관까지 처리
신규 등록 후 사후 수정에서, 기존 계약 기반 재계약으로

CX팀이 엑셀에 대상을 정리하고 계약별 변경 정보를 다루는 방식을 먼저 살폈습니다. 익숙한 업무 방식을 완전히 바꾸면 새 기능을 이해하고 업무에 적용하는 부담이 커질 것이라고 판단했습니다. 그래서 플랫폼에서 처음으로 엑셀 UI/UX를 차용해, 기존 업무 방식을 최대한 유지하면서 여러 계약을 함께 다루는 방향으로 기획했습니다.

담당자는 화면에서 기존 계약을 검색하거나 엑셀에 이전 계약 ID를 입력해 복사할 대상을 불러옵니다. 수거 매뉴얼과 특이사항, 태그도 함께 가져오므로 바뀌는 항목만 편집하면 됩니다. 대상은 배출 계약으로 한정하고, 생성된 계약은 각각 이전 계약의 후속 계약으로 연결하도록 했습니다.

디자이너, 개발자와 함께 계약을 행과 열로 비교하고 셀을 복사하거나 붙여 넣는 편집 화면을 구체화했습니다. 재계약 시작일처럼 공통으로 적용할 값은 한 번에 바꾸고, 계약마다 다른 단가는 개별적으로 조정할 수 있게 했습니다. 어느 계약의 어떤 값을 바꾸는지 구분할 수 있어야 했기 때문에, 디자인 QA에서 지적된 선택 셀의 표시 문제도 수정 대상으로 다뤘습니다.

  1. 1. 단건 계약 복사

    개선 전 계약 상세에서 단건 계약 복사 확인 팝업을 연 화면. 기존 계약의 내용을 복사해 재계약을 만드는 안내와 계약 복사 버튼을 보여줍니다. 계약명과 ID, 파일명, 계정 정보는 흐림 처리했습니다.
  2. 2. 복사 후 내용 편집

    단건 계약 복사 후 열린 계약 생성 화면의 기간정보 탭. 계약 체결일과 시작일, 종료일, 스케줄 덮어쓰기와 자동갱신 여부를 개별 편집하는 단계이며 저장하지 않은 화면입니다. 계정 정보는 흐림 처리했습니다.
개선 전: 계약을 한 건씩 복사한 뒤 내용 편집
개선 후 계약 대량복사 화면의 제목과 정보 탭, 여러 기존 계약을 불러온 편집 표와 생성 버튼. 계약 ID와 이름, 업체 식별 정보는 흐림 처리했습니다.
개선 후: 기존 계약을 불러와 변경 항목만 입력

입력 검증

편집 중의 오류를 생성 전에 찾고 수정하도록

엑셀의 자유로운 편집 방식은 유지하되, 잘못된 값이 여러 계약의 생성과 사후 수정으로 이어지지 않도록 입력 단계와 제출 단계의 검증을 나눴습니다.

필수값과 날짜 형식, 시작일과 종료일의 관계를 검사하고 잘못된 셀에 오류를 표시하도록 했습니다. 종료일을 시작일보다 이르게 입력한 경우처럼 수정이 필요한 위치를 편집 중에 찾을 수 있어야, 여러 행을 함께 다루면서도 계약을 만들기 전에 값을 고칠 수 있기 때문입니다.

계약 대량복사의 기간정보 표에서 첫 번째 계약의 시작일은 2027-01-15, 종료일은 2027-01-14로 입력한 화면. 시작일보다 이른 종료일 셀에 오류 표시가 남아 수정할 위치를 보여줍니다. 이전 계약 ID는 흐림 처리했습니다.
셀 입력 검증: 시작일보다 이른 종료일에 오류 표시

담당자가 기본정보 탭으로 옮겨도 기간정보에 잘못 입력한 종료일은 그대로 남습니다. 현재 화면에서 보이지 않는 오류를 놓치지 않도록, 생성 버튼을 누를 때 모든 탭을 다시 검사하게 했습니다. 오류가 있으면 서버에 요청을 보내기 전에 생성을 차단하고, 해당 탭과 셀로 돌아가 수정한 뒤 다시 진행할 수 있도록 했습니다.

기간정보에 오류를 남긴 채 기본정보 탭에서 생성하기를 누른 결과, 기간정보 탭으로 돌아와 유효하지 않은 필드를 확인하라는 안내와 오류 셀을 보여주는 화면. 이 단계에서는 생성 API가 호출되지 않았습니다. 이전 계약 ID는 흐림 처리했습니다.
생성 전 검증: 다른 탭의 오류도 확인하고 생성 차단

이관 정책

편집할 수 있는 정보와 자동 이관 조건을 구분

입력값이 유효하더라도 이전 수거 작업과 스케줄을 새 계약으로 옮길 수 있는지는 따로 판단해야 했습니다. 바뀐 계약 정보가 기존 작업의 처리 관계와 이후 수거 및 청구에 영향을 주기 때문입니다.

계약 이름이나 체결일과 달리, 폐기물 종류나 배출 업체 신고 정보가 바뀌면 이전 수거 작업과 올바로 인계정보가 새 계약에도 맞는지 확인해야 합니다. 화면에서 편집할 수 있는 항목이라도 자동 이관은 별도의 조건으로 검사하도록 했습니다. 정산과 계약 운영에 필요한 조건은 회계팀과 CX팀에 확인하며 구체화했습니다.

처리업체를 추가하면 기존 작업에 기록된 처리 경로를 유지할 수 있습니다. 반면 교체하거나 삭제하면 실제 작업을 처리한 곳이 새 계약에서 빠질 수 있어, 기존 업체를 유지한 채 추가하는 경우만 자동 이관 대상으로 정했습니다. 봉투배송과 다른 요금제 사이의 전환도 작업 종류와 청구 기준이 달라져 자동 이관에서 제외했습니다.

영역변경 후 자동 이관 허용조건부 허용변경 시 자동 이관 제외
기본정보계약 이름, 승인 상태, 성격, 전자계약 ID처리업체(추가되는 경우만)폐기물 종류, 배출 업체 신고 정보
기간정보체결일, 기간(시작/종료), 자동갱신 여부--
요금정보할인, 할증요금제 유형, 요금제 필드-
청구와 정산과세, 부가세 포함 여부--

계약 전환

이관은 생성할 때 선택하고 실제 전환 시점에 처리

재계약에도 수거 작업 이관이나 스케줄 변경이 필요하지 않은 경우가 있어, 두 항목을 각각 선택하도록 했습니다.

재계약을 미리 생성한 경우에는 이관 여부를 선택해 두고, 실제 재계약 시작일이 도래해 계약이 전환될 때 처리하도록 했습니다. 미청구 작업과 스케줄의 이관에는 앞서 정한 재계약 프로세스 개선의 정책을 적용했습니다. 같은 이전 계약에서 여러 새 계약을 만들더라도 자동 이관을 받을 계약은 한 건으로 제한해, 같은 작업이 여러 계약으로 옮겨져 청구와 수거의 기준이 불명확해지지 않도록 했습니다.

계약 대량복사 화면의 제목과 정보 탭, 여러 기존 계약을 불러온 편집 표. 스케줄과 작업 정보 탭에서 미청구 작업 이관 여부와 스케줄 덮어쓰기 여부를 각각 선택합니다. 이전 계약 ID와 계약명은 흐림 처리했습니다.
대량 복사 시 작업량과 스케줄 이관 선택

할인과 할증은 새 계약 기간에 유효한 내역을 함께 가져옵니다. 올바로 배출처리계획도 이후 인계서 작성에 필요한 정보이므로 선택 여부와 관계없이 복사를 시도하도록 정했습니다. 이관 선택 항목과 함께 각 복사 항목의 적용 방식을 구분했습니다.

옵션적용 방식설명
작업량 이관선택미청구 작업을 새 계약으로 이관 (재계약 이관 로직과 동일)
스케줄 배정 변경선택이전 계약의 코스와 스케줄을 새 계약으로 연결
할인, 할증 복사켬계약 기간에 유효한 할인, 할증 내역 이전
올바로 배출처리계획 복사필수새 계약에 함께 복사 (실패해도 계약 생성은 성공)

비동기 처리와 예외

성공한 계약을 유지하고 실패한 항목만 후속 확인

최대 300건의 대량 복사는 한 건의 오류가 나머지를 막지 않아야 했습니다. 계약 생성과 배출처리계획 복사의 결과를 구분하고, 완료된 작업을 반복하지 않는 기준을 개발팀과 정했습니다.

대량 복사 비동기 실행: 최대 300건 · 각 계약을 독립적으로 처리. 계약 · 배출처리계획 복사 성공 (새 계약이 생성되고 배출처리계획도 복사된 경우) → 성공 내역 확인, 이전 계약과 신규 계약, 이관 결과를 대조, 계약 생성 성공. 계약 생성 실패 (개별 계약 생성에 실패하면 배출처리계획 복사는 생략하고 실패 사유를 기록) → 실패 사유 확인, 실패 건을 구분하고 다른 계약은 계속 처리, 계약 생성 실패. 배출처리계획만 복사 실패 (계약은 생성됐지만 배출처리계획 복사는 실패한 경우) → 생성된 계약 유지, 배출처리계획 복사 실패가 계약 생성 성공을 되돌리지 않음, 계약 생성 성공
계약 생성 결과와 배출처리계획 복사 결과를 구분하는 배치

화면의 입력 검사를 통과해도 서버에서 원본 계약을 찾지 못하거나 생성 조건에 맞지 않으면 실패할 수 있습니다. 비동기 배치에서 계약별로 독립 처리하고 실패 사유를 남겨, 문제가 없는 계약은 계속 생성하도록 했습니다. 계약 생성에 실패한 건은 배출처리계획 복사도 진행하지 않습니다.

실제 서버 응답을 표시한 계약 대량 복사 결과 팝업. 테스트 요청 한 건 중 성공 0건, 실패 1건을 보여주고 결과 다운로드와 실패 계약 확인 버튼을 제공합니다. 원본 계약을 찾을 수 없는 요청으로 실패 경로를 재현했으며 식별정보는 흐림 처리했습니다.
계약 생성 실패: 실패 건수와 후속 확인 경로 표시

계약이 생성된 뒤 배출처리계획 복사만 실패했다면 계약은 유지하도록 했습니다. 배출처리계획의 실패 때문에 이미 생성한 계약까지 취소하면 끝난 작업을 다시 해야 하기 때문입니다. 두 결과를 따로 확인해 복사가 안 된 내역만 후속 처리하고, 이미 생성된 계약을 중복으로 만들지 않도록 했습니다.

실행 중에는 진행 상태를, 완료 후에는 전체 요청 건수와 성공, 실패 건수를 보여주도록 했습니다. 결과 엑셀에는 이전 계약과 새 계약, 실패 사유를 담고 변경된 스케줄과 이관된 작업 내역도 함께 확인할 수 있게 했습니다. 담당자는 실제 생성 결과를 대조하고 필요한 후속 업무를 이어갈 수 있습니다.

테스트 서버에서 계약 두 건을 실제로 생성한 뒤 표시된 계약 대량 복사 결과 팝업. 전체 2건, 성공 2건, 실패 0건과 결과 다운로드 버튼을 보여줍니다. 작업과 스케줄 이관은 선택하지 않았고 이전 계약 ID는 흐림 처리했습니다.
계약 생성 성공: 요청한 2건의 생성 결과 확인

자동 이관 조건에 맞지 않아 대상에서 제외된 경우와 실제 이관을 시도하다 오류가 난 경우도 구분했습니다. 두 경우는 다음에 확인할 내용이 다르므로, 결과에 제외 사유와 처리 오류를 각각 남기도록 했습니다.

결과와 배운 점

여러 계약의 생성에서 수거와 청구의 연결까지

엑셀에 정리한 재계약 대상을 하나씩 생성하던 업무는, 기존 계약을 한꺼번에 불러와 바뀌는 항목만 편집하고 여러 재계약을 함께 만드는 흐름으로 바뀌었습니다. 수거 매뉴얼과 특이사항, 태그를 이어받고 잘못된 입력은 생성 전에 고칠 수 있습니다. 익숙한 행과 열 편집 방식은 유지하면서, 계약마다 같은 정보를 옮기고 생성 절차를 반복하던 일을 줄였습니다.

수거 작업과 스케줄 이관은 계약을 만들 때 함께 선택하고 실제 계약 전환에 맞춰 처리하도록 연결했습니다. 세 팀이 나눠 처리하던 생성과 이관을 계약 대량 복사 흐름으로 묶었고, 재계약 프로세스 개선과 대량 복사를 함께 적용한 뒤 수기 지원 요청은 80건에서 27건으로 줄었습니다.

대량 복사 적용 후 진행한 설문에서는 기존에 4~5시간 걸리던 재계약 업무가 2~3시간으로 줄었다는 응답을 받았습니다.

확인 지표개선 전개선 후
재계약 생성 후 수기 지원80건27건
재계약 업무 소요 시간(설문 응답)4~5시간2~3시간

이 과제에서 중요했던 것은 한 번에 만드는 계약 수뿐 아니라, 익숙한 업무 방식과 계약 전환 뒤의 수거 및 청구를 함께 살피는 일이었습니다. 입력 방식은 유지하되 이관 조건과 실행 시점, 실패 후 확인할 대상을 구분해야 여러 재계약을 하나의 업무 흐름으로 연결할 수 있었습니다.