jayeon@portfolio — jsh — 92×34
jayeon@portfolio~/projects%cat projects/ev-roaming.md
주문·결제 데이터 연동 — 상태 기반 재개 (State-based Resume)
문제: 다단계 외부 API 호출 중 실패·재시도 시 주문·결제 데이터가 중복 생성될 위험.
설계: 처리 상태(수신/Core등록/주문생성/결제완료)를 별도 관리, 완료 단계는 건너뛰고 중단 지점부터 재개. Core에 생성 요청한 주문ID·결제ID를 재사용.
효과: 중복 주문·중복 결제 데이터 생성을 원천 차단. 결제 실패 시 미수·예약 결제 루트 전환도 상태 기반으로 재개.
Task 기반 처리 + 재시도 정책
문제: 외부 시스템 연동은 지연·실패 가능성이 큼.
설계: 작업을 Task로 분해·상태 부여, 원본 먼저 적재 후 후속 Task 생성. 예외 성격별 재시도 가능 여부·횟수 정책 분리, 모든 외부 API 호출 로깅.
효과: 한 단계 실패가 전체를 막지 않음, 유실 없는 추적 가능 구조.
이벤트 기반 회원 동기화 + 멱등 수집
문제: 회원 카드 변경이 수시로 발생하고, 충전 내역 수신·재시도 과정에서 중복 수집·중복 등록이 생길 수 있음.
설계: Kafka 카드 변경 이벤트로 회원 동기화 Task 생성(Core 조회→로밍 플랫폼 등록). 충전 내역은 외부 식별자(charge_id) 중복 시 미적재, 수신 1건이라도 실패하면 마지막 수신 시점을 갱신하지 않고 다음 주기에 해당 구간을 재수집.
효과: 카드 변경이 비동기로 반영되고, 중복 적재·누락 없이 충전 내역을 멱등하게 수집.
```mermaid
sequenceDiagram
  participant 미들웨어
  participant 상태DB
  participant 로밍플랫폼
  participant Core서비스

  미들웨어->>상태DB: 처리 상태 조회
  alt 미수신
    미들웨어->>로밍플랫폼: 충전 내역 수신
    미들웨어->>상태DB: 상태 갱신 (수신)
  end
  alt Core 미등록
    미들웨어->>Core서비스: 충전 내역 등록
    미들웨어->>상태DB: 상태 갱신 (Core등록)
  end
  alt 주문 미생성
    미들웨어->>Core서비스: 주문 데이터 생성 요청
    미들웨어->>상태DB: 주문ID 저장 (상태: 주문생성)
  end
  alt 결제 미완료
    미들웨어->>Core서비스: 결제 데이터 전송 (주문ID 재사용)
    미들웨어->>상태DB: 상태 갱신 (결제완료)
  end
  Note over 미들웨어: 완료 단계는 건너뜀 → 중복 주문·결제 차단
```
상태 기반 재개 (State-based Resume) 시퀀스
```mermaid
graph TD
  A[외부 이벤트 수신] --> B[원본 데이터 먼저 적재]
  B --> C{Task 분해}
  C --> D[Task: Core 등록]
  C --> E[Task: 주문 데이터 생성]
  C --> F[Task: 결제 데이터 연동]
  C --> G[Task: 상태 동기화]
  D -->|실패| H{재시도 가능?}
  E -->|실패| H
  F -->|실패| H
  H -->|예외 성격 판단| I[재시도 정책 적용]
  H -->|불가| J[실패 이력 기록]
```
Task 기반 처리 + 재시도 정책 구조
2025.11 — 2025.12 · 슬로그업 (프리랜서)

전기차 충전 로밍 연동 서비스

전력 공기업 충전 로밍 플랫폼과 고객사 Core 사이의 충전 데이터 연동 미들웨어. 충전 내역 수신·전송, 주문·결제 데이터 연동/생성, 미수·회원·충전소 동기화를 Task 기반으로 오케스트레이션. 요구분석부터 구현까지 단독 수행.

Java 8Spring BootJPAKafkaMySQLOpenFeign

주문·결제 데이터 연동 — 상태 기반 재개 (State-based Resume)

문제
다단계 외부 API 호출 중 실패·재시도 시 주문·결제 데이터가 중복 생성될 위험.
설계
처리 상태(수신/Core등록/주문생성/결제완료)를 별도 관리, 완료 단계는 건너뛰고 중단 지점부터 재개. Core에 생성 요청한 주문ID·결제ID를 재사용.
효과
중복 주문·중복 결제 데이터 생성을 원천 차단. 결제 실패 시 미수·예약 결제 루트 전환도 상태 기반으로 재개.

Task 기반 처리 + 재시도 정책

문제
외부 시스템 연동은 지연·실패 가능성이 큼.
설계
작업을 Task로 분해·상태 부여, 원본 먼저 적재 후 후속 Task 생성. 예외 성격별 재시도 가능 여부·횟수 정책 분리, 모든 외부 API 호출 로깅.
효과
한 단계 실패가 전체를 막지 않음, 유실 없는 추적 가능 구조.

이벤트 기반 회원 동기화 + 멱등 수집

문제
회원 카드 변경이 수시로 발생하고, 충전 내역 수신·재시도 과정에서 중복 수집·중복 등록이 생길 수 있음.
설계
Kafka 카드 변경 이벤트로 회원 동기화 Task 생성(Core 조회→로밍 플랫폼 등록). 충전 내역은 외부 식별자(charge_id) 중복 시 미적재, 수신 1건이라도 실패하면 마지막 수신 시점을 갱신하지 않고 다음 주기에 해당 구간을 재수집.
효과
카드 변경이 비동기로 반영되고, 중복 적재·누락 없이 충전 내역을 멱등하게 수집.
상태 기반 재개 (State-based Resume) 시퀀스
Task 기반 처리 + 재시도 정책 구조