Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEAT] google analytics 고도화하여 "땅콩" 서비스에 필요한 데이터 수집 #449

Open
wants to merge 12 commits into
base: develop
Choose a base branch
from

Conversation

novice0840
Copy link
Contributor

@novice0840 novice0840 commented Dec 27, 2024

Issue Number

#430

As-Is

기존에는 google analytics가 기본 설정만 되어 있어 구체적인 사용자 데이터를 얻기 어려웠다

To-Be

google analytics를 고도화하여 우리 서비스에 필요한 구체적인 데이터를 수집하도록 변경

추가로 수집된 데이터

  • 페이지 별 체류시간 - GA에서 페이지 별 체류시간을 기본적으로 수집하고 있지만 방 번호에 따라 각각 수집되기 때문에 한 번에 보기가 어려운 상황
  • 투표 옵션 왼쪽 vs 오른쪽 뭐가 더 많이 눌리는지
  • 투표 시 확인 버튼 누르는 비율
    image
  • 게임 당 평균 참여 인원 수
    왼쪽: 게임 참여 인원 수
    오른쪽: 게임 시작 횟수
    image

그 외

  • development 모드에서는 GA 비활성화
  • 비즈니스 로직과 google analytics 로직을 쉽게 구분하기 위해 함수의 끝에 GA 표시를 추가하였음

Check List

  • 테스트가 전부 통과되었나요?
  • 모든 commit이 push 되었나요?
  • merge할 branch를 확인했나요?
  • Assignee를 지정했나요?
  • Label을 지정했나요?

Test Screenshot

(Optional) Additional Description

폴더 분리

google Analytics는 기능을 구현하는 코드가 아니기 때문에 별도의 폴더에 파일들을 모으는 것이 좋다고 판단하여
src/lib/googleAnalytics 폴더에 관련 코드들을 모아둠

🌸 Storybook 배포 주소

https://woowacourse-teams.github.io/2024-ddangkong/storybook/

@novice0840 novice0840 requested review from rbgksqkr and useon December 27, 2024 13:58
@novice0840 novice0840 self-assigned this Dec 27, 2024
@novice0840 novice0840 added ✨ feat 기능 추가 🫧 FE front end labels Dec 27, 2024
@github-actions github-actions bot added the D-2 2일 안에 리뷰 부탁드려요:) label Dec 29, 2024
Copy link
Contributor

@rbgksqkr rbgksqkr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 포메~! 체류시간이랑 버튼 클릭 여부를 GA로 추적하면 유용한 지표가 될 것 같네용
특히 게임할 때 "선택" 버튼을 누르는 횟수는 중요한 지표가 될 것 같고, 아래처럼 계산이 된다면 더 유의미한 지표가 될 것 같아요!

  • 해당 라운드에서 선택 버튼을 누르는 비율
  • 메인 페이지에 들어온 사람 중 방을 만드는 비율
  • 게임을 하는 사람 중 최종 결과까지 보는 비율


gtag('config', 'G-3BFVVPQT0Z');
if (process.env.NODE_ENV == 'production') {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🙏 제안 🙏

오호 개발도메인에선 안잡히는줄 알았는데 잡히는군요 prod 빌드해서 그런가?? prod 환경만 찍히는걸 위한 코드라면 fe-cd-dev 스크립트에서 dev로 빌드해야될 것 같아요!

index.html에서 process.env.NODE_ENV가 잘 찍히나요?? dev빌드해서 콘솔로 확인해보면 좋을 것 같아요!

Copy link
Contributor Author

@novice0840 novice0840 Dec 30, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

public 폴더에서는 환경 변수가 인식되지 않더라고요.... 그래서 분기를 어떻게 처리할까 고민하다가
window.location.origin 사용하여 배포 환경에서만 구글 애널리틱스가 활성화되도록 변경하였습니다.

if (roomId && data?.roomId && Number(roomId) !== data?.roomId) {
navigate('/', { replace: true });
}
}, []);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💭 질문 💭

useGetUserInfo가 여러번 호출되면 useEffect도 여러번 실행될 것 같은데 어떻게 생각하시나요??
처음 접속했을 때 확인하는 거라면 페이지 당 한번만 실행되어야 할 것 같아요!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

음, 그렇겠군요. 그리고 지금 생각해보니 함수의 "단일 책임 원칙"에도 맞지 않는 것 같네요.
URL과 유저 정보를 비교하는 부분을 별도의 함수로 분리하였습니다!

category: 'User Engagement',
action: 'time_spent_per_page',
label: page,
value: timeSpent / 1000,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💭 질문 💭

오호 이렇게 value를 넣으면 값이 누적되는 건가요?? 해당 이벤트는 이 value를 가져서 보내면 GA에서 이벤트값을 누적해주는 방식인가요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네, 위처럼 action을 만들고 Google Analytics에서 action 이름에 맞게 커스텀 데이터를 추가해주면 데이터가 수집이 되더라고요


const GameResultPage = () => {
useIsRoomInitial();
useGAPageTimeSpentGA('게임 결과 페이지');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🙏 제안 🙏

매칭 결과 페이지가 좋을 것 같아요!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수정했습니다!

@github-actions github-actions bot added D-1 1일 안에 리뷰 부탁드려요:) D-0 이제 그냥 머지합니다? and removed D-2 2일 안에 리뷰 부탁드려요:) D-1 1일 안에 리뷰 부탁드려요:) labels Dec 30, 2024
Copy link
Contributor

@useon useon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

포메 덕분에 더 유용하게 사용자 데이터를 수집할 수 있겠네요 초기 설정이랑 중요 데이터들을 선정해 주었네요 감사합니다 ! 몇 가지 코멘트 남겼습니다 ~ ! 수고 많으셨어요 🍀

const { data } = useQuery({
queryKey: [QUERY_KEYS.getUserInfo, roomId],
queryFn: getUserInfo,
staleTime: USER_INFO_STALE_TIME,
});

if (roomId && data?.roomId && Number(roomId) !== data?.roomId) {
navigate('/', { replace: true });
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💭 질문 💭

이제 이 코드가 삭제되어도 괜찮은건가요 ?


const useGAInitializeGA = () => {
useEffect(() => {
ReactGA.initialize('G-3BFVVPQT0Z');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🙏 제안 🙏

해당 넘버도 환경 변수로 만들어서 사용하는 것은 어떨까요? 민감 정보는 아니지만 외부에서 가짜 트래픽을 전송하여 분석 데이터를 왜곡할 수도 있다고 하네요 ?!

ReactGA.event({
category: 'User Engagement',
action: 'vote',
label: '오른쪽 버튼 클릭',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🙏 제안 🙏

왼쪽 버튼보다 첫번째 선택지 또는 왼쪽 선택지 이런 식이 더 명확하지 않을까요 ?!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
D-0 이제 그냥 머지합니다? 🫧 FE front end ✨ feat 기능 추가
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

[FEAT] google analytics 고도화하여 "땅콩" 서비스에 필요한 데이터 수집
3 participants