-
Notifications
You must be signed in to change notification settings - Fork 5
Architecture
Hyunseok Ryu edited this page May 18, 2025
·
8 revisions
타임페이는 현대적인 React 기반 아키텍처로 구성되어 있습니다. 또한, Progressive Web App(PWA) 기능을 통해 네이티브 앱에 가까운 사용자 경험을 제공합니다.
- 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/ # 유틸리티 함수 모음
Timepay는 다음과 같은 주요 시스템으로 구성되어 있습니다:
- 라우팅 시스템
- 레이아웃 시스템
- API 통합 계층
- PWA 기능
- UI 스타일링 시스템
React Router를 사용하여 페이지 간 탐색을 구성하며, 인증 여부에 따라 보호 라우트(AuthLayout)를 사용합니다.
-
/login
,/auth/kakao
: 인증 -
/profile
,/profile/welcome
,/profile/done
: 프로필 -
/post
,/post/:postId
,/posting/*
: 게시글 -
/chat
,/chat/detail
: 채팅 -
/mypage
: 마이페이지
- GlobalLayout: 전체 레이아웃의 뼈대, 뷰포트 설정, 하단 내비게이션 포함
- DefaultLayout: 커스텀 앱 바, 스크롤 영역, 내부 콘텐츠 구성
- BottomNavigationBar: 주요 경로에 따라 조건부 렌더링되는 하단 내비게이션 바
- axios-instance.tsx: 공통 설정을 포함한 Axios 인스턴스
- 도메인별 API 모듈로 구성 (예:
bank-api.tsx
)
Timepay는 Styled Components를 기반으로 한 커스텀 스타일링 시스템을 사용하여 일관된 디자인을 제공합니다.
- color-theme.ts: 프로젝트 전체에서 사용하는 색상 테마 정의 (primary, secondary 등), 색상 접근성 및 다크 모드 대응 고려
-
global.tsx: 전역 스타일 정의 (폰트, 기본 여백, 레이아웃 리셋 등),
createGlobalStyle
을 활용한 글로벌 CSS 설정, 모바일 대응을 위한 viewport 및 box-sizing 설정 포함
- 모듈화된 스타일 정의: 각 컴포넌트에 개별 스타일 부여
- 반응형 디자인: 모바일 중심의 뷰포트와 가변적 레이아웃 구성
- UI 일관성 유지: 색상, 여백, 폰트 스타일 등이 전역적으로 통일됨
- 디자인 시스템 기반: 재사용 가능한 디자인 토큰을 사용
- manifest.json: 웹 앱 정보
- pwabuilder-sw.js: 오프라인 지원
- firebase-messaging-sw.js: Push 알림 서비스
- assetlinks.json: Android 통합
-
FCM 연동:
fcm-api.tsx
,usePostFcmToken.ts
,fcm-token-state.ts
Timepay의 아키텍처는 다음과 같은 특징을 가집니다:
- 컴포넌트 기반 구조로 유지보수 용이
- 일관된 UI/UX 제공을 위한 레이아웃 및 스타일링 시스템
- 효율적인 라우팅 및 보안 처리
- 확장 가능한 API 연동 구조
- PWA 기능으로 네이티브 앱 유사 경험 제공