feat: analytics 개선 및 네이버 서치 어드바이저 등록#88
Conversation
- 의견수합 완료, 대기 페이지에 group_id (accessKey) 추가 - GA4에서 그룹별 분석이 가능하도록 개선 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Summary of ChangesHello @youngminss, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이 PR은 Google Analytics 4 (GA4)의 데이터 수집을 강화하여 그룹별 사용자 행동 분석을 더욱 정교하게 수행할 수 있도록 합니다. 기존에 Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
| useEffect(() => { | ||
| if (!isPending && capacity) { | ||
| if (!isPending && capacity && accessKey) { | ||
| trackViewPage({ | ||
| page_id: PAGE_ID, | ||
| group_id: accessKey, | ||
| submit_progress: Math.round( | ||
| (capacity.currentCount / capacity.maxCount) * 100, | ||
| ), | ||
| }); | ||
| } | ||
| }, [capacity, isPending]); | ||
| }, [capacity, isPending, accessKey]); |
There was a problem hiding this comment.
isPending이 true일 경우 컴포넌트 상단에서 redirect가 발생하므로, useEffect가 실행되는 시점에는 항상 isPending이 false입니다. 따라서 useEffect 내부의 !isPending 조건과 의존성 배열의 isPending은 제거하여 코드를 간소화할 수 있습니다.
| useEffect(() => { | |
| if (!isPending && capacity) { | |
| if (!isPending && capacity && accessKey) { | |
| trackViewPage({ | |
| page_id: PAGE_ID, | |
| group_id: accessKey, | |
| submit_progress: Math.round( | |
| (capacity.currentCount / capacity.maxCount) * 100, | |
| ), | |
| }); | |
| } | |
| }, [capacity, isPending]); | |
| }, [capacity, isPending, accessKey]); | |
| useEffect(() => { | |
| if (capacity && accessKey) { | |
| trackViewPage({ | |
| page_id: PAGE_ID, | |
| group_id: accessKey, | |
| submit_progress: Math.round( | |
| (capacity.currentCount / capacity.maxCount) * 100, | |
| ), | |
| }); | |
| } | |
| }, [capacity, accessKey]); |
| useEffect(() => { | ||
| if (!isComplete && capacity) { | ||
| if (!isComplete && capacity && accessKey) { | ||
| const progress = Math.round( | ||
| (capacity.currentCount / capacity.maxCount) * 100, | ||
| ); | ||
|
|
||
| trackViewPage({ | ||
| page_id: PAGE_ID, | ||
| group_id: accessKey, | ||
| submit_progress: progress, | ||
| }); | ||
| } | ||
| }, [capacity, isComplete]); | ||
| }, [capacity, isComplete, accessKey]); |
There was a problem hiding this comment.
isComplete가 true일 경우 컴포넌트 상단에서 redirect가 발생하므로, useEffect가 실행되는 시점에는 항상 isComplete가 false입니다. 따라서 useEffect 내부의 !isComplete 조건과 의존성 배열의 isComplete는 제거하여 코드를 간소화할 수 있습니다.
| useEffect(() => { | |
| if (!isComplete && capacity) { | |
| if (!isComplete && capacity && accessKey) { | |
| const progress = Math.round( | |
| (capacity.currentCount / capacity.maxCount) * 100, | |
| ); | |
| trackViewPage({ | |
| page_id: PAGE_ID, | |
| group_id: accessKey, | |
| submit_progress: progress, | |
| }); | |
| } | |
| }, [capacity, isComplete]); | |
| }, [capacity, isComplete, accessKey]); | |
| useEffect(() => { | |
| if (capacity && accessKey) { | |
| const progress = Math.round( | |
| (capacity.currentCount / capacity.maxCount) * 100, | |
| ); | |
| trackViewPage({ | |
| page_id: PAGE_ID, | |
| group_id: accessKey, | |
| submit_progress: progress, | |
| }); | |
| } | |
| }, [capacity, accessKey]); |
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
| description: "다인원을 위한 맛집 추천 서비스", | ||
| verification: { | ||
| other: { | ||
| "naver-site-verification": |
There was a problem hiding this comment.
요거까지는 환경변수에 추가하지 않아도 되겠지?
There was a problem hiding this comment.
네, 환경변수 추가 없이 현재 방식대로 진행해도 됩니다.
이유:
- 보안상 민감하지 않음: 이 verification 코드는 어차피 HTML meta 태그로 공개되는 값이라 숨길 필요가 없습니다
- 변경 가능성이 낮음: 네이버 서치 어드바이저에 한 번 등록하면 변경될 일이 거의 없습니다
- 환경별 분리 불필요: 개발/스테이징 환경에서 별도의 네이버 사이트를 등록하지 않으므로 환경변수로 분리할 실익이 없습니다
일반적으로 이런 site verification 코드들(Google, Naver 등)은 하드코딩하는 것이 관례입니다.
|
|
||
| useEffect(() => { | ||
| if (!isPending && capacity) { | ||
| if (!isPending && capacity && accessKey) { |
There was a problem hiding this comment.
로직상 크진 않은데 이 세 개의 조건을 묶어서 isFlag 변수로 정의하면 어떨까?
There was a problem hiding this comment.
gemini-code-assist의 리뷰를 수용하면서 조건이 3개에서 2개로 줄었습니다.
변경 전 (리뷰 당시):
if (!isPending && capacity && accessKey) {변경 후 (현재):
if (capacity && accessKey) {isPending이 true일 경우 상단에서 redirect가 발생하므로 useEffect 실행 시점에는 항상 false라서 조건을 제거했습니다.
현재 2개 조건(capacity && accessKey)은 단순한 null/undefined 체크라 별도 변수로 추출하지 않아도 가독성에 문제가 없을 것 같아서, 이대로 유지하려고 합니다!
There was a problem hiding this comment.
설명해주신 대로 isPending 조건은 redirect 로직으로 인해 useEffect 실행 시점에는 항상 false가 되므로 제거하는 것이 올바른 판단입니다. 또한, capacity && accessKey 두 조건은 명확하여 별도의 변수로 추출하지 않아도 가독성에 문제가 없다는 의견에 동의합니다.
- CompleteViewContainer: isPending 조건 제거 (redirect로 인해 항상 false) - PendingViewContainer: isComplete 조건 제거 (redirect로 인해 항상 false) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
## 1.0.0 (2026-02-16) ### Features * [#70](#70) ([#72](#72)) ([b676e0e](b676e0e)) * [QA] 모임 생성 완료, 결과페이지 페이지 UI 개선 ([#66](#66)) ([f10225d](f10225d)) * [QA] 서비스 전체 배경색 및 Layout Root 그림자 효과 적용 ([#59](#59)) ([384b56f](384b56f)) * analytics 개선 및 네이버 서치 어드바이저 등록 ([#88](#88)) ([4372aa5](4372aa5)) * api client 모듈 생성 ([#37](#37)) ([a37b0a9](a37b0a9)), closes [#38](#38) [#39](#39) [#40](#40) [#41](#41) * Button 컴포넌트 추가 ([#11](#11)) ([83b7607](83b7607)) * Chip Component 추가 ([#9](#9)) ([e9d8b8f](e9d8b8f)) * Color theme 초기화 ([#2](#2)) ([97f1dcc](97f1dcc)) * DotsLoader 컴포넌트 추가 ([#48](#48)) ([cfe4582](cfe4582)), closes [#49](#49) * GA4 이벤트 트래킹 통합 ([#70](#70)) ([0c1b9fa](0c1b9fa)) * GTM(Google Tag Manager) 통합을 위한 Analytics 컴포넌트 추가 ([#57](#57)) ([87a6ded](87a6ded)) * IconBase 컴포넌트 및 아이콘 컴포넌트들 구축 ([#13](#13)) ([8557b75](8557b75)), closes [#FFCD00](https://github.com/Nexters/yogieat/issues/FFCD00) [#FFAD00](https://github.com/Nexters/yogieat/issues/FFAD00) [#15](#15) [#ff5a3c](https://github.com/Nexters/yogieat/issues/ff5a3c) * InputField 컴포넌트 추가 ([#16](#16)) ([99b8aa2](99b8aa2)) * Landing / Opinion Form 페이지 분리 ([#61](#61)) ([0f11e71](0f11e71)) * Layout 컴포넌트 추가 ([#10](#10)) ([9efce6f](9efce6f)) * Semantic Color Token 추가 ([#19](#19)) ([fcaedaf](fcaedaf)) * Spacing utility 클래스 초기화 ([#8](#8)) ([2e38d7a](2e38d7a)) * Tag 컴포넌트 추가 ([#20](#20)) ([f69dd05](f69dd05)) * Toast 컴포넌트 추가 ([#21](#21)) ([76e84b0](76e84b0)) * 모임 생성 완료 페이지 UI 리뉴얼 ([#89](#89)) ([17a3fc1](17a3fc1)) * 모임 생성 퍼널 Step 1 (인원 선택) 구현 ([#23](#23)) ([7fc01a1](7fc01a1)), closes [#24](#24) [#1f2933](https://github.com/Nexters/yogieat/issues/1f2933) [#ff5a3c](https://github.com/Nexters/yogieat/issues/ff5a3c) [#25](#25) [#26](#26) [#27](#27) [#28](#28) [#29](#29) [#30](#30) [#31](#31) [#32](#32) [#34](#34) * 프로젝트 기초 세팅 진행 ([aa0ec20](aa0ec20)) * 프로젝트 폴더 구조 반영 ([e54962d](e54962d)) ### Bug Fixes * 1순위를 1개라도 선택했다면 바로 CTA 가 활성화 되도록 수정 ([#60](#60)) ([e5758b4](e5758b4)) * 1차 MVP 배포 이전 최종 QA 항목 반영 ([#58](#58)) ([6574231](6574231)) * Button/Chip type 속성 추가 및 의견 수렴 UX 개선 ([#50](#50)) ([7e86e4a](7e86e4a)), closes [#51](#51) [#52](#52) [#53](#53) [#54](#54) [#55](#55) [#56](#56) * cat 에서 echo 로 env.production 파일을 생성하도록 수정 ([f15307d](f15307d)) * CI/CD health check 타이밍 개선 및 수동 배포 기능 추가 ([54fd2b8](54fd2b8)) * Docker build-args로 환경 변수 전달 방식 변경 ([#77](#77)) ([e5fa0b9](e5fa0b9)) * Docker 이미지 강제 pull 및 컨테이너 재생성 ([#79](#79)) ([c253ec1](c253ec1)) * Health check 전략 개선 및 curl 기반으로 변경 ([765d3da](765d3da)) * nginx http2 deprecated 경고 해결 ([2fd9c75](2fd9c75)) * PendingView 내에서 ShareButton 을 렌더링 하지 않도록 수정 ([7bc3e12](7bc3e12)) * 결과 페이지 맛집 이미지 기본 placeholder, 공유하기 toast 미노출 ([#68](#68)) ([3c80844](3c80844)) * 동시 배포 방지를 위한 concurrency 설정 추가 ([e9bfd52](e9bfd52)) * 모임 생성 퍼널 필드 상태 초기화 버그 수정 ([#64](#64)) ([3934066](3934066)), closes [#65](#65) * 모임 생성 폼 필드명 변경 (meetingDate → scheduledDate, location → region) ([#35](#35)) ([e90beed](e90beed)) * 배포 워크플로우에 GA4 환경 변수 추가 ([#73](#73)) ([835ae1f](835ae1f)) * 의견 수렴 페이지 내 UI 수정 및 인터렉션 개선 ([#36](#36)) ([a74f7da](a74f7da)) * 의견 수합 Form Capacity 폴링 제거 및 ErrorCode 타입 시스템 추가 ([#67](#67)) ([d55dba1](d55dba1)) * 인원 수 선택 Grid 및 의견 수렴 QA 수정 사항 반영 ([f01626e](f01626e)) * 테스트 용으로 추가했던 페이지 제거 및 icons 폴더 추가 ([4116025](4116025)) ### Code Refactoring * Button 컴포넌트 스펙을 Figma 명세에 맞춰 수정 ([#14](#14)) ([2e27f17](2e27f17)) ### Build System * Docker 빌드 시 NEXT_PUBLIC 환경변수 주입 프로세스 추가 ([#47](#47)) ([88ba163](88ba163)) ### Documentation * 프로젝트 개발 가이드 문서 추가 ([#84](#84)) ([4313145](4313145))
🎯 PR 제목
feat: analytics 개선 및 네이버 서치 어드바이저 등록
📑 작업 상세 내역
Analytics 개선
의견수합 완료 페이지 (CompleteViewContainer.tsx)
의견수합 대기 페이지 (PendingViewContainer.tsx)
SEO - 네이버 서치 어드바이저 등록
🙏 리뷰 요청 사항
별도로 리뷰 드릴 사항은 없습니다.
📃 참고 자료