Skip to content

chae1125/kkukmoa

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

꾹모아 (KkukMoa) — 소상공인 리워드 & 금액권 플랫폼

소상공인 매장에서 사용할 수 있는 모바일 금액권 + 자동 스탬프 적립 기반 고객 리워드 서비스

kkukmoa_poster


💻 FrontEnd Developer

김은하 이채영 정윤철 정주연
김은하 이채영 정윤철 정주연
성신여대 서울여대 광운대 광운대
rladmsgki chae1125 onebone juyeonnnn

✨ 핵심 기능

  • 디지털 금액권 구매·사용: 원하는 금액의 e-금액권을 구매하고 제휴 매장에서 자유롭게 사용
  • 자동 스탬프 적립: 결제 내역 연동으로 결제 시 자동으로 스탬프 적립
  • 맞춤형 서비스 쿠폰: 스탬프 10개 누적 시 자동 발급 (혜택은 점주가 직접 설정)
  • QR 기반 적립/선물: 카드 결제도 QR 인식으로 적립, 금액권 선물 가능

🧭 목차


🗂 프로젝트 구조

📂 src
src
├─ api/                      # 서버 통신 모듈
│   ├─ client.ts
│   ├─ images.ts
│   ├─ kakaoLogin.ts
│   ├─ like.ts
│   ├─ localAuth.ts
│   ├─ logout.ts
│   ├─ owner.ts
│   ├─ reissueTokens.ts
│   ├─ review.ts
│   ├─ shop.ts
│   ├─ stamp.ts
│   ├─ store.ts
│   └─ voucherApi.ts
│
├─ assets/                   # 폰트 & 이미지 리소스
│   ├─ fonts/ Pretendard-*.ttf
│   ├─ images/ (아이콘, 배너, 로고, 샘플 이미지 등)
│   └─ images/logo/ (앱 로고, 네이버 로고)
│
├─ design/
│   ├─ colors.ts              # 전역 색상 정의
│   └─ component/             # 공용 컴포넌트
│       ├─ Header.tsx
│       ├─ KkButton.tsx
│       ├─ ...
│
├─ hooks/                     # 커스텀 훅
│   ├─ useAuth.ts
│   ├─ useLikeStore.ts
│   ├─ ...
│
├─ screens/                   # 페이지 단위 UI
│   ├─ auth/                  # 로그인/회원가입
│   ├─ GiftCard/
│   ├─ main/
│   ├─ myCoupon/
│   ├─ myGiftCard/
│   ├─ mypage/
│   ├─ owner/                 # 점주 페이지
│   ├─ ownerJoinShop/
│   ├─ qrcode/
│   ├─ search/
│   ├─ stamp/
│   └─ Store/                 # 지도 및 매장 관련 화면 & 컴포넌트
│       ├─ CategoryTabs/
│       ├─ KakaoMap/
│       ├─ MapFloatingButtons/
│       ├─ PickLocationScreen/
│       ├─ ReviewCard/
│       ├─ Reviews/
│       ├─ SearchBar/
│       ├─ StoreBottomSheet/
│       ├─ StoreCard/
│       ├─ StoreDetailScreen/
│       └─ StoreScreen/
│
├─ store/                     # Zustand 상태 관리
│   ├─ useAuthStore.ts
│   ├─ useOwnerJoinStore.ts
│   └─ useShopStore.ts
│
├─ types/                     # 전역 타입 정의
│   ├─ auth.ts
│   ├─ kakao.ts
│   ├─ review.ts
│   ├─ stamp.ts
│   ├─ store.ts
│   └─ voucher.ts
│
└─ utils/                     # 유틸 함수
    ├─ location.ts
    └─ tokenStorage.ts
🧪 __tests__
__tests__
└─ App.test.tsx                # 앱 초기 진입 테스트

💎 기술 스택 & 선정 이유

영역 기술 선정 이유
Language TypeScript 정적 타입 시스템으로 런타임 에러 감소, 협업 시 안정성↑
Framework React Native 웹 기술 기반으로 네이티브 앱과 유사한 경험 구현 가능
Dev Platform Expo 빠른 빌드 & 디버깅, OTA 업데이트
Routing Expo Router 파일 기반 라우팅, 네비게이션 단순화
State Mgmt Zustand 가볍고 직관적인 전역 상태 관리
Server State React Query 캐싱/리페치 최적화, 서버 상태 관리
UI @gorhom/bottom-sheet, Reanimated 네이티브급 제스처/애니메이션
HTTP Axios 인터셉터 기반 토큰/에러 처리
Styling StyleSheet 컴포넌트 단위 스타일 관리
품질 ESLint + Prettier (Airbnb) 코드 스타일 일관성 유지
협업 Husky + Git Hooks 커밋 전 린트/포맷 자동 실행

⚡ 시작하기 (Getting Started)

# 1. 의존성 설치
npm install

# 2. Android 실행
npx expo run:android

🤝 개발 워크플로우

  • 브랜치 전략: Git Flow (main, develop, feature/*, release/*, hotfix/*)
  • 커밋 컨벤션: type: summary → feat, fix, docs, style, refactor, test, chore
  • PR 규칙: 제목 [요약] (#이슈번호), 스크린샷 포함, 최소 2인 리뷰
  • 자동화: Husky + Lint/Format, GitHub Actions → Discord 알림

🧩 트러블슈팅


1) Expo ↔ RN 버전 불일치

상황
Expo SDK와 React Native 버전이 맞지 않아 빌드/실행 시 오류 발생

원인
Expo SDK와 RN의 버전 매트릭스 불일치

해결
Expo 공식 문서에서 버전 매트릭스 확인 후 동일하게 맞춤
node_modules 및 캐시 삭제 후 재설치


2) WebView 버전 충돌 (결제 SDK ↔ 지도)

상황
@tosspayments/widget-sdk-react-native가 요구하는 react-native-webview 버전과
카카오 지도에서 요구하는 버전이 달라 빌드 충돌 발생

원인
두 라이브러리가 서로 다른 WebView 메이저/마이너 버전을 강제함

해결
결제 기능은 백엔드에서 제공하는 별도 결제 페이지
인앱 브라우저 또는 외부 브라우저로 열어 처리하도록 변경
→ 지도는 기존 WebView 버전 유지, 결제는 앱 업데이트 없이 백엔드에서 대응 가능


3) @gorhom/bottom-sheet 흰 화면

상황
@gorhom/bottom-sheet 적용 후 앱 실행 시 흰 화면 표시

원인
Reanimated/Babel 설정 누락 또는 초기화 순서 문제

해결
Babel 플러그인 순서 수정(react-native-reanimated/plugin 마지막에 위치)
GestureHandlerRootView 적용
최소 재현 코드로 테스트

About

UMC 8기 소상공인을 위한 디지털 리워드 플랫폼 "꾹모아"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 98.3%
  • Kotlin 1.2%
  • Other 0.5%