<aside>

CryptoFolio는 업비트 API를 기반으로 실시간 암호화폐 시세, 트렌드 지표, 개인 포트폴리오 관리 기능을 제공하는 웹 서비스입니다.

</aside>

1. 프로젝트 개요

<aside>

</aside>

2. 주요 기능

<aside>

3. 기술 스택

<aside>

Frontend

Backend

OPEN API

4. 페이지별 기능 상세

<aside>

5. 폴더 구조

<aside>

src/
├── api/                    # 업비트 API 호출 함수
├── app/                    # Next.js App Router 디렉토리
│   ├── (auth)/             # 로그인 및 회원가입 페이지
│   ├── (home)/             # 메인 홈페이지
│   ├── api/                # 서버 API 라우트
│   ├── chart/              # 암호화폐 시세 및 차트 페이지
│   ├── portfolio/          # 사용자 포트폴리오 관리 페이지
│   ├── settings/           # 프로필 설정 페이지
│   ├── trends/             # 트렌드 데이터 분석 페이지
│
├── components/             # UI 컴포넌트 모음
├── hooks/                  # 커스텀 훅
├── lib/                    # 서버 비즈니스 로직 및 인프라 유틸
├── providers/              # 전역 Provider 컴포넌트
├── stores/                 # 상태 관리(Zustand) 스토어
├── utils/                  # 클라이언트 유틸 함수 및 데이터 처리
├── types/                  # 타입스크립트 타입 정의

</aside>

6. 데이터베이스 모델링

<aside>


erDiagram
  USERS {
    ObjectId _id PK
    string name
    string email
    string password
    Date createdAt
    Date updatedAt
  }

  ASSETS {
    ObjectId _id PK
    string userEmail FK
    string symbol
    string name
    number quantity
    number averagePrice
    Date date
    string type
    Date createdAt
  }

  USERS ||--o{ ASSETS : owns

</aside>

7. API 설계

<aside>

인증

업비트 Proxy

포트폴리오

환율

8. 주요 이슈 & 해결

<aside>

9. 성과 & 회고

<aside>

프로젝트를 통해 Next.js App Router 환경에서의 컴포넌트 설계와 데이터 패칭 구조에 대한 이해를 중심으로, 아키텍처 설계와 배포 환경에 대한 경험을 종합적으로 쌓을 수 있었다.

App Router 기반에서 서버·클라이언트 컴포넌트의 역할을 분리하고 렌더링 책임과 데이터 패칭 위치를 명확히 하며, 초기 로딩 구간에서 불필요한 렌더링과 스크립트 실행을 제거해 LCP를 4.1초에서 1.1초로 약 73% 단축시키는 성능 개선을 달성했다. 이와 함께 LCP 이전 메인 스레드 작업을 최소화하여 초기 화면 안정성을 확보했으며, PageSpeed Insights 기준 접근성 및 SEO 점수 100점을 달성해 시맨틱 마크업, 메타데이터 구성, 링크 구조 측면에서도 사용자와 검색엔진 모두를 고려한 UI 품질을 확보했다.

또한 Vercel 서버리스 환경에서 WebSocket 연결 유지가 어렵다는 제약을 인지하고, 1초 주기의 Polling 기반 데이터 갱신 구조를 설계함으로써 실시간에 준하는 시세 갱신과 연결 안정성을 동시에 확보했다. 더불어 외부 API 호출을 서버 프록시로 일원화하여 브라우저 CORS 에러 발생 가능성을 제거하고, 배포 환경 변화에 영향을 받지 않는 안정적인 데이터 흐름을 구성했다.

마지막으로 차트 시각화 과정에서는 Chart.js와 ApexCharts를 비교·적용하며, 단순 통계성 데이터와 금융형 실시간 차트에 적합한 라이브러리를 구분해 선택하는 기준을 정립했다. 전반적으로 이번 프로젝트는 단순 기능 구현을 넘어, 환경 제약과 트레이드오프를 인식하고 그에 맞는 합리적인 기술 선택과 품질 지표 개선을 함께 달성한 경험이었다.

</aside>