Skip to content

Latest commit

ย 

History

History
115 lines (99 loc) ยท 6.05 KB

File metadata and controls

115 lines (99 loc) ยท 6.05 KB

PayCheck-mobile

PayCheck ์›น ํ”„๋กœ์ ํŠธ(payCheck-frontend)๋ฅผ React Native(Expo)๋กœ ๋ชจ๋ฐ”์ผ ๋ณ€ํ™˜ํ•˜๋Š” ํ”„๋กœ์ ํŠธ

๊ธฐ์ˆ  ์Šคํƒ

  • ํ”„๋ ˆ์ž„์›Œํฌ: Expo ~54.0.33
  • ์–ธ์–ด: TypeScript ~5.9.2
  • React: 19.1.0
  • React Native: 0.81.5
  • ๋„ค๋น„๊ฒŒ์ด์…˜: React Navigation
  • ์ƒํƒœ๊ด€๋ฆฌ: Zustand + persist ๋ฏธ๋“ค์›จ์–ด
  • HTTP ํด๋ผ์ด์–ธํŠธ: Axios + ์ธํ„ฐ์…‰ํ„ฐ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

src/
โ”œโ”€โ”€ api/              # API ์—ฐ๋™ (๋„๋ฉ”์ธ๋ณ„ ํด๋” ๊ตฌ์กฐ)
โ”‚   โ”œโ”€โ”€ axios.ts      # Axios ์ธ์Šคํ„ด์Šค + ์ธํ„ฐ์…‰ํ„ฐ
โ”‚   โ”œโ”€โ”€ auth/         # ์ธ์ฆ API (๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์•„์›ƒ)
โ”‚   โ”œโ”€โ”€ user/         # ์‚ฌ์šฉ์ž API (ํ”„๋กœํ•„ ์กฐํšŒ/์ˆ˜์ •)
โ”‚   โ”œโ”€โ”€ worker/       # ๊ทผ๋กœ์ž API (๊ณ„์•ฝ, ๊ทผ๋ฌด๊ธฐ๋ก, ์ •์ •์š”์ฒญ, ๊ธ‰์—ฌ, ์†ก๊ธˆ)
โ”‚   โ”œโ”€โ”€ employer/     # ๊ณ ์šฉ์ฃผ API (๊ทผ๋ฌด์ง€ CRUD, ๊ณ„์•ฝ CRUD, ์ •์ •์š”์ฒญ ์Šน์ธ/๊ฑฐ์ ˆ)
โ”‚   โ”œโ”€โ”€ notice/       # ๊ณต์ง€ API (๊ณต์ง€ CRUD)
โ”‚   โ”œโ”€โ”€ notification/ # ์•Œ๋ฆผ API (์ธ์•ฑ ์•Œ๋ฆผ CRUD, FCM ํ† ํฐ ๋“ฑ๋ก/์‚ญ์ œ)
โ”‚   โ””โ”€โ”€ kakao/        # ์นด์นด์˜ค API (์ฃผ์†Œ ๊ฒ€์ƒ‰)
โ”œโ”€โ”€ assets/           # ํฐํŠธ, ์ด๋ฏธ์ง€
โ”œโ”€โ”€ components/
โ”‚   โ”œโ”€โ”€ common/       # Text, PrimaryButton, BottomSheetModal, WheelPicker, MonthlyCalendar, Pagination, NoticeBoard ๋“ฑ
โ”‚   โ”‚   โ”œโ”€โ”€ notice/          # ๊ณต์ง€ ์ปดํฌ๋„ŒํŠธ (์ž‘์„ฑ/์ˆ˜์ •/์ƒ์„ธ ๋ชจ๋‹ฌ, ์นดํ…Œ๊ณ ๋ฆฌ ์„ ํƒ)
โ”‚   โ”‚   โ””โ”€โ”€ notification/    # ์•Œ๋ฆผ ์ปดํฌ๋„ŒํŠธ (NotificationPopup ๋“œ๋กญ๋‹ค์šด)
โ”‚   โ”œโ”€โ”€ employer/     # ๊ณ ์šฉ์ฃผ ์ „์šฉ (ํ™ˆ, ์ง์›๊ด€๋ฆฌ, ์†ก๊ธˆ๊ด€๋ฆฌ, ๋งˆ์ดํŽ˜์ด์ง€)
โ”‚   โ”œโ”€โ”€ layout/       # Header
โ”‚   โ”œโ”€โ”€ mypage/       # ๊ณตํ†ต ๋งˆ์ดํŽ˜์ด์ง€ (Drawer, ProfileCard, SentRequestCard ๋“ฑ)
โ”‚   โ”œโ”€โ”€ signup/       # ํšŒ์›๊ฐ€์ž…
โ”‚   โ”œโ”€โ”€ skeleton/     # ๋กœ๋”ฉ ์Šค์ผˆ๋ ˆํ†ค
โ”‚   โ””โ”€โ”€ worker/       # ๊ทผ๋กœ์ž ์ „์šฉ (์ฃผ๊ฐ„/์›”๊ฐ„ ์บ˜๋ฆฐ๋”, ๊ธ‰์—ฌ๋ช…์„ธ์„œ)
โ”œโ”€โ”€ hooks/
โ”‚   โ”œโ”€โ”€ common/       # useOnboardingStatus, useLogoutHandler, useNotices, useNotifications, useNotificationStream, useFcmToken, useNotificationNavigation
โ”‚   โ”œโ”€โ”€ employer/     # useWorkplaceManagement, useWorkplaceContracts, useAddWorker, useReceivedRequests, useEmployerDailyWorkRecords
โ”‚   โ””โ”€โ”€ worker/       # useWorkRecords, useCorrectionRequest, useUserData, useSalaryStatement ๋“ฑ
โ”œโ”€โ”€ navigation/       # RootNavigator, WorkerStack, EmployerStack, SignUpNavigator, OnboardingStack
โ”œโ”€โ”€ screens/
โ”‚   โ”œโ”€โ”€ auth/         # ํšŒ์›๊ฐ€์ž… (Step1~5)
โ”‚   โ”œโ”€โ”€ common/       # ๊ณตํ†ต ํ™”๋ฉด (NotificationScreen, NotificationSettingsScreen)
โ”‚   โ”œโ”€โ”€ employer/     # ๊ณ ์šฉ์ฃผ ํ™”๋ฉด (ํ™ˆ, ์ง์›๊ด€๋ฆฌ, ์†ก๊ธˆ๊ด€๋ฆฌ, ๋งˆ์ดํŽ˜์ด์ง€)
โ”‚   โ”œโ”€โ”€ onboarding/   # ์˜จ๋ณด๋”ฉ, ๋กœ๊ทธ์ธ
โ”‚   โ””โ”€โ”€ worker/       # ๊ทผ๋กœ์ž ํ™”๋ฉด (์ฃผ๊ฐ„/์›”๊ฐ„ ์บ˜๋ฆฐ๋”, ๋งˆ์ดํŽ˜์ด์ง€)
โ”œโ”€โ”€ stores/           # Zustand ์ „์—ญ ์ƒํƒœ (authStore, onboardingStore, signUpStore, notificationStore)
โ”œโ”€โ”€ types/            # TypeScript ํƒ€์ž… (๊ณตํ†ต API ํƒ€์ž…, UI ๋„๋ฉ”์ธ ํƒ€์ž…)
โ”œโ”€โ”€ constants/        # ์ƒ์ˆ˜ (colors, bank, pickerItems, wage)
โ””โ”€โ”€ utils/            # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ (alert, date, format, image, notification, employerSchedule, sse, pushToken)

