Skip to content

fix(route): 경로를 출발·도착 항목 단위로 캐시해 순서를 되돌리면 다시 요청하지 않도록 수정 - #258

Merged
minbros merged 17 commits into
fix/stomp-event-orderfrom
fix/schedule-query-keys
Nov 8, 2026
Merged

minbros merged 17 commits into
fix/stomp-event-orderfrom
fix/schedule-query-keys

Conversation

@KangShinGyu98

@KangShinGyu98 KangShinGyu98 commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

노션

변경 내용

  • #250의 최신 dev 충돌 해결을 반영하면서 도착 항목 캐시 키와 이동수단 없음·사용자 입력 시간 보존 동작을 함께 유지했습니다. 관련 테스트의 목적지 인자도 정합화했습니다.
  • 구간 경로 캐시 key를 (방, 일차, 출발 항목, 도착 항목, 이동수단)으로 바꾸고, 단건 조회에 destinationItemId를 보냅니다. 요청한 구간 = key = 응답 구간이라 순서를 되돌리면 받아 둔 경로를 그대로 씁니다.
  • 진입 batch 결과는 응답의 toItemId(서버가 계산한 도착 항목)로 저장합니다. 응답을 기다리는 사이 순서가 바뀌면 결과를 통째로 버리던 일정 지문 비교를 지웠습니다.
  • 도착 항목이 key에 들어가 필요 없어진 경로 무효화(순서 변경·추가·삭제·일차 간 이동·이동수단 변경, 본인·STOMP 모두)와 지도 선 에폭을 지웠습니다.
  • 지도 선 key와 sessionStorage key도 도착 항목 기준으로 맞췄습니다.

변경 이유

  • 두 사람이 순서를 바꿨다 되돌릴 때마다 같은 구간을 다시 요청했고, 서버가 요청 순간의 순서로 도착지를 정해 순서 변경과 겹치면 다른 구간의 거리가 캐시에 남을 수 있었습니다.
  • 백엔드 PR https://github.com/uttae/backend-server/pull/219 에 의존합니다. 백엔드 배포 전에는 서버가 destinationItemId를 무시해 지금처럼 동작합니다.

