Skip to content

[Release v2.3.0] Main <- Dev#254

Merged
soojjung merged 10 commits into
mainfrom
dev
May 21, 2026
Merged

[Release v2.3.0] Main <- Dev#254
soojjung merged 10 commits into
mainfrom
dev

Conversation

@soojjung

Copy link
Copy Markdown
Contributor

변경 내역

🆕 신규

🛠 개선

🔧 인프라

QA 포커스

  1. 커뮤니티 게시판 — 신규 surface area라 전 기능 회귀 테스트 필요
  2. 지도 클러스터 — 줌 레벨별 클러스터/마커 전환, 클러스터 클릭 시 필터링
  3. 내가 제보한 매장 — 좋아요순 정렬 동작 (BE 배포 후)
  4. 매장 수정 제안/신고 — 사유 목록 API 로드 (BE 배포 후)
  5. 모달 UX — 차단/해제/리뷰 신고/사용자 신고/매장 신고 5종 모두 라벨 유지 확인
  6. GA4 — Realtime에서 페이지뷰 + UTM 출처 표시 확인

🚨 배포 주의

  • BE PR(좋아요순 정렬, 수정/신고 사유 API) 선배포 필수

🤖 Generated with Claude Code

eastVirusDa and others added 10 commits April 12, 2026 13:50
* feat: 커뮤니티 게시판 기능 구현

- Footer 찜한업체 → 커뮤니티(/community)로 변경
- 마이페이지 통계 카드 추가 (관심있는 매장/제보한 매장/작성한 리뷰)
- 커뮤니티 게시글 목록 페이지 (cursor 기반 무한스크롤, 카테고리 탭)
- 게시글 작성 페이지 (주제 드롭다운, 이미지 업로드)
- 게시글 상세 페이지 (댓글/대댓글, 좋아요, 삭제)
- 게시글/댓글/대댓글 좋아요 토글 (낙관적 업데이트)
- 게시글/댓글/대댓글 삭제 기능

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: 커뮤니티 기능 버그 수정 및 접근성·안정성 개선

- 댓글 좋아요 onError에서 전체 스냅샷 복원 대신 해당 댓글만 선택적 롤백
- 익명 댓글 답글 시 실제 닉네임 노출 방지
- 게시글 삭제 후 router.back() 대신 router.replace("/community")로 결정적 이동
- 게시글 작성 페이지 blob URL 언마운트 시 해제 처리
- 이미지 업로드 Promise.all → Promise.allSettled로 부분 실패 허용
- 마이페이지 fo조nt-semibold 오타 수정
- PostItem 루트 div를 button으로 변경하여 키보드 접근성 확보

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

* fix: 댓글 입력 영역 post 미로드 시 숨김 및 게시글 작성 후 결정적 이동

- handleSubmitComment에 !post 가드 추가하여 데이터 미로드 시 제출 방지
- 댓글 입력 바를 post 존재 시에만 렌더링하도록 조건부 처리
- 게시글 작성 완료 후 router.back() → router.replace("/community")로 변경

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

* fix: 댓글 삭제 시 해당 댓글의 replyTarget 초기화

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

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: soojjung <89066676+soojjung@users.noreply.github.com>
Dev <- Main (핫픽스 싱크 맞추기)
* Revert "hotfix: 서비스 점검 알림 배너 추가 및 기본 지도 중심 설정 (#244)"

This reverts commit 4b2dbba.

* feat: 지도 축소 시 구별 가게 클러스터 표시 및 클릭 필터링 구현

- GET /api/shops/districts API 연동 (React Query 훅)
- 구/시 실제 중심 좌표 매핑으로 클러스터 마커 겹침 방지
- 클러스터 클릭 시 해당 구 가게만 필터링 (region2DepthName 기반)
- 클러스터 모드에서 바텀시트/재검색 버튼 숨김 처리

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

* fix: 클러스터 오버레이 XSS 방지 및 접근성 개선

- innerHTML 대신 createElement/textContent로 DOM 생성 (XSS 방지)
- role="button", tabIndex, keyboard handler, aria-label 추가 (접근성)
- BE 배포 완료에 따른 region2DepthName 필터 fallback 제거

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: 구별 클러스터 UI 개선 및 줌아웃 시 근접 클러스터 병합 구현

- 클러스터 UI를 말풍선에서 빨간 동그라미 + 숫자로 변경
- 줌 레벨 ≥ 9에서 가까운 구별 클러스터를 거리 기반으로 병합
- 줌 레벨이 높아질수록 병합 반경 확대

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

* fix: 줌 변경 시 지도 중심이 강남으로 이동되는 문제 수정

centerUpdateTrigger 변경 시에만 setCenter/setLevel을 호출하도록 변경하여
사용자의 줌/드래그 조작 시 중심 좌표가 강제 이동되지 않도록 수정

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

* fix: 클러스터 마커 큰 숫자 오버플로 방지 및 0 나누기 가드

- shopCount 1000 이상 시 "999+" 축약 표시
- 자릿수에 따라 원 너비 가변 (pill 형태)
- mergeNearbyClusters에서 totalCount 0일 때 group.length 폴백

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- axios ^1.7.9 → 1.15.2 (정확한 버전 고정)
- 2026.03 공급망 공격 악성 버전(1.14.1, 0.30.4) 방지
- daily-learnings 문서 업데이트

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- ShopSuggestModal: GET /api/shops/suggest-reasons 사용, 하드코딩 배열 제거
- ShopReportModal: GET /api/reports/reasons에서 SHOP_REPORT 그룹 필터해 사용
- ShopReportReason union을 백엔드 SHOP_REPORT_* 값으로 업데이트
- ReportTargetType "SHOP" → "SHOP_REPORT"로 정렬 (백엔드 enum과 일치)
- useSuggestReasons, useReportReasons React Query 훅 추가

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
드롭다운 옵션을 "오래된순"에서 "좋아요순"으로 교체하고, 클라이언트 정렬 로직을
제거해 백엔드의 sortBy 쿼리 파라미터로 정렬을 위임. 드롭다운 열림 상태에 따라
셰브론을 위/아래로 토글.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
App Router의 클라이언트 사이드 라우트 변경 시 page_view가 발화되지 않아
초기 진입 1회만 카운트되던 문제를 수정. gtag 초기화 시 send_page_view를
false로 설정해 자동 초기 페이지뷰를 끄고, providers.tsx에서 pathname 변경을
감지해 수동으로 pageview를 호출. UTM 파라미터는 gtag.js가 세션 시작 시
자동 캡처하므로 별도 처리 없이 모든 후속 이벤트에 출처가 귀속됨.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
차단/차단 해제/리뷰 신고/사용자 신고/매장 신고 모달에서 확인 버튼이
로딩 중에 "차단 중...", "해제 중...", "신고 접수 중..." 텍스트로 바뀌어
사용자에게 깜빡임처럼 보이던 문제를 수정. 라벨은 고정하되 disabled
처리로 중복 클릭은 그대로 방지.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented May 21, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
gotcha Ready Ready Preview, Comment May 21, 2026 7:12am

@coderabbitai

coderabbitai Bot commented May 21, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: daf88bb5-d65d-47e8-ba74-094dfb040041

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@soojjung soojjung self-assigned this May 21, 2026
@soojjung soojjung merged commit b365584 into main May 21, 2026
3 checks passed
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.

3 participants