์ฃผ์š” ๊ธฐ๋Šฅ

๊ทผ๋กœ์ž ๊ธฐ๋Šฅ

  • ์ฃผ๊ฐ„ ์บ˜๋ฆฐ๋”: ๊ทผ๋ฌด ๊ธฐ๋ก ์กฐํšŒ, ๊ทผ๋ฌด ์ถ”๊ฐ€/์ •์ • ์š”์ฒญ, ๊ณผ๊ฑฐ/๋ฏธ๋ž˜ ๊ทผ๋ฌด ์นด๋“œ ์ƒ‰์ƒ ๊ตฌ๋ถ„
  • ์›”๊ฐ„ ์บ˜๋ฆฐ๋”: ์›”๋ณ„ ๊ทผ๋ฌด ๊ธฐ๋ก ์กฐํšŒ, ๋‚ ์งœ๋ณ„ ๊ทผ๋ฌด ์ƒ์„ธ, ๊ทผ๋ฌด์ง€๋ณ„ ๊ธ‰์—ฌ/์†ก๊ธˆ ํ˜„ํ™ฉ
  • ๊ธ‰์—ฌ๋ช…์„ธ์„œ: ๊ทผ๋ฌด์ง€๋ณ„ ๊ธ‰์—ฌ ์ƒ์„ธ (์ง€๊ธ‰/๊ณต์ œ ํ•ญ๋ชฉ), 4๋Œ€๋ณดํ—˜/์†Œ๋“์„ธ ํ† ๊ธ€ ํ‘œ์‹œ
  • ๋งˆ์ดํŽ˜์ด์ง€: Drawer ๋ฉ”๋‰ด, ํ”„๋กœํ•„ ์ˆ˜์ •, ๊ทผ๋ฌด์ง€ ๊ด€๋ฆฌ, ๋ณด๋‚ธ ์š”์ฒญ, ํšŒ์›ํƒˆํ‡ด

