Skip to content

[FEAT] 결제 상태 변경시 SSE로 실시간 상태변경 전송 #52

Description

@Takch02

배경

현재 클라이언트는 POST /pay 이후 결제 상태(PROCESSING → ACTIVE)를 확인하기 위해
GET /escrow-payments/:id를 반복 폴링해야 합니다.
불필요한 요청이 누적되고 UI 반응 지연이 발생합니다.

목표

결제 상태가 변경될 때 서버가 클라이언트에 직접 푸시하도록 개선합니다.

구현 방식

SSE(Server-Sent Events) + Redis Pub/Sub

  • 단방향(서버→클라이언트) 알림이므로 WebSocket 대신 SSE 채택
  • EscrowCreateProcessormarkActive() 후 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가 오지 않는 경우)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions