728x90
반응형
SSE + Kafka + Agent + Redis(선택) 조합은 "SAP ERP 연동을 위한 비동기 전표 처리 시스템"을 구축하는 데 매우 적합합니다.
✅ 아키텍처 개요 (전체 흐름)
[외부 백오피스 (Web)]
└─ REST API 호출 (전표 처리 요청)
▼
[Agent API (Spring Boot)]
├─ 저장: Kafka에 전표 처리 이벤트 publish
├─ Redis (optional): 캐시 또는 일시 상태 저장
└─ 응답: 202 Accepted + trackingId
[Kafka Broker]
└─ 전표 처리 이벤트 Queue
[Agent Consumer (Spring Boot)]
└─ Kafka에서 consume → SAP OData/SOAP 호출
└─ 결과 수신 후 상태 저장(DB or Redis)
└─ 처리 결과 → 백오피스에 전달 (SSE push)
[브라우저 SSE 연결]
└─ /sse?ids=... 연결 유지 중
└─ 처리 결과 오면 실시간 알림
[Optional] Redis
└─ 상태 캐시 (e.g. tx 상태 빠르게 조회)
🧱 컴포넌트별 역할
구성 요소역할
Agent API | 외부 요청 수신, Kafka publish, trackingId 발급 |
Kafka | 전표 처리 요청을 비동기 이벤트로 큐잉 |
Agent Consumer | Kafka 메시지 consume → SAP 호출 → 결과 처리 |
Redis (optional) | 처리 상태 cache (e.g. polling 응답 빠르게), TTL 관리 |
SSE Controller | 브라우저와 연결 유지하며 처리 결과 push |
백오피스 | SSE를 통해 상태 실시간 반영 (F5 없이) |
🧠 Redis를 "쓸까 말까" 판단 기준
항목Redis 사용하는 경우사용하지 않아도 되는 경우
상태 응답 속도 | 상태 조회가 빈번하고 빠른 응답 원할 때 | 상태 조회가 드물고 DB 성능 충분할 때 |
polling fallback | SSE 외에 polling도 지원할 때 | SSE만으로 충분할 때 |
결과 TTL 관리 | "전표 처리 후 10분간 상태 유지" 등 캐시 | 처리 결과를 영구 저장할 때 (DB만으로도 OK) |
다중 노드 확장 | Agent를 다중 인스턴스로 돌릴 때 상태 공유 | 단일 서버 구조일 때는 생략 가능 |
반응형
✅ 결론: Redis는 선택 사항이지만 polling + 고속 상태 응답을 고려하면 사용하는 것이 좋습니다.
📦 Kafka 메시지 예시 (전표 처리 요청)
{
"trackingId": "tx-20240617-00123",
"sapData": {
"companyCode": "1000",
"amount": 120000
},
"callbackType": "SSE"
}
🧭 처리 흐름 다이어그램
[백오피스]
│ POST /request
▼
[Agent API] ───────────────┐
│ produce to Kafka │
▼ │
[Kafka Broker] │
▼ ▼
[Agent Consumer] ──▶ SAP 호출
│
├─ 상태 저장 (Redis/DB)
└─ SSE Push or Callback
[브라우저] ←───────┘
🔐 인증/보안 설계
항목권장 방식
외부 요청 → Agent | JWT 또는 HMAC 서명 |
Kafka 메시지 | 내부망 또는 SASL 인증 |
SAP 호출 | OAuth2.0 Client Credentials |
SSE | 로그인된 사용자만 /sse 허용 (토큰 or 세션 기반) |
✅ 아키텍처 선택 요약
항목사용 여부설명
Kafka | ✅ 필수 | Agent ↔ SAP 비동기 처리용 |
SSE | ✅ 필수 | 사용자 브라우저 실시간 반영 |
Redis | ⚙️ 선택 | 빠른 상태 응답용 (polling 대응, TTL용) |
DB | ✅ 필수 | 트래킹, 로그, 재처리 이력 관리용 |
WebSocket | ❌ 생략 | SSE로 충분함 |
REST Callback | ⛔ 대체 가능 | SSE 사용 시 별도 callback 불필요 |
💡 확장 고려 시
- Kafka → Kafka Streams or Debezium 기반 audit trail 확장 가능
- SSE + Webhook 병행 지원 구조도 가능 (B2B/B2C 이중 대응)
- Redis 없애고 DB polling만으로도 충분한 경우 존재 (단 소규모)
728x90
반응형
'IT' 카테고리의 다른 글
EAI 시스템에서 동적 배포(Dynamic Deployment) (0) | 2025.06.18 |
---|---|
Server Stub이란? (0) | 2025.06.16 |
Spring Boot에서 OpenAPI 기반 서버 스텁(Server Stub) 생성 (2) | 2025.06.16 |
OpenAPI란? (0) | 2025.06.16 |
HTTP/1.1과 HTTP/2 의 차이 (0) | 2025.05.19 |