Architecture - kookmin-sw/capstone-2025-44 GitHub Wiki
ποΈ νμνμ΄ μν€ν μ²
νμνμ΄λ νλμ μΈ React κΈ°λ° μν€ν μ²λ‘ ꡬμ±λμ΄ μμ΅λλ€. λν, Progressive Web App(PWA) κΈ°λ₯μ ν΅ν΄ λ€μ΄ν°λΈ μ±μ κ°κΉμ΄ μ¬μ©μ κ²½νμ μ 곡ν©λλ€.
Relevant Source Files
- public/.well-known/assetlinks.json
- src/api/axios-instance.tsx
- src/api/bank-api.tsx
- src/components/common/bottom-navigation-bar.tsx
- src/components/layout/default-layout.tsx
- src/components/layout/global-layout.tsx
- src/data/applicant-list-data.json
- src/hooks/queries/useEditPost.ts
- src/recoil/atoms/post-edit-state.ts
- src/routes/index.tsx
- src/style/color-theme.ts
- src/style/global.tsx
βοΈ κΈ°μ μ€ν
λ²μ£Ό | κΈ°μ μ€ν |
---|---|
νλ‘ νΈμλ | React, TypeScript |
λΌμ°ν | React Router DOM |
μ€νμΌλ§ | Styled Components |
μν κ΄λ¦¬ | Recoil, React Query |
API ν΅μ | Axios, StompJS (WebSocket) |
μΈμ¦ | OAuth (Google, Kakao) |
PWA | Service Worker, Web Manifest |
νΈμ μλ¦Ό | Firebase Cloud Messaging |
UI μ»΄ν¬λνΈ | Swiper, Framer Motion |
κ°λ° λꡬ | CRACO, ESLint, Prettier |
π λλ ν 리 ꡬ쑰
src/
βββ assets/ # μμ΄μ½ λ±μ μ μ μμ
βββ components/ # μ¬μ¬μ© κ°λ₯ν UI μ»΄ν¬λνΈ
β βββ common/ # κ³΅ν΅ UI μμ
β βββ layout/ # λ μ΄μμ μ»΄ν¬λνΈ
β βββ login/ # μΈμ¦ κ΄λ ¨ μ»΄ν¬λνΈ
βββ lib/ # μ νΈλ¦¬ν° λΌμ΄λΈλ¬λ¦¬
βββ pages/ # μ ν리μΌμ΄μ
νμ΄μ§
β βββ chat/ # μ±ν
μμ€ν
νμ΄μ§
β βββ login/ # λ‘κ·ΈμΈ κ΄λ ¨ νμ΄μ§
β βββ mypage/ # λ§μ΄νμ΄μ§ λ° μ¬μ©μ μ 보 νμ΄μ§
β βββ post/ # κ²μκΈ μμ€ν
νμ΄μ§
β βββ posting/ # κ²μκΈ μμ± νλ‘μ°
βββ routes/ # μ ν리μΌμ΄μ
λΌμ°ν
μ€μ
βββ style/ # μ μ μ€νμΌ μ μ
βββ utils/ # μ νΈλ¦¬ν° ν¨μ λͺ¨μ
1. μμ€ν κ°μ
Timepayλ λ€μκ³Ό κ°μ μ£Όμ μμ€ν μΌλ‘ ꡬμ±λμ΄ μμ΅λλ€:
- λΌμ°ν μμ€ν
- λ μ΄μμ μμ€ν
- API ν΅ν© κ³μΈ΅
- PWA κΈ°λ₯
- UI μ€νμΌλ§ μμ€ν
2. λΌμ°ν μμ€ν
React Routerλ₯Ό μ¬μ©νμ¬ νμ΄μ§ κ° νμμ ꡬμ±νλ©°, μΈμ¦ μ¬λΆμ λ°λΌ λ³΄νΈ λΌμ°νΈ(AuthLayout)λ₯Ό μ¬μ©ν©λλ€.
μ£Όμ λΌμ°νΈ
/login
,/auth/kakao
: μΈμ¦/profile
,/profile/welcome
,/profile/done
: νλ‘ν/post
,/post/:postId
,/posting/*
: κ²μκΈ/chat
,/chat/detail
: μ±ν/mypage
: λ§μ΄νμ΄μ§
3. λ μ΄μμ μμ€ν
- GlobalLayout: μ 체 λ μ΄μμμ λΌλ, λ·°ν¬νΈ μ€μ , νλ¨ λ΄λΉκ²μ΄μ ν¬ν¨
- DefaultLayout: 컀μ€ν μ± λ°, μ€ν¬λ‘€ μμ, λ΄λΆ μ½ν μΈ κ΅¬μ±
- BottomNavigationBar: μ£Όμ κ²½λ‘μ λ°λΌ μ‘°κ±΄λΆ λ λλ§λλ νλ¨ λ΄λΉκ²μ΄μ λ°
4. API ν΅ν© κ³μΈ΅
- axios-instance.tsx: κ³΅ν΅ μ€μ μ ν¬ν¨ν Axios μΈμ€ν΄μ€
- λλ©μΈλ³ API λͺ¨λλ‘ κ΅¬μ± (μ:
bank-api.tsx
)
5. UI μ€νμΌλ§ μμ€ν
Timepayλ Styled Componentsλ₯Ό κΈ°λ°μΌλ‘ ν 컀μ€ν μ€νμΌλ§ μμ€ν μ μ¬μ©νμ¬ μΌκ΄λ λμμΈμ μ 곡ν©λλ€.
π¨ μ£Όμ κ΅¬μ± μμ
- color-theme.ts: νλ‘μ νΈ μ 체μμ μ¬μ©νλ μμ ν λ§ μ μ (primary, secondary λ±), μμ μ κ·Όμ± λ° λ€ν¬ λͺ¨λ λμ κ³ λ €
- global.tsx: μ μ μ€νμΌ μ μ (ν°νΈ, κΈ°λ³Έ μ¬λ°±, λ μ΄μμ 리μ
λ±),
createGlobalStyle
μ νμ©ν κΈλ‘λ² CSS μ€μ , λͺ¨λ°μΌ λμμ μν viewport λ° box-sizing μ€μ ν¬ν¨
π‘ νΉμ§
- λͺ¨λνλ μ€νμΌ μ μ: κ° μ»΄ν¬λνΈμ κ°λ³ μ€νμΌ λΆμ¬
- λ°μν λμμΈ: λͺ¨λ°μΌ μ€μ¬μ λ·°ν¬νΈμ κ°λ³μ λ μ΄μμ ꡬμ±
- UI μΌκ΄μ± μ μ§: μμ, μ¬λ°±, ν°νΈ μ€νμΌ λ±μ΄ μ μμ μΌλ‘ ν΅μΌλ¨
- λμμΈ μμ€ν κΈ°λ°: μ¬μ¬μ© κ°λ₯ν λμμΈ ν ν°μ μ¬μ©
6. PWA κΈ°λ₯
- manifest.json: μΉ μ± μ 보
- pwabuilder-sw.js: μ€νλΌμΈ μ§μ
- firebase-messaging-sw.js: Push μλ¦Ό μλΉμ€
- assetlinks.json: Android ν΅ν©
- FCM μ°λ:
fcm-api.tsx
,usePostFcmToken.ts
,fcm-token-state.ts
7. μμ½
Timepayμ μν€ν μ²λ λ€μκ³Ό κ°μ νΉμ§μ κ°μ§λλ€:
- μ»΄ν¬λνΈ κΈ°λ° κ΅¬μ‘°λ‘ μ μ§λ³΄μ μ©μ΄
- μΌκ΄λ UI/UX μ 곡μ μν λ μ΄μμ λ° μ€νμΌλ§ μμ€ν
- ν¨μ¨μ μΈ λΌμ°ν λ° λ³΄μ μ²λ¦¬
- νμ₯ κ°λ₯ν API μ°λ ꡬ쑰
- PWA κΈ°λ₯μΌλ‘ λ€μ΄ν°λΈ μ± μ μ¬ κ²½ν μ 곡