๊ณ ์šฉ์ฃผ ๊ธฐ๋Šฅ

  • ํ™ˆ: ์ผ๊ฐ„ ์บ˜๋ฆฐ๋”, ๊ทผ๋ฌด ์ถ”๊ฐ€/์ˆ˜์ • ๋ชจ๋‹ฌ
  • ์ง์›๊ด€๋ฆฌ: ๊ทผ๋ฌด์ง€๋ณ„ ๊ทผ๋ฌด์ž ๋ชฉ๋ก ์กฐํšŒ, Accordion ์นด๋“œ (์‹œ๊ธ‰/๊ธ‰์—ฌ์ง€๊ธ‰์ผ/๊ทผ๋ฌด์‹œ๊ฐ„ ํŽธ์ง‘), ํ‡ด์‚ฌ์ฒ˜๋ฆฌ
  • ๊ทผ๋ฌด์ž ์ถ”๊ฐ€: 2๋‹จ๊ณ„ ํ”Œ๋กœ์šฐ (๊ทผ๋ฌด์ž ์ฝ”๋“œ ๊ฒ€์ƒ‰ โ†’ ๊ทผ๋ฌด์‹œ๊ฐ„ ์„ค์ •), ๊ทผ๋ฌด ์Šค์ผ€์ค„ ํƒ€์ž„๋ผ์ธ ์ฐจํŠธ ํ”„๋ฆฌ๋ทฐ
  • ์†ก๊ธˆ๊ด€๋ฆฌ: ๊ทผ๋ฌด์ง€๋ณ„ ๊ทผ๋ฌด์ž ๊ธ‰์—ฌ ์กฐํšŒ, ์†ก๊ธˆ ์ฒ˜๋ฆฌ
  • ๊ทผ๋ฌด์ง€ ๊ด€๋ฆฌ: ๊ทผ๋ฌด์ง€ CRUD, ์นด์นด์˜ค ์ฃผ์†Œ ๊ฒ€์ƒ‰ ์—ฐ๋™
  • ๋งˆ์ดํŽ˜์ด์ง€: ํ”„๋กœํ•„ ์ˆ˜์ •, ๋ฐ›์€ ๊ทผ๋ฌด์š”์ฒญ ๋ณด๊ธฐ (์‚ฌ์—…์žฅ๋ณ„ ํƒญ, ์ƒํƒœ ํ•„ํ„ฐ, ํŽ˜์ด์ง€๋„ค์ด์…˜, ์Šน์ธ/๊ฑฐ์ ˆ)

