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 미들웨어: 완료 단계는 건너뜀 → 중복 주문·결제 차단
``````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[실패 이력 기록]
```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건이라도 실패하면 마지막 수신 시점을 갱신하지 않고 다음 주기에 해당 구간을 재수집.
- 효과
- 카드 변경이 비동기로 반영되고, 중복 적재·누락 없이 충전 내역을 멱등하게 수집.