커스텀 개발

엑셀 배송지 대량주문 기능 구축 사례: 한 번의 결제로 여러 배송지를 관리하는 방법

여러 배송지로 같은 상품을 보내야 하는 주문은 일반 장바구니만으로 처리하기 어렵습니다. 주문자는 배송지 정보를 반복해서 입력해야 하고, 운영자는 주문을 다시 나누어 출고와 정산을 관리해야 합니다. 이번 사례에서는 기존 쇼핑몰의 주문·결제 흐름을 유지하면서, 엑셀로 여러 배송지를 등록하고 한 번의 결제로 처리할 수 있는 대량주문 기능을 구현했습니다.

대량주문에서 먼저 해결해야 할 문제

여러 배송지 주문은 단순히 입력 행을 늘리는 기능이 아닙니다. 배송지별 수량의 합계, 할인과 배송비, 재고, 결제 금액, 출고 상태와 부분환불이 하나의 주문 흐름 안에서 일관되게 연결되어야 합니다. 특히 결제를 여러 번 만들지 않으면서도 배송지는 각각 관리할 수 있어야 하므로, 주문 구조와 관리자 업무 흐름을 함께 설계하는 것이 중요합니다.

엑셀 업로드로 최대 500개 배송지 등록

주문자는 지정된 XLSX 양식을 내려받아 보내는 분과 받는 분 정보, 우편번호, 주소, 배송메모를 입력한 뒤 업로드합니다. 서버는 정해진 시트와 열 구조를 확인하고, 이름·연락처·우편번호·주소·배송메모를 행 단위로 검증합니다.

  • 정상 행과 오류 행의 수를 분리해 표시
  • 오류가 있으면 행 번호와 수정 사유를 안내하고 결제 진행 차단
  • 배송지별 수량 변경과 행 삭제 지원
  • 수량 변경 시 총수량, 할인, 배송비, 최종 결제 금액을 서버 기준으로 재계산

주소와 연락처는 웹 화면에서 임의로 고치는 방식이 아니라, 원본 엑셀을 수정해 다시 올리도록 구성했습니다. 업로드 데이터와 결제 데이터의 기준을 하나로 유지해 배송 정보가 달라지는 문제를 줄이기 위한 방식입니다.

대표 주문 1건과 PG 결제 1회로 처리

대량주문은 대표 주문 하나 아래에 배송지별 출고 단위를 연결하는 구조로 구현했습니다. 쿠폰·마일리지·배송비는 대표 주문 최종 금액을 기준으로 한 번만 적용하고, PG 승인도 한 번만 진행합니다. 반면 출고와 배송 상태는 배송지별로 관리할 수 있어 주문자와 관리자가 필요한 정보를 각각 확인할 수 있습니다.

결제 직전에는 로그인 상태, 상품, 가격, 재고, 할인 혜택, 배송비와 업로드 내용이 모두 최신 상태인지 서버에서 다시 확인합니다. 가격 또는 재고가 바뀌었거나 업로드 정보가 달라진 경우에는 기존 결제 진입 정보를 폐기하고 새로 확인하도록 처리했습니다.

기존 쇼핑몰 주문 기능을 우회하지 않는 확장

새 기능은 기존 쇼핑몰의 주문·쿠폰·마일리지·배송·PG 처리 흐름을 별도로 복제하지 않고, 허용된 확장 영역에서 기존 주문 구조를 감싸는 방식으로 개발했습니다. 일반배송, 기존 복수배송, 대량주문은 동시에 선택되지 않도록 분리해 기존 주문 화면과 충돌하지 않도록 했습니다.

이 방식은 기존 송장 등록, 택배 연동, 주문 수집, 증빙 발행 같은 운영 흐름을 계속 활용하면서 필요한 기능만 추가할 수 있다는 장점이 있습니다.

관리자는 배송지별 출고와 환불 접수를 한 화면에서

관리자 주문 목록에서는 하나의 대표 주문을 배송지별 행으로 확인할 수 있습니다. 각 행에서 배송 진행 상태와 송장 정보를 관리하며, 주문 건수와 결제 금액은 배송지 행 수로 중복 집계되지 않도록 대표 주문 기준으로 계산합니다.

부분환불은 아직 출고되지 않은 배송지만 대상으로 합니다. 별도의 직접 환불 로직을 만들기보다 쇼핑몰의 표준 상품환불 화면으로 연결해 환불 금액, 배송비, 쿠폰, 마일리지, 재고 복원과 최종 실행을 기존 관리자 절차에서 처리하도록 구성했습니다.

마이페이지에서도 배송지별 상태 확인

주문자는 마이페이지에서 대표 주문 요약과 함께 배송지별 상태를 확인할 수 있습니다. 주문 전체를 취소하는 것과 배송지 일부의 출고·환불 처리는 운영 기준이 다르므로, 고객이 직접 부분취소하는 기능은 제공하지 않고 고객센터 안내로 연결했습니다.

개인정보와 업로드 파일을 보호하는 검증

엑셀 파일에는 여러 수령인의 개인정보가 포함될 수 있으므로, 기능 구현과 함께 업로드 보안과 접근 권한을 설계했습니다. 원본 파일은 최소한으로 보관하고, 관리자 권한에 따라 개인정보를 마스킹하며, 오류 안내와 로그에 민감정보가 노출되지 않도록 처리했습니다.

  • 수식이 포함된 셀 차단
  • 확장자를 위장한 파일과 허용 크기 초과 파일 차단
  • 최대 500개 배송지 제한
  • 결제·환불·업로드·관리자 접근에 대한 감사 이벤트 기록
  • 중복 요청과 재시도 상황에서 주문·결제가 중복되지 않도록 멱등성 처리

스테이징 환경에서 기능과 기존 쇼핑 흐름을 함께 검증

공개 전에는 스테이징 환경에서 합성 데이터로 기능을 확인했습니다. 정상 500행 업로드, 초과 행 차단, 수식 셀 차단, 파일 형식·크기 검증, 통신 재시도, 기존 상품 상세·장바구니·마이페이지·관리자 주문 화면 회귀를 점검했습니다. 실제 PG 승인과 외부 알림 발송처럼 별도 테스트 환경이 필요한 항목은 운영 실행으로 간주하지 않고, 외부 연동 조건이 준비된 뒤 추가 검증하도록 구분했습니다.

업무 흐름에 맞춘 쇼핑몰 기능 개발

대량주문 기능은 주문 화면 하나를 추가하는 작업이 아니라, 엑셀 등록부터 금액 계산, 결제, 출고, 배송 조회, 환불, 개인정보 보호까지 이어지는 운영 흐름을 설계하는 일입니다. 기존 쇼핑몰의 표준 기능을 안전하게 활용하면서 현재 업무에 맞는 주문·관리 기능이 필요하다면, 사용 중인 주문 방식과 필요한 화면을 기준으로 커스텀 개발 범위를 검토할 수 있습니다.