TIL

[250425] 배달어플 알림(SSE) + 토큰 쿠키 리팩토링

도원좀비 2025. 4. 25. 21:05

1️⃣ 주문 상태 변경 시 알림(SSE) 기능 구현

  • OrderService.patchOrderStatus() 내에서 NotificationService.sendOrderStatusNotification() 호출
  • 주문 상태 변경이 성공적으로 이뤄지면, 해당 사용자에게 SSE 알림 전송
  • 알림은 Notification 테이블에 저장되며, 이후 SSE 구독자에게 전송됨

2️⃣ SseEmitter 기반 실시간 알림 구독 API

  • /api/v1/notification/subscribe 엔드포인트 생성
  • 로그인 사용자만 접근 가능하도록 .authenticated() 설정 적용
  • 구독 성공 시 "SSE 연결 완료" 메시지 전송 (프론트 확인용)

3️⃣ AccessToken을 쿠키에 저장하여 웹에서도 사용 가능하도록 개선

  • Signin, Reissue 시 쿠키에 accessToken 저장
  • JwtAuthenticationFilter에서 Authorization 헤더 or 쿠키에서 토큰 탐색하도록 리팩토링
ResponseCookie.from("accessToken", token)
    .httpOnly(false)
    .secure(false)
    .path("/")
    .sameSite("Lax") // or "None" (크롬 이슈 대응)
    .build();

4️⃣ SSE 연결 시 401 Unauthorized 문제 해결

  • 문제 원인: 브라우저에서 토큰이 포함되지 않아 인증 실패
  • 해결 방법:
    • httpOnly(false) 설정을 통해 JS에서도 쿠키 접근 가능하게 함
    • HTML에서 fetch()로 먼저 로그인 시도 → 이후 EventSource로 연결

5️⃣ 로그아웃/회원탈퇴 시 쿠키 & Redis RefreshToken 모두 제거

  • TokenService.clearTokenForUser() 메서드로 토큰 만료 및 Redis 삭제 책임 분리