2025 . 오은

repo

여행 소모임 사이트

2024.07.16 ~ 2024.10.16

팀Next.jsRealtime
detail image
detail image
detail image
detail image
detail image

🗝️ 주요 기능 및 특징

  • - 인증, 인가
  • - 게시물 CRUD
  • - 좋아요, 찜하기, 참여하기, 나가기 기능
  • - 무한 스크롤, 페이지네이션 기능
  • - 게시물 검색 기능
  • - 실시간 채팅 기능
  • - 실시간 알림 기능

🤔 기술적 의사결정

  • Pre-Fetching
  • Next.js 의 서버 컴포넌트에서 Prefetch Query 를 적극적으로 활용하여 클라이언트 컴포넌트에서는 초기 데이터를 가지고 실행할 수 있게 하였습니다.

  • Supabase Realtime
  • 알림 및 실시간 채팅 기능을 구현하기 위해 Supabase 의 Realtime을 활용하였습니다.

  • Funnel 패턴
  • 모바일 퍼스트 UI 에 맞추어 Funnel 패턴을 도입하여 보다 매끄러운 사용자 경험을 제공했습니다.

💥 트러블 슈팅

  • PWA
  • Android, Chrome에서 PWA를 구현했으나 iOS에서는 beforeInstallPrompt 이벤트 사용이 불가했습니다. 설치 유도로만 가능하다는 것을 확인하고, 최종 스펙에서 PWA 지원을 제외했습니다. 하지만 Next.js에서 PWA를 구현하는 방법을 습득하고 적용할 수 있었습니다.

  • 무한스크롤과 페이지네이션
  • 디자인 상 모바일에선 무한스크롤, 데스크탑에서는 페이지네이션으로 요구사항이 상이했습니다. width 768px을 기준으로 각각 적용하였고, 이때 useInfiniteQuery를 사용하여 하나의 쿼리로 처리하였습니다. 디자인 요구사항을 정확히 만족시키고, 무한스크롤과 페이지네이션을 동시에 구현하는 방법을 습득하였습니다.

  • 아토믹 디자인 패턴 적용
  • Private 폴더로 컴포넌트를 관리했으나 규모가 커지면서 코드 중복 발생 및 컴포넌트 탐색이 어려워졌습니다. 이에 아토믹 패턴을 도입하였고, Atoms, Molecules, Organisms로 컴포넌트를 분류했습니다. 코드 중복이 감소하고 재사용성이 향상되었으며, 구조가 명확해져 유지 보수가 용이해졌습니다.

  • 실시간 알림 구현
  • DB의 변화를 즉시 반영하여 알림을 사용자 인터페이스에 표시하는 구조를 설계해야 했습니다. 커스텀 훅을 사용하여 훅 내부의 useEffect에서만 postgres-changes를 구독 사용하여 상태 관리를 격리 및 중앙화 하였습니다. 결과적으로 구조가 단순화되어, 알림이 필요한 컴포넌트에서 훅 호출만으로 사용함으로서 재사용성과 확장성이 강화되었습니다.