개발 slecs

재방문 사용자가 체감하는 진행 현황을 시각화하기

목차

이번에 리테인션을 개선하기 위해 재방문 사용자를 감지하는 hook을 만들고, 사용자가 보유한 시간을 시각적으로 표시하는 배너 기능을 추가했다. 단순해 보이지만 이 작업을 통해 사용자 경험과 데이터 흐름을 어떻게 연결하는지 다시 생각해볼 수 있었다.

왜 재방문 감지가 필요했나

서비스의 지속성은 신규 사용자 유입만으로는 불가능하다. 한 번 방문했던 사용자가 다시 돌아오는 것, 즉 리테인션이 얼마나 중요한지는 이미 많은 데이터로 증명되어 있다. 문제는 사용자가 "이 서비스를 계속 써야 하는 이유"를 명확하게 느껴야 한다는 점이다.

내가 이번에 추가한 return-visitor hook은 간단한 논리지만 의도가 명확하다:

  • 첫 방문 vs 재방문: 같은 서비스를 봐도 심리 상태가 다르다
  • 맥락 전달: 재방문자에게는 자신의 이전 진행 현황을 즉시 보여줄 필요가 있다
  • 참여도 강화: 내가 이 서비스에서 뭔가 축적하고 있다는 증거를 제공

이런 감정 신호는 코드로 직접 구현되지 않지만, UX 설계에는 핵심이다. 재방문자를 인식했다는 것 자체가 이미 "당신을 기억하고 있다"는 메시지를 전하는 것이다.

owned-seconds 배너의 역할

배너는 단순한 UI가 아니다. 사용자가 현재 보유한 시간(초 단위)을 실시간으로 표시함으로써:

  1. 진행도 시각화: 숫자로 된 진행 현황을 한눈에 파악
  2. 심리적 소유감: "내가 이 서비스에서 얼마나 많이 축적했는가"를 경험
  3. 돌아올 이유: 그 숫자가 내일은 더 클 것이라는 기대감 유발

이런 기능은 게임에서 경험치나 보상 시스템이 하는 역할과 비슷하다. 사용자는 추상적인 "서비스 가치"보다 눈에 보이는 개인의 성장을 더 강하게 느낀다.

파일별 변경의 의미

파일 역할 이번 변경의 의미
src/lib/useMySeconds.ts 사용자의 owned seconds 데이터를 관리하는 커스텀 hook 배너가 사용할 시간 데이터의 출처. 정보의 중앙화
src/app/page.tsx 랜딩/홈 페이지 재방문자에게 배너를 노출하는 주요 위치. 상태 감지 후 렌더링 로직 추가
src/app/s/[epoch]/SecondPageClient.tsx epoch별 세부 페이지 (클라이언트 컴포넌트) 특정 시간대 상세 정보 표시. hook 연결
src/app/globals.css 전역 스타일 배너의 시각적 표현 (레이아웃, 애니메이션, 반응형 스타일)

특히 useMySeconds hook을 별도 모듈로 분리한 것이 중요하다. 나중에 여러 페이지에서 이 데이터가 필요할 때, 로직을 중복으로 작성하지 않고 hook 하나만 재사용할 수 있기 때문이다.

재방문 감지의 기술적 고려

hook 구조는 대대로 이렇게 흘러간다:

return-visitor 감지 (localStorage / sessionStorage / 쿠키)
↓
첫 방문인지 확인
↓
재방문이면  owned-seconds 데이터 로드
↓
배너 표시 여부 결정
↓
useMySeconds hook 으로 숫자 업데이트

이 과정에서 주의할 점:

  • 부팅 시점: 클라이언트 렌더링이 먼저 실행되므로, 서버/클라이언트 hydration 불일치 방지 필요
  • 캐싱 전략: 사용자 데이터는 자주 변할 수 있으므로 적절한 캐시 유효성 판단 필요
  • 성능: 매 방문마다 hook이 실행되는데, 불필요한 API 호출이나 렌더링 다시 하기를 방지

이 작업을 통해 배운 점

처음엔 "배너 하나 추가하는 거 아니야?"라고 생각했는데, 막상 구현하다 보니 여러 개념이 얽혀 있었다:

  • 리테인션과 UX의 연결고리: 데이터 설계가 사용자의 행동에 직접 영향을 미친다
  • 재사용 가능한 구조: 한 번 hook을 잘 설계하면, 나중에 다른 페이지나 기능에서도 쉽게 확장할 수 있다
  • 스타일과 기능의 분리: 배너의 스타일(CSS)과 데이터 로직(hook)을 분리함으로써 유지보수가 훨씬 쉬워진다

팀원들과 코드리뷰를 하면서 "왜 이런 구조인가?"라는 질문들이 나왔고, 그 과정에서 내 의도도 더 명확하게 다듬을 수 있었다. 작은 기능 하나가 리테인션이라는 큰 목표와 어떻게 연결되는지 함께 이해할 수 있었던 좋은 경험이었다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.