다채널 주문서 통합 자동화 시스템

kikiru328 | Dec 8, 2022 min read

Python Flask Pandas AWS

한 장 요약본

프로젝트 개요

목록내용
프로젝트명다채널 주문서 통합 자동화 시스템
개발기간2022년 7월 - 2022년 10월 (약 2개월)
역할솔루션 개발자 (문제 체험 후 직접 기획 및 단독 개발)
기여도100% (단독 개발)

비즈니스 배경 및 문제 정의

핵심과제

CS 담당자의 수작업 주문서 통합 업무를 완전 자동화하여 업무 효율성 극대화

비즈니스 현황:

  • 자사몰과 스마트스토어 등 다채널 커머스 운영
  • 일평균 100건의 주문 처리 (다중 옵션 포함)
  • 배송 및 제조 관리를 위한 통합 주문서 필요

기존 프로세스 문제점:

  • 작업 시간: CS 담당자가 매일 4시간씩 수작업 통합
  • 오류 빈발: 수작업 누락 및 중복 문제로 배송/제조 오류 발생
  • 일관성 부족: 채널별 상이한 메뉴명/옵션명 표기
  • 확장성 제약: 신규 채널 추가 시 수작업 부담 증가

문제 발견 과정:

  • CS 담당자 업무 부담 확인 → 직접 수작업 체험 → 비효율성 인식 → 자동화 기획

핵심 성과 지표

지표달성값측정 방법
작업시간 단축4시간 → 10분 (24배)실제 처리 20초 + 검수 10분
처리 정확도오류율 0%데이터 무결성 보장
데이터 처리량일평균 100건다중 옵션 주문 자동 통합
유지보수 효율무배포 대응설정 파일 수정만으로 포맷 변경 적용

기술 스택 및 아키텍처

핵심 기술 스택

# 주요 기술 구성
Backend      : Python, Flask
Data Process : Pandas
Frontend     : HTML, Jinja 템플릿
Config Mgmt  : Excel, JSON
Deploy       : AWS Lightsail
Version Ctrl : Git

시스템 아키텍처

  graph TD
    A[자사몰 주문서] --> C[Flask 웹 서버]
    B[스마트스토어 주문서] --> C
    C --> D[파일 업로드 검증]
    D --> E[채널별 구조 분석]
    E --> F[데이터 정규화]
    F --> G[메뉴명/옵션명 매핑]
    G --> H[통합 포맷 생성]
    H --> I[배송/제조 관리용 Excel]
    
    J[Excel 매핑 테이블] --> G
    K[JSON 설정 파일] --> G
    L[에러 핸들링] --> M[오류.excel 생성]

주요 기술적 도전과 해결책

1. 채널별 상이한 주문서 구조 통합

도전과제

  • 자사몰: 상품(1) → 옵션(1-1) 순서의 데이터 구조
  • 스마트스토어: 옵션(1-1) → 상품(1) 순서의 정반대 구조
  • 복잡성: 동일한 주문이지만 완전히 다른 데이터 배열로 인한 통합 어려움

문제 해결 과정

1단계: 데이터 구조 분석

# 자사몰 구조 분석 예제
자사몰_구조 = {
    "주문번호": "ORDER-001",
    "상품명": "샐러드볼",      # 먼저 상품
    "옵션": "당근 제외"        # 그 다음 옵션
}

# 스마트스토어 구조 분석 예제
스마트스토어_구조 = {
    "주문번호": "SMART-001", 
    "옵션": "당근 제외",       # 먼저 옵션
    "상품명": "샐러드볼"       # 그 다음 상품
}

2단계: Pandas 기반 정규화 로직 개발 예제

# 채널별 주문서 구조를 표준 형태로 정규화
def normalize_order_structure(df, channel_type):
    if channel_type == "자사몰":
        return df.groupby('주문번호').apply(sort_by_standard_order)
    elif channel_type == "스마트스토어":
        return df.groupby('주문번호').apply(reverse_and_sort)
def sort_by_standard_order(group):
    return group.sort_values(['상품우선순위', '옵션우선순위'])

3단계: 논리적 그룹핑 시스템

  • 주문번호 기준으로 상품-옵션 관계 매핑
  • Pandas groupby, sort 함수 조합으로 일관된 출력 보장
  • 모든 채널의 주문이 동일한 형태로 변환
성과
  • 일관성 확보: 모든 채널 주문서가 동일한 표준 형태로 통합
  • 확장성: 신규 채널 추가 시 구조 분석 후 정규화 규칙만 추가하면 대응 가능
  • 정확성: 주문번호 기반 논리적 그룹핑으로 누락/중복 방지

