
Evidence portfolio
직접 만든 제품과
운영에서 바꾼 시스템
실제 제품 화면 3개와 문제, 판단, 결과가 남은 운영 사례 3개만 보여드립니다. 경력과 기술 목록은 이력서로 분리했습니다.
- 공개 제품 표면
- 3
- 대표 운영 사례
- 3
- 백엔드 설계·운영
- 6년
01 · Product evidence
제품은 실제 화면과 공개 링크로
스크린샷만으로 운영 규모를 주장하지 않습니다. 화면, 스토어·로그인 표면, 공개 소스와 구현 기록을 함께 둡니다.


iOS App Store 출시
Mimi
YouTube 클립을 영어 쉐도잉 훈련으로 변환
Spring AFTER_COMMIT + bounded @Async로 LLM 호출을 DB 트랜잭션 밖에서 실행 - PENDING → READY/FAILED를 짧은 트랜잭션으로 기록
Spring Boot · Next.js · PostgreSQL · AWS

02 · Transfer
제조에서 제품으로 이어진 설계 원칙
트랜잭션 경계
운영 · MES 완공과 ERP 호출을 분리
제품 · Mimi에서 LLM 호출을 DB 트랜잭션 밖으로 이동
상태 무결성
운영 · Oracle 행 잠금으로 LOT ID 유일성 보장
제품 · DocVault에서 해시체인으로 변경 흔적 보존
실패 격리
운영 · PK-only 요청과 서버 최신 조회
제품 · Mimi에서 제한 재시도와 명시적 실패 상태 기록
03 · Production decisions
운영 사례 3개
성공 화면만 보여주지 않고, 실패 상태와 선택하지 않은 대안까지 장면별로 남겼습니다.
트랜잭션 경계
ERP 장애와 MES 완공 상태를 분리
평균 처리시간 60% 단축 · 월 약 20건 수동 재처리를 거의 없앰
Case 01 · ERP 장애가 공장 기록을 되돌리지 않게
MES↔ERP 연동 - 트랜잭션 경계 재설계
“An external system's failure must not roll back my system's core state.”
→ cut the transaction boundary in two
마지막 공정 — 제품은 물리적으로 완성되어 출고된다. MES가 기록하고, ERP가 원가를 처리한다.
동시성 제어
오늘 날짜의 카운터 행만 잠그고 잠금 구간 축소
다중 인스턴스에서도 LOT ID 유일성 보장
Case 04 · 두 서버가 같은 번호를 만들 때
다중 인스턴스 LOT ID 충돌 - Oracle 행 잠금으로 유일성 보장
“Serialize at the row, and hold the lock for a statement — not a conversation.”
FOR UPDATE on one row → refined to atomic UPDATE … RETURNING
여러 MES 인스턴스가 DB의 공유 카운터 행 하나에서 날짜 기반 LOT ID를 발급한다.
페이로드와 최신성
PK만 전송하고 저장 시점의 최신 상태를 서버에서 조회
모바일 스캔 배치 30 → 80
Case 03 · 상태 대신 식별자를 전송
모바일 스캔 HTTP 413 - PK-only 요청과 서버 최신 조회
just raise the shared server's payload limit
“Send identifiers, not state — the DB is the source of truth.”
don't push your risk onto a shared server
작업자가 PDA로 LOT를 스캔해 배치로 저장 — 저장은 미들웨어를 거쳐 다른 서비스와 '공유 중인' 레거시 서버로 간다.