Portfolio
위밋 Roouty — 고객사 커스텀 SaaS (SAP·EPOD)
2026.01 ~ 현재
B2B 물류 TMS에서 고객사 SAP 거래명세서 연동과 전자 인수증(EPOD) 도메인을 단독 설계·구현. 사내 AI 운영 어시스턴트도 직접 구축.
회사 비공개 코드이므로 구현 세부·기밀을 제외한 직무·설계·성과 중심 요약입니다.
문제 · 맥락
물류 운송에서 인수증(EPOD, Electronic Proof of Delivery)은 배송 완료의 법적·정산 근거입니다. 발급은 (1) 데이터 정합성(필수 필드·해시)을 단계별로 보장해야 하고, (2) 다수 서버(pod)에서 동시에 자동 발행돼도 중복이 없어야 하며, (3) 수령인이 앱 없이도 서명할 수 있어야 합니다.
핵심 설계 결정
고객사 SAP ↔ 루티 TMS 거래명세서 연동 (고객사 커스텀)
고객사 SAP로 송신할 거래명세서 데이터를 루티 TMS 데이터와 매핑하는 처리 추가, SAP 송신 실패 응답 구조 개선.
SAP 수신 데이터를 (company_id, LINE2, LINE3) 키로 배치 조회·재분류하는 납품처(master_order) 분류·검증 룰을 고도화.
대기업 고객사 정산 흐름에 맞춘 B2B 커스텀 SaaS 기능으로, 인수증/거래명세서가 정산 근거로 안전하게 흐르도록 보장.
인수증 상태머신 + 비동기 발행 파이프라인
CREATED → DRAFT → SIGN_PENDING → SEALED → ISSUED 전이 검증.
단계별 필수 필드(문서 해시·최종 해시·PDF 키)를 강제하고, 비동기 PDF 워커 완료 후 저장 키를 채워 갱신.
트랜잭션 일관성 판단을 코드 내 결정 로그(ADR 주석)로 문서화.
서버 사이드 PDF 렌더링 엔진
Chromium 풀 + DOM 측정 기반 페이지네이션으로 프론트엔드 PDF 디자인을 백엔드에서 동일하게 재현.
일반(단가 노출 O/X)·통합 등 인수증 타입별 분기 렌더링.
멀티 pod 자동 발행 스케줄러 — Redis 분산락
Redis SET NX 분산락으로 cron 동시 발화 시 단 하나의 pod만 통과, TTL로 중복 실행 차단.
Redis 장애 시 보수적 fallback + 다음 cron 자연 회복으로 발행 중복을 원천 차단.
토큰 기반 원격 서명(매직링크)
서명 토큰 발급·기존 토큰 무효화·만료 관리, 서명 완료 시 PDF를 S3 업로드하고 메일/알림톡으로 발송하는 end-to-end 플로우 구현.
주문 목록 조회 API v2 재설계 — 1~5분(OOM) → 666ms
문제(v1): 단일 findAll에 다단계 1:N hasMany를 전부 JOIN으로 묶고 페이징이 없어, 결과 행이 카르테시안 곱으로 폭증. 전체를 메모리에 적재하다 5,187건 조회 시 1~5분 + 서버 OOM.
개선(v2): 메인 쿼리에서 1:N을 별도 IN 쿼리로 분리(곱셈 폭증 제거), count(distinct)·페이징 목록·전체 ID를 Promise.all로 병렬 조회, BE 페이징으로 페이지 단위 고정.
효과: 동일 5,187건 조회 기준 1~5분·OOM → 666ms. 응답이 데이터량·연관 행 수와 무관하게 일정.
향후: 30건+ 정렬·대용량 안정 지원을 위해 테이블 구조 개편, 종료 주문 핫/콜드 분리(아카이브 이관), 정렬·필터 경로 ORM → 네이티브 쿼리 전환을 검토 중.
BE 배포 브랜치 전략 개선 — force-push·reset --hard 제거
문제: hotfix를 stage에서 cherry-pick으로 반영하는데, 커밋 해시가 달라져 rebase + force-push가 필요하고, 팀원 전원이 pull 전 git reset --hard(작업 중이면 stash 왕복)를 매번 수행해야 했음.
개선(역방향 머지): main에 배포된 변경을 back-merge/날짜 브랜치로 떠 stage→develop PR 머지로 상위(배포)에서 하위(개발)로 전파. 머지라 해시가 정합되어 force-push 불필요, 불필요한 재배포는 [skip ci]로 차단.
효과: 공유 히스토리 재작성이 사라져 force-push·reset --hard 전면 제거, 팀원은 origin pull만. 2026-02 도입 → 2026-05 -s ours SHA 흡수 패턴 확립 → 팀 표준 정착.
사내 AI 운영 어시스턴트(Roouty Ops Assistant) 직접 구축
회사 개발 운영을 자동화하는 AI 에이전트 도구를 직접 구축(Node/TS)
규칙 준수 감시 에이전트, 상용 DB 5-Layer 방어 체계, 감독 에이전트 + 워크플로우 자동 개선, PostToolUse 검증.
개인 하네스의 사고방식을 프로덕션 조직 맥락에서 실제로 적용한 사례.
Node.js → Kotlin/Spring 멀티모듈 WAS 전환 개발에도 참여
공통 엔티티·보안 모듈 분리, OpenFeign 연동 라이브러리, 이벤트 기반 비동기(@Async/@EventListener/REQUIRES_NEW), CQRS형 서비스 분리.
성과 · 지표
EPOD · SAP 연동 도메인 단독 오너
SAP 거래명세서 연동, 인수증 상태머신, PDF 렌더러, 원격 서명, 주문 목록을 직접 설계·구현.
본인 작성 모듈에 대해 다수의 Jest 테스트를 함께 작성해 회귀 방어.
사내 AI 운영 어시스턴트(Roouty Ops Assistant)를 별도로 구축해 팀 개발 운영을 자동화.
한 줄 요약
물류 TMS에서 고객사 SAP ↔ 루티 TMS 거래명세서 연동과 전자 인수증(EPOD) 도메인을 단독 설계·구현 — 상태머신·Chromium 서버 PDF·Redis 분산락 자동발행·매직링크 원격서명, 주문 조회 API v2 재설계로 카르테시안·N+1 제거(1~5분·OOM → 666ms). 사내 AI 운영 어시스턴트까지 직접 구축.