//프로젝트
v1.1.0Official Release2026-03-01 ~ 2026-05-14
Maple Diary

메이플스토리의 재획, 보스, 지출, 목표를 하나의 대시보드에서 관리하는 기록 웹앱

// Full-stack
Solo
Maple Diary icon
01 / 06
01
대시보드

캐릭터 현황, 이번 달 흐름, 최근 기록을 한눈에 보여주는 메인 허브 화면입니다. 현재 플레이 상태와 핵심 지표를 빠르게 확인할 수 있습니다.

02 / 06
02
사냥

재획 기록을 날짜별로 정리하고, 사냥 시간과 수익을 한 번에 관리하는 사냥 화면입니다. 기록을 쌓을수록 누적 흐름을 보기 쉽게 구성했습니다.

03 / 06
03
지출 장부

아이템 구매나 강화비처럼 게임 내 지출을 따로 기록하는 지출 장부 화면입니다. 월별, 날짜별로 정리해 실제 순자산 흐름을 파악할 수 있습니다.

04 / 06
04
수익 분석

사냥, 보스, 보스 드랍템 수익을 기간별로 비교하고 통계로 확인하는 수익 분석 화면입니다. 주간, 월간 성과를 통해 플레이 패턴을 분석할 수 있습니다.

05 / 06
05
보스

주간 보스와 월간 보스를 캐릭터별로 관리하고, 드랍템 수익까지 함께 기록하는 보스 관리 화면입니다. 일반 보스 수익과 물욕템 수익을 분리해 더 정확하게 볼 수 있습니다.

06 / 06
06
목표 관리

여러 목표를 등록하고 우선순위를 조절하면서 진행률을 관리하는 목표 관리 화면입니다. 목표가 앞에서부터 자동으로 채워지도록 설계해 흐름을 직관적으로 볼 수 있습니다.

한눈에 보기
메이플스토리의 재획, 보스, 지출, 목표를 하나의 대시보드에서 관리하는 기록 웹앱
역할
Full-stack
범위
10개
//핵심 포인트
8
01
대시보드 핵심 데이터 표시 시간 55.1% 단축: 1.54초 → 0.69초
02
hydration 이후 시작되던 클라이언트 API 의존성을 4회에서 0회로 줄이고, 초기 화면의 부정확한 중간 데이터 노출 제거
03
성장 버전 1.1.0: 약 800명의 실제 사용자를 운영하며 커뮤니티 피드백을 기능 개선으로 연결
04
캐릭터별 최근 7일 경험치 히스토리를 자동 저장해 성장 흐름을 한눈에 확인
05
보스 일반 수익과 물욕템 수익을 분리 관리하고 분석 화면에서 함께 집계
06
목표를 드래그로 우선순위 정렬하고 앞에서부터 자동 채움되도록 구성
07
로컬 IndexedDB 저장과 Supabase 서버 동기화를 함께 지원
08
인벤 커뮤니티 피드백을 반영해 캐릭터 관리, 수정/삭제, 지출, 드랍템 기능을 반복 개선
//기술 스택
10
//FRONTEND(5)

탭을 바꿔가며 역할과 설명을 한 범주씩 확인할 수 있습니다.

Next.js (App Router)
도구(Utility)
Next.js (App Router)을(를) 프로젝트의 안정성과 구현 속도를 위해 활용했다.
TypeScript
타입 안정성
API 응답/컴포넌트 Props 계약을 타입으로 고정해 런타임 오류를 줄이고 협업 시 실수를 예방했다.
React
UI 상태/컴포넌트
상태 변화에 따라 UI를 컴포넌트 단위로 조합하고, 재사용 가능한 화면 구조로 유지보수를 쉽게 했다.
Zustand
UI 상태 엔진
페이지 간 공유되는 UI 상태(오버레이·사이드바·카드 확장 등)를 가볍고 예측 가능한 스토어로 관리해 인터랙션의 연속성을 유지했다.
Tailwind CSS
디자인 시스템/스타일
토큰(색/타이포/간격)과 유틸 기반으로 스타일 규칙을 표준화해 화면 간 일관성을 유지했다.
PERFORMANCE CASE STUDY

빈 화면이 아니라 정확한 데이터가 보이는 시간을 줄이다

레이아웃은 먼저 나타났지만 목표 진행률과 수익은 hydration 이후에야 로드되고, 일부 응답만 반영된 값이 잠시 노출됐습니다. 사용자가 원하는 것은 화면의 틀이 아니라 정확한 핵심 수치라고 판단해 서버 렌더링 단계에서 네 데이터를 병렬 조회하고 초기 HTML에 주입했습니다.

핵심 데이터 표시 시간 중앙값
1,543.1ms692.4ms
850.7ms · 55.1% 단축
정확한 데이터 표시 전 클라이언트 API 의존성
4회0회
초기 HTML에 정확한 수치 포함
01 · 발견
임시 값과 잘못된 중간 상태

초기 화면의 ‘목표 미설정’, ‘0회’와 함께 목표 진행률이 0.7%에서 최종값 54.2%로 바뀌는 현상을 확인했습니다.

02 · 분석
hydration 이후에 시작되는 요청

hydration, 세션 확인과 로컬 상태 초기화 이후 네 API가 호출되어 핵심 데이터 표시에 추가 왕복이 선행됨을 찾았습니다.

03 · 판단
사용자 과업에 맞는 지표 정의

LCP 대신 navigationStart부터 최종 목표 진행률 54.2%가 표시될 때까지를 Dashboard Time to Data로 정의했습니다.

04 · 해결
서버 병렬 조회와 초기 데이터 주입

Server Component에서 목표·기록·지출·보스 데이터를 Promise.all로 조회하고 초기 HTML에 주입했습니다. 이후 Zustand 재검증과 실패 폴백은 유지했습니다.

05 · 검증
동일 조건 콜드 로드 중앙값 비교

실제 로그인 세션과 동일 데이터로 변경 전후 각 5회를 측정해 중앙값이 1,543.1ms에서 692.4ms로 줄어든 것을 확인했습니다.

Next.js 16 Server ComponentsReact 19Promise.allSupabaseZustandChrome DOM Observation