프로젝트 개요
목록 | 내용 |
---|---|
프로젝트명 | 다채널 주문서 통합 자동화 시스템 |
개발기간 | 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 아키텍처 개선 필요
- 단일 사용자 제약: 동시 사용자 고려한 세션 관리 및 큐잉 시스템 미구현
시스템 고도화 방안
- Admin 시스템 구축: 웹 기반 설정 관리 인터페이스
- API 아키텍처: RESTful API 기반 Backend 시스템으로 고도화
- 실시간 연동: API 기반 실시간 주문 데이터 동기화
- 대용량 처리: 멀티프로세싱 기반 대량 주문 처리 최적화
기술적 학습 및 성장
풀스택 개발 역량
- Backend 개발: Flask 기반 웹 서버 구축 및 비즈니스 로직 구현
- 데이터 처리: Pandas를 활용한 대용량 Excel 데이터 조작 및 변환
- Frontend 개발: Jinja 템플릿 기반 사용자 친화적 웹 인터페이스
- 시스템 설계: 설정 기반 확장 가능한 아키텍처 설계
문제 해결 및 최적화
- 문제 발견: 현장 담당자 고충 체험을 통한 실제 문제 정의
- 단계적 개선: 하드코딩 → 설정 기반으로 진화하는 실무적 개발 과정
- 사용자 중심 설계: 실제 사용자 경험을 바탕으로 한 직관적 인터페이스 설계
- 점진적 최적화: 초기 MVP에서 시작하여 지속적 개선으로 완성도 향상
비즈니스 이해 및 가치 창출
- 업무 프로세스 분석: 기존 워크플로우 이해 및 개선점 도출
- ROI 측정: 시간 절약 및 오류 감소의 정량적 가치 측정
- 확장성 고려: 비즈니스 성장에 대비한 시스템 설계
- 사용자 교육: 시스템 도입을 위한 사용자 교육 및 지원
운영 및 유지보수
- AWS 클라우드: Lightsail 기반 경량 서버 운영 경험
- 모니터링: 로깅 시스템을 통한 시스템 상태 추적
- 에러 핸들링: 다양한 예외 상황에 대한 안정적 대응 체계
- 버전 관리: Git 기반 코드 관리 및 배포 프로세스
프로젝트 관리 및 협업
단독 개발 프로세스
- 문제 정의: 현장 담당자와의 소통을 통한 정확한 요구사항 파악
- MVP 설계: 핵심 기능 우선 개발로 빠른 가치 검증
- 반복적 개선: 사용자 피드백 기반 지속적 기능 개선
- 문서화: 시스템 사용법 및 유지보수 가이드 작성
사용자 협업
- 요구사항 분석: CS 담당자와의 지속적 소통으로 실제 니즈 파악
- 테스트 협업: 실제 업무 데이터를 활용한 시스템 검증
- 교육 및 지원: 시스템 도입을 위한 사용법 교육 및 기술 지원
- 피드백 수집: 사용 과정에서 발생하는 개선 요청 지속 반영
결론 및 시사점
기술적 가치
- 실무 중심 개발: 실제 현장 문제를 기술로 해결하는 실용적 접근
- 확장 가능한 설계: 설정 기반 아키텍처로 향후 확장성 확보
- 사용자 중심 UI/UX: 비개발자도 쉽게 사용할 수 있는 직관적 인터페이스
비즈니스 가치
- 즉각적 효과: 24배 업무 효율성 향상으로 명확한 ROI 달성
- 품질 개선: 0% 오류율로 운영 품질 대폭 향상
- 확장 기반 구축: 다채널 확장 시 즉시 대응 가능한 시스템 기반 마련
개발자로서의 성장
- 문제 발견 능력: 현장 체험을 통한 실제 문제 정의 및 해결책 도출
- 기술적 판단력: 하드코딩 vs 설정 기반 접근의 장단점 이해 및 선택
- 사용자 관점: 기술자가 아닌 실사용자 입장에서의 시스템 설계
- 지속가능한 개발: 일회성 해결이 아닌 장기적 유지보수를 고려한 아키텍처
기술적 발전 방향
- 마이크로서비스: 각 기능별 독립적 서비스로 분리하여 확장성 향상
- 실시간 처리: 웹소켓 기반 실시간 주문 데이터 동기화
- 머신러닝 도입: 주문 패턴 분석을 통한 자동 분류 및 예측 기능
- API 생태계: 외부 시스템과의 연동을 위한 표준 API 제공
사업적 확장 가능성
- SaaS 플랫폼: 유사한 문제를 가진 다른 커머스 업체 대상 서비스화
- 다중 채널 지원: 쿠팡, 11번가, 네이버쇼핑 등 주요 커머스 플랫폼 통합
- 고도화 기능: 재고 관리, 배송 추적, 고객 분석 등 확장 기능
- 컨설팅 서비스: 커머스 업체 대상 프로세스 최적화 컨설팅