배경
현재 클라이언트는 POST /pay 이후 결제 상태(PROCESSING → ACTIVE)를 확인하기 위해
GET /escrow-payments/:id를 반복 폴링해야 합니다.
불필요한 요청이 누적되고 UI 반응 지연이 발생합니다.
목표
결제 상태가 변경될 때 서버가 클라이언트에 직접 푸시하도록 개선합니다.
구현 방식
SSE(Server-Sent Events) + Redis Pub/Sub
- 단방향(서버→클라이언트) 알림이므로 WebSocket 대신 SSE 채택
EscrowCreateProcessor가 markActive() 후 Redis 채널에 PUBLISH
- SSE 엔드포인트가 해당 채널을 SUBSCRIBE하다 수신 시 클라이언트에 전달
Processor → redis.publish(payment:${paymentId}, { status: "ACTIVE" })
SSE endpoint → redis.subscribe → EventSource 이벤트 전송
Redis Pub/Sub을 경유하므로 추후 멀티 인스턴스 확장 시 코드 변경 없음
추가할 엔드포인트
GET /escrow-payments/:id/status/stream (SSE)
주의사항
- subscribe 전용 Redis 연결을 Bull 연결과 분리해서 생성
- 클라이언트 연결 종료 시 Redis 구독 해제 (연결 누수 방지)
- 결제 실패/타임아웃 케이스 처리 (ACTIVE가 오지 않는 경우)
배경
현재 클라이언트는
POST /pay이후 결제 상태(PROCESSING → ACTIVE)를 확인하기 위해GET /escrow-payments/:id를 반복 폴링해야 합니다.불필요한 요청이 누적되고 UI 반응 지연이 발생합니다.
목표
결제 상태가 변경될 때 서버가 클라이언트에 직접 푸시하도록 개선합니다.
구현 방식
SSE(Server-Sent Events) + Redis Pub/Sub
EscrowCreateProcessor가markActive()후 Redis 채널에 PUBLISHRedis Pub/Sub을 경유하므로 추후 멀티 인스턴스 확장 시 코드 변경 없음
추가할 엔드포인트
GET /escrow-payments/:id/status/stream(SSE)주의사항