Architecture - kookmin-sw/capstone-2025-44 GitHub Wiki

πŸ—οΈ νƒ€μž„νŽ˜μ΄ μ•„ν‚€ν…μ²˜

νƒ€μž„νŽ˜μ΄λŠ” ν˜„λŒ€μ μΈ React 기반 μ•„ν‚€ν…μ²˜λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, Progressive Web App(PWA) κΈ°λŠ₯을 톡해 λ„€μ΄ν‹°λΈŒ 앱에 κ°€κΉŒμš΄ μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€.


Relevant Source Files


βš™οΈ 기술 μŠ€νƒ

λ²”μ£Ό 기술 μŠ€νƒ
ν”„λ‘ νŠΈμ—”λ“œ 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 κΈ°λŠ₯으둜 λ„€μ΄ν‹°λΈŒ μ•± μœ μ‚¬ κ²½ν—˜ 제곡