You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
컴포넌트 기반 구조를 통해 복잡한 UI를 효율적으로 분리하고 재사용성을 높임. 상태 변화에 따른 자동 렌더링을 통해 데이터 중심의 서비스 구조를 효율적으로 구현.
TypeScript
API 응답과 상태 값을 명확히 정의해 런타임 오류를 줄이고, 안정적인 개발 환경을 구축. 금융 데이터(주가) 및 사용자 감정 데이터의 복잡한 타입을 인터페이스로 엄격히 관리하여, 개발 단계에서 Type Error를 사전에 방지하고 협업 시 데이터 구조 파악 비용을 낮춤.
React Query
중복된 API 호출을 캐싱을 통해 방지하고, staleTime 설정을 통해 서버 데이터와 클라이언트 상태 간의 동기화 로직을 추상화하여 실시간성 데이터 관리 효율을 극대화.
Tailwind CSS
CSS-in-JS의 런타임 오버헤드를 줄이고, 미리 정의된 디자인 시스템을 활용해 스타일의 일관성을 유지하면서도 개발 속도를 높임.
React Router
클라이언트 사이드 라우팅을 통해 페이지 전환 시 불필요한 리소스 로드를 방지하고, 중첩 라우팅으로 서비스의 계층 구조를 명확히 함.
📦 Libraries
라이브러리
선정 이유
date-fns
달력 컴포넌트 구현 시 시계열 데이터의 파싱, 포맷팅, 유효성 검사를 수행. 가벼운 라이브러리 사이즈를 유지하면서도 다양한 날짜 연산 로직을 일관된 인터페이스로 관리.
react-tooltip
주가 및 감정 흐름 그래프에 툴팁을 제공해 페이지 이동 가능성을 시각적으로 안내함으로써 사용자의 기능 탐색성을 높임.
react-use
useClickAway 훅을 활용해 종목 선택 리스트의 외부 클릭 감지 로직을 간결하게 구현, 반복되는 UI 로직을 검증된 커스텀 훅으로 대체하여, 코드의 선언성을 높이고 직접 구현 시 발생할 수 있는 엣지 케이스 오류를 방지.
recharts
통계 페이지의 다양한 그래프를 구현. React 생태계에 최적화되어 있으며, 유연한 커스터마이징이 가능.
react-intersection-observer
무한 스크롤 구현. 대량의 데이터를 렌더링할 때 브라우저 리소스 소모를 최소화할 수 있어 성능 측면에서 적합.
Axios
fetch API 대비 요청/응답 인터셉터 기능을 제공하여, 공통 헤더 처리 및 에러 핸들링 로직을 중앙에서 관리하기 위해 도입.
zustand
여러 페이지에 걸쳐 유지되어야 하는 로그인한 유저의 정보와 온보딩 과정에서 입력된 약관동의 데이터 를 효율적으로 관리하고 공유.
framer-motion
페르소나 결과 페이지에서 사용자의 몰입감을 높이기 위해 도입. 특히 페르소나 결과가 나올 때 캐릭터 뒤에 배경이 튀어나오는 듯한 애니메이션을 직관적이고 효율적으로 구현.
tailwind-merge
스켈레톤 컴포넌트에서 넘겨받은 스타일을 우선으로 적용하기 위해 도입.
🚨 Troubleshooting
1. 외부 API 데이터 불일치 및 예외 상황 대응
상황
서버에서 내려주는 종목 데이터 중 일부 항목에서 로고 이미지 URL이 누락(null)되어 UI상에서 Broken Image가 노출되는 현상 발생.
해결
Default Image 적용: 이미지 로드 실패 시 또는 데이터가 없을 경우를 대비한 공통 '디폴트 로고' 에셋을 준비하여 폴백(Fallback) 처리를 구현.
방어적 데이터 파싱: 각 컴포넌트 진입 단계에서 데이터 존재 여부를 체크하는 옵셔널 체이닝(?.)과 조건부 렌더링을 강화하여, 특정 데이터가 없어도 전체 레이아웃이 무너지지 않도록 방어적인 구조를 설계.
결과
외부 데이터의 가용 상태와 관계없이 일관된 시각적 UI를 유지할 수 있게 되었으며, 서비스의 전반적인 신뢰도를 높임.
2. SPA 배포 환경에서의 경로 인식 오류
상황
Vercel 배포 환경에서 메인 페이지 외의 특정 경로(예: /login, /record)로 직접 접속하거나 페이지를 새로고침할 때 브라우저에 404: NOT_FOUND 에러가 출력되는 현상 발생.
해결
Rewrites 설정 적용: 프로젝트 루트 디렉토리에 vercel.json 파일을 생성하고, 모든 URL 요청을 애플리케이션의 진입점인 index.html로 리다이렉트하도록 rewrites 규칙을 설정함.