2. 메뉴명/옵션명 표준화 시스템

도전과제

  • 문제: 채널별 상품명, 옵션명 표기 차이로 인한 혼란
    • 자사몰: “당근 제외”, “고기 추가(100g)”, …
    • 스마트스토어: “당근 X”, “고기 100g”, …
  • 복잡성: 동일한 상품/옵션이지만 표기법이 달라 제조진 혼란 야기

문제 해결 과정

1단계: 매핑 테이블 체계 설계 예제

  • Sheet: 메뉴_매핑
자사몰스마트스토어표준명
치킨치킨샐러드치킨샐러드볼
불고기불고기도시락불고기도시락
  • Sheet: 옵션_매핑
자사몰스마트스토어표준명
당근 제외당근 X제외: 당근
오이 제외오이 X제외: 오이

2단계: JSON 설정 파일 구조화

# 옵션명 매핑 JSON 구조
option_mapping = {
    "자사몰": {
        "당근 제외": "제외: 당근",
        "오이 제외": "제외: 오이"
    },
    "스마트스토어": {
        "당근X": "제외: 당근", 
        "오이X": "제외: 오이"
    }
}

# 매핑 테이블 기반 자동 명칭 표준화
def standardize_names(df, channel, mapping_file):
    mapping = load_mapping_table(mapping_file)    
    df['표준_메뉴명'] = df['메뉴명'].map(mapping[channel]['메뉴'])
    df['표준_옵션명'] = df['옵션명'].map(mapping[channel]['옵션'])
    return df

3단계: 실시간 변환 시스템

  • Excel/JSON 파일 기반 설정으로 하드코딩 방지
  • 신규 메뉴/옵션 추가 시 설정 파일만 수정하면 즉시 적용
  • 채널별 분리된 시트 구성으로 체계적 관리
성과
  • 일관성: 모든 채널의 메뉴/옵션명이 표준명으로 통일
  • 유지보수성: 설정 파일 수정만으로 새로운 매핑 규칙 적용
  • 확장성: 신규 채널 추가 시 매핑 테이블만 확장하면 대응

3. 포맷 변경 대응 시스템

도전과제

  • 문제: 채널사 정책 변경으로 주문서 포맷 변경 가능성
  • 기존 방식: 하드코딩으로 대응하여 매번 코드 수정 및 배포 필요
  • 비효율성: 개발자 개입 없이는 대응 불가능한 구조

문제 해결 과정

1단계: 설정 기반 아키텍처 설계

# 기존: 하드코딩 방식
def process_smartstore_order(df):
    df.rename(columns={
        '주문일자': 'order_date',      
        '상품명': 'product_name',        
        '옵션정보': 'options'          
    })
    
# 개선: 설정 기반 방식 (해결)
def process_order_by_config(df, channel_config):
    column_mapping = load_config(channel_config)
    df.rename(columns=column_mapping)
    return df

2단계: JSON 설정 파일 분리

{
  "스마트스토어": {
    "column_mapping": {
      "주문일자": "order_date",
      "상품명": "product_name", 
      "옵션정보": "options"
    },
  },
  "자사몰": {
    "column_mapping": {
      "주문날짜": "order_date",
      "제품명": "product_name",
      "선택옵션": "options" 
    }
  }
}

3단계: 무배포 대응 체계

  • 포맷 변경 시 JSON 설정 및 Excel 파일만 수정
  • 서버 재시작 없이 실시간 적용
  • 개발자 개입 최소화로 운영 효율성 향상
성과
  • 민첩성: 채널 포맷 변경 시 즉시 대응 가능
  • 안정성: 코드 수정 없이 설정 변경만으로 안전한 대응
  • 확장성: 신규 채널 추가 시 설정 추가만으로 지원

4. 사용자 친화적 인터페이스 구현

도전과제

  • 사용자: CS 담당자 (비개발자)
  • 요구사항: 복잡한 기술 지식 없이 직관적 사용 가능
  • 워크플로우: 기존 업무 방식과 유사한 간단한 절차

문제 해결 과정

1단계: 단순화된 3단계 워크플로우 설계 예제

# Flask 라우트 설계
@app.route('/', methods=['GET'])
def upload_page():
    """1단계: 파일 업로드 페이지"""
    return render_template('upload.html')

@app.route('/process', methods=['POST']) 
def process_files():
    """2단계: 파일 처리"""
    files = request.files
    result = integrate_orders(files)
    return render_template('result.html', result=result)

@app.route('/download/<filename>')
def download_file(filename):
    """3단계: 결과 다운로드"""
    return send_file(filename, as_attachment=True)

