노현근Frontend Engineer · Seoul
09 · 개인 사이드 프로젝트 · 프론트엔드·앱 개발

1Day 1Streak

매일 한 가지를 기록하고 스트릭을 이어 가는 습관·챌린지 서비스입니다. Flutter 앱, Next.js 웹, React 디자인 시스템을 나누어 iOS·Android·Web을 함께 운영합니다.

기간2025.03 - 진행중
역할프론트엔드·앱 개발
소속개인 사이드 프로젝트
분류App · Web
스택
  • Flutter
  • Dart
  • Riverpod
  • Next.js
  • React
  • TypeScript
  • TanStack Query
  • Tailwind CSS
  • Storybook
  • Radix UI
  • FCM
  • WidgetKit

배경

습관 앱은 기능이 많은 것보다 하루의 기록, 연속성, 실패 복구, 관계, 보상이 하나의 흐름으로 연결되는 것이 중요했습니다. 일상에서 매일 쓸 수 있는 제품을 만들고, 앱스토어·플레이스토어·웹 배포까지 제품의 전 주기를 직접 운영하고자 시작했습니다.

문제

앱·웹·디자인 시스템을 별도 저장소로 운영하면서도 URL, API, 시각 언어가 갈라지지 않아야 했습니다. 또 계정 전환 후 provider·STOMP 세션·캐시가 남는 상태 누수와 푸시 알림 종류가 늘어날수록 커지는 클라이언트 분기를 해결해야 했습니다.

접근

  • 앱·웹·디자인 시스템의 저장소 경계를 나누고 같은 API·URL 계약으로 연결
  • 2026년 8월 앱의 웹뷰 셸을 제거하고 핵심 경로를 Flutter 네이티브 화면으로 전환
  • 챌린지, 목표 포함 일지, 스트릭·프리즈, 레벨·보상, 친구·투표·채팅·알림 기능 구현
  • 푸시 payload에 앱·웹 공통 URL을 담아 알림 종류가 늘어나도 클라이언트 분기를 최소화
  • 계정 전환 시 provider·STOMP 세션·캐시를 함께 초기화하는 사용자 스코프 규칙 수립
  • Storybook으로 검증하고 npm으로 배포하는 공용 디자인 시스템 구축
  • 온보딩·가이드 모션을 실제 제품 컴포넌트로 구성하고 동작 줄이기 환경을 지원

성과

  • iOS·Android·Web을 하나의 제품 규칙으로 운영
  • 앱 스토어 배포, flavor, 빌드 번호, 회귀 테스트까지 전 주기를 직접 관리

돌아보며

코드 공유보다 중요한 것은 플랫폼 사이에 경로·토큰·API 계약을 공유하는 일이었습니다. 계정 전환 상태 누수를 일회성 버그 수정으로 끝내지 않고 초기화 규칙과 테스트로 남기며, 오래 운영할 수 있는 제품 구조를 배웠습니다.

함께 일하기 좋은 구조와
오래 쓰이는 제품을 만듭니다.

제품과 팀의 문제를 함께 풀 기회가 있다면 편하게 연락 주세요.

© 2026 노현근Seoul, KR