테스트

  • 충돌 해결본: 전체 테스트 213개 파일 / 1,716개 통과, lint·타입 검사·production build 통과
  • 이번 충돌 해결 후 브라우저 검증은 미실행. 비활성 일차 캐시 경합은 수정 범위 밖으로 남아 있습니다.
  • npm run lint
  • npm test
  • npm run build
  • 기존 작성자 수동 검증 기록: 로컬에서 백엔드(hotfix(join): kakaotalk 초대 입장 불가  #219 브랜치)·프론트(이 브랜치)를 띄워 화면 직접 확인

🤖 Generated with Claude Code

KangShinGyu98 and others added 7 commits November 3, 2026 23:20
- 경로 key를 (방, 일차, 출발 항목, 도착 장소, 이동수단)으로 바꾼다 — 목록·지도·batch 시딩이 다음 장소의 googlePlaceId를 넘긴다
- 순서가 바뀐 구간은 key가 달라져 옛 도착지의 거리·선을 보여 주지 않는다
- 도착 장소가 없는 구간은 조회하지 않는다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 순서 변경·장소 추가·삭제·일차 간 이동·이동수단 변경(본인·STOMP)과 일정 전체 재조회 뒤의 구간 경로 무효화를 지운다 — 바뀐 구간은 새 key로 받는다
- 구간 계산·무효화 모듈(scheduleStompRouteScope.ts)과 STOMP 경로 무효화 디바운스 삭제
- 장소 삭제는 응답으로 일차 목록에서 그 장소만 빼고, 일차 삭제 뒤의 경로 무효화도 지운다
- 지도 에폭 증가 호출 삭제 (지도 key 정리는 다음 커밋)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 지도 선 key는 (방, 일차, 출발 항목, 출발·도착 장소, 이동수단)만 쓴다 — 도착 장소가 바뀌면 key가 달라져 새 선을 그린다
- 에폭 스토어(plan-map-directions-epoch-store) 삭제
- 선의 React key도 에폭 대신 도착 장소로 구분한다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- batch가 받아 둔 구간 경로를 목록 칸(다음 장소 googlePlaceId)과 지도(지도 구간 계산)가 단건 요청 없이 쓰는지 본다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 서버가 그 순간의 순서로 다음 항목을 고르던 단건 GET에 destinationItemId를 보낸다 — 요청한 구간과 응답 구간이 항상 같다
- 경로 key·지도 선 key·sessionStorage key의 도착 값을 다음 장소의 itemId로 바꾼다
- 서버에 이 파라미터가 배포되기 전에는 서버가 무시하고 지금처럼 다음 항목으로 계산한다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- batch 응답의 toItemId(서버가 계산한 구간의 도착 항목)로 경로 key를 만든다 — 요청 때 목록에서 짐작하지 않는다
- 응답을 기다리는 사이 순서가 바뀌면 결과를 통째로 버리던 일정 지문 비교를 지운다
- 마지막 항목·항목 없음 답은 도착 항목이 없어 저장하지 않고, 그 칸이 도착 항목을 지정한 단건 조회로 받는다

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
frontend-server Ready Ready Preview Nov 8, 2026 11:30am UTC

Request Review

KangShinGyu98 and others added 8 commits November 6, 2026 17:02
- 탭마다 한 번 만드는 getTabId 추가(모듈 변수, randomUUID 없으면 getRandomValues로 v4)
- 이미 preflight를 하는 PATCH·PUT·DELETE·JSON POST에만 헤더를 붙임
- 백엔드가 이 값을 STOMP payload originTabId로 돌려줘 이 탭의 반향을 가려낼 수 있게 함

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 이벤트 originTabId가 이 탭 ID와 같을 때만 반향으로 보고 건너뜀(isOwnEcho)
- originTabId가 없는 옛 이벤트는 지금처럼 actorUserId로 판정해 배포 순서와 무관
- SCHEDULE_ITEM_UPDATED: 이 탭 반향은 건너뛰고, 다른 탭 변경은 진행 중인 조회에 합류하지 않고 다시 받음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- bookmarks 이벤트도 isOwnEcho로 판정(originTabId 같을 때만 건너뜀, 없으면 actorUserId)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- isOwnEcho는 originTabId가 이 탭 ID와 같을 때만 반향으로 판정(계정 판정 제거)
- 탭 ID를 못 만든 탭의 변경도 같은 계정의 다른 탭이 놓치지 않게 함
- SCHEDULE_ITEM_UPDATED의 본인 반향 합류(joinInFlight) 분기 제거

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- case마다 반복하던 isOwnEcho를 한 번만 둬 새 이벤트 종류에서 빠뜨리지 않게 함

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 반향은 originTabId가 이 탭이고 actorUserId도 나일 때만으로 판정
- 탭 ID는 방 멤버 모두에게 보이므로 서버가 인증으로 정한 actorUserId를 함께 봄

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 도착 항목 경로 키와 미선택 이동수단 처리 결합
- 사용자 지정 시간과 기존 요약 회귀 테스트 보존
minbros and others added 2 commits November 8, 2026 20:11
- 검증된 경로 캐시 부모 브랜치 병합
- 탭별 본인 변경 반향 처리와 시간 보존 동작 유지
fix(stomp): 같은 계정 다른 탭에도 일정·북마크 변경을 탭 ID로 구분해 반영
@sonarqubecloud

sonarqubecloud Bot commented Nov 8, 2026

Copy link
Copy Markdown

@minbros
minbros merged commit bf461b3 into fix/stomp-event-order Nov 8, 2026
3 checks passed

This branch was successfully deployed

1 active deployment
Preview — 847cccb4 Deployed Nov 8, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants