Marine Schedule 개발기 — 이슈 추적과 실시간 승인 시스템
핵심 기능 정의
개발 전에 도메인 전문가와 여러 차례 대화하며 핵심 기능을 정의했습니다.
선박 수리 프로젝트의 가장 큰 병목은 이슈 보고 → 확인 → 승인 흐름이었습니다. 현장에서 문제가 발견되면 보고서를 작성하고, 관련자들이 확인하고, 최종 승인이 나야 다음 단계로 진행할 수 있습니다. 이 과정이 이메일과 전화로 이뤄지다 보니 느리고 추적이 어려웠습니다.
핵심 기능을 세 가지로 잡았습니다:
- 이슈 리포트 (사진/영상 첨부)
- 실시간 알림 (이슈 생성/상태 변경 시)
- 승인 처리 (단계별 승인 워크플로우)
이슈 리포트 구현
이슈 리포트는 현장에서 작성합니다. 따라서 모바일 최적화가 중요했습니다.
카메라로 사진을 찍고 바로 첨부할 수 있어야 하고, 네트워크가 불안정한 선박 현장 환경에서도 작동해야 했습니다. 오프라인 상태에서 작성한 이슈 리포트는 로컬에 저장했다가 연결이 복구되면 자동으로 업로드하는 방식을 구현했습니다.
사진 첨부의 경우 용량이 큰 원본 이미지를 그대로 업로드하면 느렸습니다. 업로드 전에 클라이언트 측에서 이미지를 압축하고, S3에 직접 업로드(presigned URL 방식)하는 방식을 택했습니다. 서버를 거치지 않으니 속도가 빨랐습니다.
승인 워크플로우
승인 단계는 프로젝트마다 다릅니다. 어떤 프로젝트는 2단계, 어떤 것은 4단계 승인이 필요합니다.
고정된 구조로 만들면 다양한 프로젝트에 적용하기 어렵다고 판단해, 승인 단계를 프로젝트별로 설정할 수 있게 했습니다. 각 단계마다 담당자를 지정하고, 해당 단계의 승인이 완료되면 자동으로 다음 담당자에게 알림이 갑니다.
푸시 알림은 Firebase Cloud Messaging(FCM)을 사용했습니다. 승인 요청이 왔을 때 즉시 알림을 받아야 빠른 의사결정이 가능합니다.
다국어 지원
선박 수리 업계는 국제적입니다. 선주는 그리스인, 조선소는 한국, 선급 기관 검사관은 일본인인 프로젝트가 실제로 있습니다.
최소한 한국어, 영어는 지원해야 했습니다. 앱에 다국어 지원을 추가하고, 이슈 리포트는 작성 언어 그대로 저장하되 앱 인터페이스는 각자 설정한 언어로 보이도록 했습니다.
테스트의 어려움
일반 앱과 달리 B2B 앱은 테스트가 어렵습니다.
실제 선박 수리 프로젝트에 참여하지 않으면 현실적인 시나리오를 만들기 어렵습니다. 도메인 전문가에게 자주 피드백을 받으면서 "이 화면이 실제 상황에서 말이 되는가"를 계속 확인했습니다. 개발자의 논리와 현장의 논리가 다른 경우가 종종 있었습니다.