핵심요약
무신사가 외부 POS 솔루션 의존성을 탈피하고 자체 개발한 MPOS(Musinsa POS) 시스템 구축 과정을 상세히 공유합니다. Electron을 선택한 이유, 개발 과정에서의 기술적 난제 해결 경험, 내재화 이후 달라진 점 등을 다룹니다.
무신사의 POS 시스템 내재화 여정: MPOS 구축기
배경 및 필요성
- 외부 3rd party POS 솔루션 사용 시 온라인 플랫폼과의 연동성, 개발 대응 속도 한계 발생.
- 외부 의존성으로 인한 개발 지연, 비용 부담, 유연성 부족, 시스템 통합 복잡성 등의 문제 해결 필요.
- POS 시스템의 전면 내재화를 통해 외부 의존성 제거 및 자체 개발 시스템 전환 결정.
내재화 결정 요인
- 개발 속도 향상: 외부 업체 협의 없이 자체 개발을 통한 빠른 기능 추가 및 수정.
- 비용 절감: 외부 솔루션 사용료 및 커스터마이징 비용 절감.
- 비즈니스 유연성 확보: 요구사항 변화에 대한 신속하고 유연한 대응.
- 시스템 통합 간소화: 내부 시스템 간 직접 연동을 통한 복잡도 감소.
- 데이터 및 프로세스 통제: 모든 데이터와 프로세스 직접 관리 및 품질 보장.
기술 스택 선정: Electron
- 고려 사항: 개발 속도, 하드웨어 통신 용이성, 크로스 플랫폼 지원, 안정성 및 커뮤니티.
- Electron 선택 이유: JavaScript/HTML/CSS 웹 기술 스택 재활용, Node.js 기반 하드웨어(프린터, 스캐너 등) 통신 용이성, Chromium 내장으로 시스템 브라우저 독립성, VS Code/Slack 등 검증된 생태계.
- 대안 검토: Tauri (Rust 기반, 러닝 커브 부담), 네이티브 개발 (Windows/macOS 별도 개발 부담).
Electron 적용 후 경험 및 개선점
- 빌드 환경 및 비용: Windows runner 중심 빌드 최적화, Linux runner는 테스트/lint 작업으로 비용 절감.
- IPC 통신 끊김 방지:
powerSaveBlocker활용하여 Sleep 모드 진입 방지 및 메인 프로세스와 UI 간 통신 안정화. - SerialPort 통신:
serialport패키지 번들링 이슈 해결 (prebuilds 경로 수정 및 절대 경로 참조). - ESC/POS 표준 대응: 오픈소스 라이브러리 한계로 자체 ESC/POS 명령어 구현 및 라이브러리화.
- 인증서 적용: OV CodeSign 인증서 적용 및 GitHub Actions CI/CD 파이프라인 연동으로 신뢰도 확보.
- 네트워크 안정성: 기준정보 캐싱 전략 및 Network Information API 활용으로 네트워크 불안정 상황 대응.
- 모니터링 및 장애 대응: Datadog RUM, Slack 알림 연동으로 실시간 모니터링 및 신속한 장애 대응 체계 구축.
내재화 이후 변화
- 의존성 제거: 외부 업체 의존성 해소 및 자체적인 문제 해결 능력 확보.
- 비용 절감: 외부 솔루션 사용료 제거 및 장기적인 운영 비용 감소.
- 개발 속도 향상: 빠른 피드백 루프 및 시장 변화에 대한 신속한 대응.
- 간결한 통합 구조: 내부 API 중심의 아키텍처로 장애 추적 및 유지보수 용이.
- 데이터 활용 증대: 모든 로그 자유로운 수집 및 분석을 통한 데이터 기반 의사결정 강화.
향후 개선 과제
- 메인 프로세스 부하 분산: 영수증 출력 로직 렌더러 프로세스로 이관 및 메인 프로세스 역할 최소화.
- 경량 런타임 대안 검토: 저사양 장비 대상 Tauri 등 Rust 기반 경량 런타임 병행 운영 고려.
결론
- POS 시스템의 전면 내재화를 통해 개발 속도, 비용, 유연성, 통합, 데이터 관리 측면에서 큰 성과 달성.
- Electron 기반 MPOS 구축은 무신사 오프라인 스토어의 기술적 혁신과 운영 효율성 증대에 기여.