지난 세션에서 발견된 i18n 관련 버그들을 해결하는 과정에서 레이아웃의 근본적인 문제를 파악하고 수정했습니다. 또한, 서비스 운영의 효율성을 위해 관리자 모드와 방문 통계 시스템을 구축하였습니다.
오늘 한 일
🐛 i18n 및 UI 버그 수정
- 십신 폰트 가독성 개선:
pillar-card.tsx에서 식신, 편관 등 십신 텍스트 크기를10px에서12px(text-xs)로 키워 가독성을 확보했습니다. - 결제 페이지 용어 Tooltip 로직 수정: ReactMarkdown의
strong태그 내부 children이 배열로 넘어오는 구조를 처리하기 위해extractText()재귀 함수를 도입하여 텍스트 추출 성공. - 다국어 레이아웃 폭 불균형 해결: KO/EN 언어별로 컨텐츠 길이가 달라 발생하던 레이아웃 어긋남을
w-full max-w-screen-sm mx-auto로 고정하여 640px 모바일 우선 뷰로 통일했습니다.
🌐 영문 모드 최적화 및 용어 사전 구축
사용자가 영어로 사주를 볼 때 시스템 프롬프트뿐만 아니라 결과값까지 완벽하게 영어로 출력되도록 강제했습니다.
- 영문 AI 응답 강제: Claude가 한글 데이터를 보고 한국어로 답변하는 문제를 방지하기 위해 프롬프트 최상단과 최하단에 Output Language 지침을 재강조했습니다.
- Bilingual 용어 사전 (
terms-en.ts): 60개 이상의 사주 용어(정재→Direct Wealth 등)를 표준 영문명으로 매핑하여 AI가 일관된 용어를 사용하도록 학습시켰습니다. - Tooltip → Popover 교체: 모바일 환경에서 호버(Hover)가 작동하지 않는 문제를 해결하기 위해 클릭 기반의 Popover로 전환했습니다.
👑 관리자 모드(Admin) 신규 구축
서비스 관리 효율을 위해 관리자 전용 대시보드와 기능을 구현했습니다.
- 방문 추적 시스템:
visits테이블을 설계하고, 관리자 활동을 제외한 순수 사용자 방문 로그를 기록합니다. - 사용자 및 크레딧 관리: 관리자가 직접 사용자의 크레딧을 지급하거나 차감할 수 있는 기능을 추가하고 모든 이력을 감사 로그(Audit Log)로 남깁니다.
- 데이터 시각화: 외부 라이브러리 없이 Tailwind CSS만을 활용해 14일간의 방문자 추이 및 언어별 분포 차트를 구현했습니다.
- 보안:
ADMIN_EMAILS환경변수를 통해 인가된 관리자만 접근 가능하며, 비인가자에게는 404 페이지로 응답합니다.
발견한 이슈 / 해결
| 이슈 내용 | 해결 방법 |
|---|---|
html lang 고정 버그 |
getLocale()을 사용하여 루트 레이아웃에서 동적으로 언어 설정 |
| 컨테이너 폭 불일치 | 픽셀 단위 측정 후 max-w-screen-sm으로 컨테이너 표준화 |
| 모바일 툴팁 미작동 | Hover 방식에서 Click 방식인 Popover로 UI 컴포넌트 교체 |
| DB 마이그레이션 충돌 | Drizzle-kit 대신 @neondatabase/serverless로 Raw SQL 직접 실행 |
다음에 할 일
- [ ] Vercel 환경변수 설정:
ADMIN_EMAILS등록 및 관리자 모드 실기기 테스트 - [ ] 사주 결과 페이지 i18n: 시주/일주 등 한글 하드코딩된 라벨들 다국어 처리
- [ ] 영문 결과 검증: AI가 생성한 영문 리포트의 용어 일관성 최종 확인
- [ ] 결제 연동: PortOne을 통한 실질적인 결제 시스템 구축 시작
- [ ] 도메인 구매 및 연결: 서비스 런칭을 위한 공식 도메인 확보
메모: 레이아웃 수정 과정에서
tmp/디렉토리에 생성된 다양한 Playwright 디버깅 스크립트들은 향후 유사한 CSS 이슈 발생 시 재활용할 수 있도록 보존 처리했습니다.