2단계: Jinja 템플릿 기반 직관적 UI 예제

<!-- 업로드 페이지: 드래그 앤 드롭 지원 -->
<div class="upload-area">
    <h2>📁 주문서 파일 업로드</h2>
    <p>자사몰과 스마트스토어 Excel 파일을 선택하세요</p>
    <input type="file" multiple accept=".xlsx,.xls">
    <button type="submit">📊 통합 처리 시작</button>
</div>

<!-- 결과 페이지: 처리 상태 표시 -->
<div class="result-area">
    <h2>✅ 처리 완료</h2>
    <p>총 {{ total_orders }}건 주문이 성공적으로 통합되었습니다</p>
    <button onclick="download()">📄 통합 파일 다운로드</button>
</div>

3단계: 원클릭 처리 시스템

  • 복잡한 데이터 처리 과정을 단일 버튼으로 간소화
  • 처리 진행 상황 실시간 표시
  • 결과 파일 자동 생성 및 다운로드 링크 제공
성과
  • 사용성: 비개발자도 5분 내 학습 후 독립적 사용 가능
  • 효율성: 기존 4시간 작업을 10분(처리 20초 + 검수 10분)으로 단축
  • 안정성: 사용자 실수 방지를 위한 파일 검증 및 오류 메시지 제공

5. 에러 핸들링 및 안정성 시스템

도전과제

  • 파일 형식 오류: 잘못된 Excel 파일이나 손상된 파일 업로드
  • 데이터 구조 변경: 예상과 다른 컬럼 구조의 주문서
  • 처리 중 예외: 메모리 부족, 데이터 타입 오류 등

문제 해결 과정

1단계: 업로드 파일 검증

  • 확장자 검증
  • Excel 파일 구조 검증

2단계: 처리 중 오류 관리

  • 처리 중 오류는 “error.xlsx” 파일 생성

3단계: 로깅 및 추적 시스템

  • 파일 업로드
  • 처리 완료
  • 오류 발생
성과
  • 안정성: 0% 오류율로 데이터 무결성 보장
  • 추적성: 모든 처리 과정의 로그 기록으로 문제 발생 시 원인 추적 가능
  • 복구성: 처리 실패 시 오류 내역을 별도 Excel 파일로 제공하여 수동 처리 지원

성능 평가 및 검증

효율성 검증

  • Before: 수작업 4시간 (파일 다운로드 → 복사/붙여넣기 → 수동 통합 → 검수)
  • After: 자동처리 10분 (업로드 → 자동처리 20초 → 검수 10분)
  • 개선율: 24배 시간 단축

정확성 검증

  • 오류율: 0% (완전 자동화로 휴먼 에러 제거)
  • 데이터 무결성: 주문번호 기반 논리적 검증으로 누락/중복 방지
  • 일관성: 표준화된 메뉴/옵션명으로 제조진 혼란 해소

확장성 검증

  • 신규 채널 대응: 설정 파일 추가만으로 쿠팡, 11번가 등 확장 가능
  • 포맷 변경 대응: 무배포로 즉시 대응 가능한 아키텍처 검증
  • 처리 용량: 일 500건 이상 주문도 동일한 성능으로 처리 가능

비즈니스 임팩트 및 성과

운영 효율성 개선

  • 시간 절약: CS 담당자 일일 4시간 업무를 10분으로 단축
  • 정확도 향상: 수작업 오류 완전 제거로 배송/제조 관리 품질 개선
  • 생산성 증대: 담당자가 고부가가치 업무에 집중 가능

기술적 가치 창출

  • 유지보수성: 설정 기반 접근으로 개발자 개입 최소화
  • 확장성: 신규 채널 추가 시 설정만으로 대응 가능한 아키텍처
  • 안정성: 0% 오류율로 데이터 무결성 보장

비즈니스 연속성 확보

  • 운영 안정화: 수작업 의존도 제거로 업무 연속성 확보
  • 확장 준비: 다채널 확장 시 즉시 대응 가능한 기반 구축
  • 비용 효율: 반복 업무 자동화로 인건비 효율성 개선

후속 개발 계획

현재 한계점 분석

  • Admin 인터페이스 부재: 설정 파일 직접 수정 대신 웹 기반 관리 도구 필요
  • RESTful API 미적용: 현재 자동화 스크립트 수준으로 Backend API 아키텍처 개선 필요
  • 단일 사용자 제약: 동시 사용자 고려한 세션 관리 및 큐잉 시스템 미구현