๊ณตํ†ต ๊ธฐ๋Šฅ

  • ๊ณต์ง€ ๊ฒŒ์‹œํŒ: ๊ณต์ง€ ์ž‘์„ฑ/์ˆ˜์ •/์‚ญ์ œ, ์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ, ์ƒ์„ธ ๋ณด๊ธฐ ๋ฐ”ํ…€์‹œํŠธ (๊ณ ์šฉ์ฃผ/๊ทผ๋กœ์ž ๊ณต์šฉ)
  • ์•Œ๋ฆผ: ์ธ์•ฑ ์•Œ๋ฆผ ํŒ์—… (Header ๋ฒจ ์•„์ด์ฝ˜), ์•Œ๋ฆผ ์ƒ์„ธ ํ™”๋ฉด (ํ•„ํ„ฐ/ํŽ˜์ด์ง€๋„ค์ด์…˜), SSE ์‹ค์‹œ๊ฐ„ ๊ตฌ๋…, ์ˆซ์ž ๋ฑƒ์ง€
  • ํ‘ธ์‹œ ์•Œ๋ฆผ: FCM ํ† ํฐ ๋“ฑ๋ก/์‚ญ์ œ, ๋”ฅ๋งํฌ ๋„ค๋น„๊ฒŒ์ด์…˜ (์•Œ๋ฆผ ํƒญ ์‹œ ํ•ด๋‹น ํ™”๋ฉด ์ด๋™), ์•Œ๋ฆผ ์„ค์ • ํ™”๋ฉด

์ธ์ฆ

  • ์นด์นด์˜ค ๋„ค์ดํ‹ฐ๋ธŒ SDK ๋กœ๊ทธ์ธ (@react-native-seoul/kakao-login)
  • JWT ํ† ํฐ (AccessToken + RefreshToken)
  • ํ† ํฐ ์ž๋™ ๊ฐฑ์‹  ๋กœ์ง (Axios ์ธํ„ฐ์…‰ํ„ฐ)
  • ์•ฑ ์‹œ์ž‘ ์‹œ ํ† ํฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ

๋„ค๋น„๊ฒŒ์ด์…˜ ๊ตฌ์กฐ

Onboarding (3ํŽ˜์ด์ง€ ์Šค์™€์ดํ”„)
    โ†“
Welcome (์นด์นด์˜ค ๋กœ๊ทธ์ธ)
    โ”œโ”€ ๊ธฐ์กด ํšŒ์› โ†’ EmployerHome / WorkerHome
    โ””โ”€ ์‹ ๊ทœ ํšŒ์› โ†’ SignUp (5๋‹จ๊ณ„)
                      โ”œโ”€ WORKER โ†’ WorkerHome
                      โ””โ”€ EMPLOYER โ†’ WorkplaceManage

์ƒํƒœ ๊ด€๋ฆฌ

  • authStore: accessToken, userInfo, isLoggedIn (AsyncStorage ์ž๋™ persist)
  • onboardingStore: isOnboardingCompleted (AsyncStorage ์ž๋™ persist)
  • signUpStore: ํšŒ์›๊ฐ€์ž… ์ž„์‹œ ๋ฐ์ดํ„ฐ (persist ์—†์Œ, ์•ฑ ์ข…๋ฃŒ ์‹œ ์ž๋™ ์ดˆ๊ธฐํ™”)
  • notificationStore: unreadCount (์ „์—ญ ์•Œ๋ฆผ ๋ฑƒ์ง€ ์ƒํƒœ, persist ์—†์Œ)

๋ช…๋ น์–ด

npx expo start              # ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘
npx expo start --ios        # iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ
npx expo start --android    # Android ์—๋ฎฌ๋ ˆ์ดํ„ฐ
eas build --platform ios    # iOS ๋นŒ๋“œ
eas build --platform android  # Android ๋นŒ๋“œ

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

app.config.ts์˜ extra ์„น์…˜์—์„œ ์„ค์ •:

  • backendApiUrl: ๋ฐฑ์—”๋“œ API URL
  • kakaoAppKey: ์นด์นด์˜ค ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ํ‚ค
  • kakaoRestApiKey: ์นด์นด์˜ค REST API ํ‚ค (์ฃผ์†Œ ๊ฒ€์ƒ‰์šฉ)