시스템 고도화 방안

  1. Admin 시스템 구축: 웹 기반 설정 관리 인터페이스
  2. API 아키텍처: RESTful API 기반 Backend 시스템으로 고도화
  3. 실시간 연동: API 기반 실시간 주문 데이터 동기화
  4. 대용량 처리: 멀티프로세싱 기반 대량 주문 처리 최적화

기술적 학습 및 성장

풀스택 개발 역량

  • Backend 개발: Flask 기반 웹 서버 구축 및 비즈니스 로직 구현
  • 데이터 처리: Pandas를 활용한 대용량 Excel 데이터 조작 및 변환
  • Frontend 개발: Jinja 템플릿 기반 사용자 친화적 웹 인터페이스
  • 시스템 설계: 설정 기반 확장 가능한 아키텍처 설계

문제 해결 및 최적화

  • 문제 발견: 현장 담당자 고충 체험을 통한 실제 문제 정의
  • 단계적 개선: 하드코딩 → 설정 기반으로 진화하는 실무적 개발 과정
  • 사용자 중심 설계: 실제 사용자 경험을 바탕으로 한 직관적 인터페이스 설계
  • 점진적 최적화: 초기 MVP에서 시작하여 지속적 개선으로 완성도 향상

비즈니스 이해 및 가치 창출

  • 업무 프로세스 분석: 기존 워크플로우 이해 및 개선점 도출
  • ROI 측정: 시간 절약 및 오류 감소의 정량적 가치 측정
  • 확장성 고려: 비즈니스 성장에 대비한 시스템 설계
  • 사용자 교육: 시스템 도입을 위한 사용자 교육 및 지원

운영 및 유지보수

  • AWS 클라우드: Lightsail 기반 경량 서버 운영 경험
  • 모니터링: 로깅 시스템을 통한 시스템 상태 추적
  • 에러 핸들링: 다양한 예외 상황에 대한 안정적 대응 체계
  • 버전 관리: Git 기반 코드 관리 및 배포 프로세스

프로젝트 관리 및 협업

단독 개발 프로세스

  1. 문제 정의: 현장 담당자와의 소통을 통한 정확한 요구사항 파악
  2. MVP 설계: 핵심 기능 우선 개발로 빠른 가치 검증
  3. 반복적 개선: 사용자 피드백 기반 지속적 기능 개선
  4. 문서화: 시스템 사용법 및 유지보수 가이드 작성

사용자 협업

  1. 요구사항 분석: CS 담당자와의 지속적 소통으로 실제 니즈 파악
  2. 테스트 협업: 실제 업무 데이터를 활용한 시스템 검증
  3. 교육 및 지원: 시스템 도입을 위한 사용법 교육 및 기술 지원
  4. 피드백 수집: 사용 과정에서 발생하는 개선 요청 지속 반영

결론 및 시사점

기술적 가치

  • 실무 중심 개발: 실제 현장 문제를 기술로 해결하는 실용적 접근
  • 확장 가능한 설계: 설정 기반 아키텍처로 향후 확장성 확보
  • 사용자 중심 UI/UX: 비개발자도 쉽게 사용할 수 있는 직관적 인터페이스

비즈니스 가치

  • 즉각적 효과: 24배 업무 효율성 향상으로 명확한 ROI 달성
  • 품질 개선: 0% 오류율로 운영 품질 대폭 향상
  • 확장 기반 구축: 다채널 확장 시 즉시 대응 가능한 시스템 기반 마련

개발자로서의 성장

  • 문제 발견 능력: 현장 체험을 통한 실제 문제 정의 및 해결책 도출
  • 기술적 판단력: 하드코딩 vs 설정 기반 접근의 장단점 이해 및 선택
  • 사용자 관점: 기술자가 아닌 실사용자 입장에서의 시스템 설계
  • 지속가능한 개발: 일회성 해결이 아닌 장기적 유지보수를 고려한 아키텍처

기술적 발전 방향

  • 마이크로서비스: 각 기능별 독립적 서비스로 분리하여 확장성 향상
  • 실시간 처리: 웹소켓 기반 실시간 주문 데이터 동기화
  • 머신러닝 도입: 주문 패턴 분석을 통한 자동 분류 및 예측 기능
  • API 생태계: 외부 시스템과의 연동을 위한 표준 API 제공

사업적 확장 가능성

  • SaaS 플랫폼: 유사한 문제를 가진 다른 커머스 업체 대상 서비스화
  • 다중 채널 지원: 쿠팡, 11번가, 네이버쇼핑 등 주요 커머스 플랫폼 통합
  • 고도화 기능: 재고 관리, 배송 추적, 고객 분석 등 확장 기능
  • 컨설팅 서비스: 커머스 업체 대상 프로세스 최적화 컨설팅