# Changelog 라온누리 프로젝트의 모든 주요 변경사항을 기록합니다. --- ## [Unreleased] ### 계획 중 - 서버 사이드 Redis 캐싱 - Rate Limiting 구현 --- ## [2025-12-02] - 피드 시스템 및 영감 생성 ### Added - **피드 시스템 API**: 4개 엔드포인트 추가 - GET /api/feed/daily-prompt - 오늘의 글감 조회 - GET /api/feed/inspirations - 추천 영감 목록 - GET /api/feed/weekly-stats - 주간 통계 - GET /api/feed/team-activity - 팀 활동 - POST /api/user/[uid]/weekly-goal - 주간 목표 설정 - **FeedManager**: 피드 데이터 관리 (2분 캐싱) - **피드 컴포넌트**: TodayTopicCard, WeeklyGoalCard, RecentActivityCard, InspirationCard - **GlassCard 컴포넌트**: 반투명 배경 + 블러 효과 통일 - **AI 영감 자동 생성**: Cloud Function `generateDailyInspirations` (매일 새벽) - Vertex AI (Gemini 2.5 Flash) - Unsplash API 이미지 검색/다운로드 - Firebase Storage 저장 - 크레딧 정보 저장 - **AI 영감 수동 생성**: HTTP Function `generateInspirationsManual` - **Vertex AI 라이브러리 변경**: @google-cloud/vertexai → @google/genai v1.29.0 - **Unsplash API 키**: Secret Manager로 관리 - **Container 레이아웃 확장**: maxW 1200px → 1400px - **Tlab신영복체 폰트**: 글쓰기 페이지 제목에 적용 - **ModeSelectionCard UI 개선**: 이미지 드롭 쉐도우, 전환 효과 ### Changed - Vertex AI 클라이언트: 싱글톤 패턴으로 인스턴스 재사용 - Vertex AI 모델 업그레이드: gemini-1.5-flash → gemini-3.1-flash-lite - InspirationCard: Unsplash 크레딧 표시 제거 (저장은 유지) ### Fixed - Unsplash Rate Limit 방지: API 호출 간격 1초 추가 - 영감 재생성 시 기존 데이터 덮어쓰기 옵션 --- ## [2025-12-01] - 글쓰기 모드 선택 ### Added - **글쓰기 모드 선택 화면**: 글부터 쓰기 / 그림부터 올리기 - **URL 파라미터**: ?mode=wrt|img로 모드 관리 - **ImageDropzone 컴포넌트**: 드래그앤드롭 이미지 업로드, 미리보기 - **ImageFirstLayout**: 이미지+에디터 2컬럼 레이아웃 - **pendingImageStore**: IndexedDB 기반 이미지 임시 저장 (새로고침 유지) - **캐릭터 이미지**: startWriting.png, uploadImage.png ### Changed - 모드 선택 카드 디자인: 그라데이션 배경, 상단 장식 바, 제목 배지 - 모드 선택 카드 이미지: 크기 증가 180px → 240px - 호버 애니메이션 개선 ### Translations - modeSelection namespace 추가 (ko/en/ja) --- ## [2025-11-28] - 이미지 업로드 플로우 개편 ### Added - **/imageUpload 페이지**: AI 생성/직접 업로드 선택 - **WritingManager.uploadUserImage()**: 클라이언트 사이드 이미지 리사이즈 - Canvas API 사용 (1920x1080 최대, 85% 품질) - Firebase Storage 업로드 - **WritingManager.analyzeWritingBackground()**: fire-and-forget 패턴 - **가격정책 페이지** (/pricing) - 4개 플랜: Free, Classroom, Academy, School - 월간/연간 결제 토글 (20% 할인) - FAQ 섹션 - **댓글 시스템** - Comment 데이터 모델 (계층 구조, 반응형) - CommentList/CommentItem/CommentInput 컴포넌트 - API Routes 구현 (GET/POST/PUT/DELETE) - 낙관적 업데이트 ### Changed - Write 페이지 저장 플로우: 저장 → 백그라운드 분석 → /imageUpload 리다이렉트 - Interaction 페이지: 이미지 없으면 /imageUpload로 자동 이동 - authStore.isLoading 초기값: false → true (리다이렉트 방지) ### Removed - GenerateImageDialog 제거 (플로우 변경) ### Translations - imageUpload namespace 추가 (ko/en/ja, 15개 키) - pricing namespace 추가 (ko/en/ja, 40개 키) --- ## [2025-11-27] - 팀 공개 설정 및 커버 이미지 ### Added - **팀 공개 설정 시스템** - Team 타입 확장: isPublic, allowPublicWritings, description - 팀 관리 페이지: 공개 설정 UI - 공개 팀 조회 API (커서 기반 페이지네이션) - 공개 글 조회 API (팀별) - **팀 커버 이미지 시스템** - Team.coverImage 필드 - POST/DELETE /api/team/[teamId]/cover-image - TeamCoverImageUploader 컴포넌트 (드래그앤드롭, 16:9) - Firebase Storage 업로드 (5MB 제한) - TeamCard 이미지 표시 - **공개 팀 목록 페이지** (/team/all) - TeamCard 컴포넌트 (글래스모피즘) - 무한 스크롤 페이지네이션 - **채점 시스템 전면 개편** - 0~1 품질 기반 점수 (5단계) - 계층적 설정 (기본→팀→주제) - TeamScoringSettings/TeamRubricSettings 컴포넌트 ### Changed - 팀 상세 페이지: 3가지 뷰 모드 (멤버/공개/접근 불가) - 팀원 아바타 표시: photoURL 지원, 정식/익명 아이콘 구분 ### Translations - teams namespace 추가 (공개 팀 목록) - team.manage.publicSettings namespace - team.coverImage namespace (16개 키) --- ## [2025-11-26] - 익명 계정 연결 기능 ### Added - **POST /api/auth/merge-account**: 익명 계정 데이터 병합 API - Firestore 데이터 마이그레이션 (writings, topics, comments 등) - Realtime DB 데이터 마이그레이션 (drafts, monitoring) - 원자성 보장 (Batch, Transaction) - **서비스 레이어**: mergeAndLoginWithEmail, mergeAndLoginWithGoogle - **authStore**: mergeWithEmail, mergeWithGoogle 액션 - **LoginForm/SignupForm**: mode prop ('auth'|'link') - **LoginDialog**: link 모드 지원 ### Changed - 용어 변경: "병합" → "연결", "익명" → "임시" ### Removed - LinkAccountFlow 컴포넌트 (기존 폼 재사용) ### Translations - linkAccountDescription, mergeButton, linkButton 등 15개 키 (ko/en/ja) --- ## [2025-11-25] - 글 분석 및 이미지 왜곡 영역 ### Added - **POST /api/writing/[id]/analyze**: 서버 데이터 기반 글 분석 - **상호작용 컴포넌트**: AnalysisNeededBanner, AreaUnlockBadge, ImprovementHint, ScoreBadge - **점수 기반 영역 해금**: areaLimit.ts 로직 - **DistortionAreaData**: 이미지 왜곡 영역 데이터 모델 - **InteractiveImageViewer**: 왜곡 효과 + 애니메이션 - **팀 멤버 닉네임**: POST /api/team/add-member에 nickname 파라미터 ### Changed - WritingAnalysis 타입 확장 - 글 수정 시 왜곡 영역 저장/불러오기 --- ## [2025-11-23] - 이미지 비율 유지 및 CORS ### Added - **Firebase Storage CORS 설정** - firebase-storage-cors.json 생성 - gsutil cors set 명령어로 적용 - Canvas 이미지 조작 허용 ### Changed - **InteractiveImage 비율 유지** - useEffect로 이미지 원본 크기 측정 - Box에 aspectRatio 속성 적용 - Canvas 찌그러짐 방지 ### Fixed - 캐시 무효화: cacheBustedSrc (?t=Date.now()) - CDN 캐시 문제 해결 (쿼리 파라미터) --- ## [2025-11-22] - Server Component 전환 및 BackButton ### Added - **BackButton 공통 컴포넌트** - router.back() 기본 동작 - href prop으로 특정 경로 이동 - label prop으로 텍스트 커스터마이징 ### Changed - **글 상세보기 Server Component 전환** - /writing/[writingId]/page.tsx - Firebase Admin SDK 사용 - SEO 최적화 (서버 HTML 생성) - SNS 공유 미리보기 지원 - 초기 로딩 성능 개선 --- ## [2025-11-21] - 주제 생성 Dialog 통합 및 UI 개선 ### Added - **수정 모드 UX 대폭 개선** - Sticky 헤더바 (오렌지 그라데이션, z-index:100) - 강조된 테두리 (2px solid 오렌지) - 섀도우 효과 (글로우) - 색상 시스템 정립 ### Changed - **주제 생성 Dialog 통합** - CreateTeamTopicDialog 삭제 (674줄) - CreateTopicDialog로 통합 (개인/팀 공용) - onSubmit 콜백 패턴 - **홈 페이지 모듈화** - 6개 컴포넌트 분리 (src/components/home/) - 580줄 → 223줄 (62% 감소) - **수정 모드 주제 변경 차단** - TopicSelector readonly prop - 데이터 무결성 보장 ### Removed - "새 글쓰기" 버튼 (write 페이지) - 미사용 i18n 키 (newWriting, discardConfirm) --- ## [2025-11-20] - AI 이미지 생성 스타일 개선 ### Changed - **Imagen 4.0 Fast 업그레이드** - **일관된 스타일 가이드**: 애니메이션/만화 스타일 - **한국 문화권 고려**: "Korean elementary student" 명시 - **Negative Prompt 강화**: 과도한 사실주의, 어두운 분위기 차단 - **키워드 개수 증가**: 6-12개 --- ## [2025-11-19] - Draft 클라우드 동기화 및 팀 코드 개선 ### Added - **Draft 클라우드 동기화** - localStorage + Realtime DB 하이브리드 - syncStatus 필드 ('local'|'synced'|'syncing') - DraftManager: syncToCloud, loadDraftsFromCloud, mergeDrafts - SavedDraftsDialog 배지 표시 - **팀 코드 예약 반환 로직** - generate-code API: previousCode 파라미터 - 새 코드 받기 시 이전 예약 해제 - 중복 호출 방지 (isGeneratingCode) ### Changed - **AI Delta 전송 로직 개선** - diff-match-patch 도입 - 정확한 diff 계산 - 5자 미만 변경 누적 - 완화된 기준 (80%, 200자) ### Security - **XSS 방지**: HTML Sanitization 구현 (sanitize-html) - 백엔드 자동 세탁 (src/lib/server/writing.ts) - 26개 유닛 테스트 --- ## [2025-11-18] - 다국어 및 팀 코드 개선 ### Added - **팀 코드 다국어 생성** - 언어별 단어 목록 (한국어/영어/일본어) - generateTeamCode(locale) - **Realtime DB 팀 코드 예약 시스템** - teamCodeReservation.ts 서버 레이어 - Transaction 기반 atomic 예약 - 5분 TTL, onDisconnect 자동 정리 - Race condition 완전 방지 - **팀 나가기 기능** - 팀 상세 페이지 "팀 나가기" 버튼 - POST /api/team/remove-member 권한 체크 - **Level 1 중복 체크 로직 (UID 기반)** - Custom Token API (익명 계정만 발급) - 정식 계정 탈취 방지 - **내가 쓴 글 목록 + 글 수정 기능** - WritingCard 컴포넌트 - /writings 전체 글 목록 페이지 - /write 페이지 수정 모드 (?id=xxx) - **주제별 학생 분석 API** - GET /api/topic/[topicId]/writers - TopicMemberAnalysisSection UI ### Changed - **팀 관리 컴포넌트 다국어 완성** - TeamTopicManager, LiveWritingMonitor - StudentLoginFlow 일본어 번역 ### Translations - team.create, team.detail, team.manage 일본어 (126개 키) - writings 섹션 (ko/en/ja, 22개 키) - errors.team namespace (6개 키) --- ## [2025-11-17] - AI 이미지 생성 및 AI 설정 UI ### Added - **AI 이미지 생성 시스템** - Vertex AI Imagen 3.0 통합 - AI 장면 분리 기능 (Gemini Flash) - AI 프롬프트 최적화 (키워드 추출) - 4단계 플로우 (장면 추출 → 선택 → 최적화 → 생성) - sceneExtractionService.ts, imagenService.ts, imageStorage.ts - SceneSelector 컴포넌트 - GenerateImageDialog 개선 - **AI 설정 고급 UI** - AIConfigDialog 컴포넌트 - Slider 3개 (멈춤 감지/최대 힌트/쿨다운) - 커스텀 힌트 레벨 카드 (우상단 삼각형 인디케이터) ### Translations - write.generateImage, write.extractScenes namespace (22개 키) - team.manage.aiConfig namespace (28개 키, ko/en/ja) --- ## [2025-11-14] - 개별 글 분석 및 AI 도우미 ### Added - **개별 글 분석 결과 저장** - Writing.analysis 필드 - SpellingError 타입 - generateWritingContentHash 유틸 - contentHash 기반 재분석 방지 (90% 비용 절감) - **AI 글쓰기 도우미 시스템** - 4단계 점진적 힌트 (질문 → 방향 → 선택지 → 예시) - useWritingInactivityDetection 훅 (5분 멈춤 감지) - InactivityPrompt, HintDisplay 컴포넌트 - writingAssistanceService.ts - POST /api/writing-assistance - GET/PUT /api/team/[teamId]/ai-config - Team.aiAssistanceConfig 필드 ### Changed - 글쓰기 페이지: 저장 시 AI 분석 병렬 수행 - 실시간 분석 제거 (저장 시에만) ### Translations - aiAssist namespace (19개 키, ko/en/ja) --- ## [2025-11-13] - 다국어 지원 시스템 (i18n) ### Added - **next-intl 라이브러리** 설치 및 설정 - **[locale] 라우팅 구조**: /ko/*, /en/*, /ja/* - **middleware.ts**: 브라우저 언어 자동 감지 - **3개 언어 번역 파일**: messages/ko.json, en.json, ja.json (각 407줄, 220+ 키) - **LocaleSwitcher 드롭다운**: 국기 이모지, 체크 표시 ### Changed - **전체 페이지 번역** - Navbar (4개 링크) - Landing 페이지 (20+ 항목) - Home, Write, Team 페이지 - 인증 컴포넌트 (70+ 항목) - site.ts 텍스트 → 번역 파일로 이동 ### Config - next.config.ts: next-intl 플러그인 - i18n/routing.ts, i18n/request.ts 설정 - NEXT_LOCALE 쿠키 저장 --- ## [2025-11-12] - 패턴 분석 캐싱 및 실시간 모니터링 ### Added - **Content Hash 기반 3단계 캐싱** - L1: localStorage (영구, LRU 10개) ~1ms - L2: Firestore patternAnalyses (영구) ~100ms - L3: Server in-memory (5분, 50개) ~50ms - AI 비용 절감 (전체 사용자 기준 1회 분석) - **실시간 글쓰기 모니터링** - Firebase Realtime Database 기반 - WritingSessionManager (5초 주기) - LiveWritingMonitor 컴포넌트 - 3가지 상태 관리 (작성 중/나감/대기) - 작성 속도 계산 (글자/분) - Sparkline 그래프 (Area Chart) - 30초 타임아웃 체크 - **Writing API 구현 완료** - POST/GET/PUT/DELETE /api/writing - src/lib/server/writing.ts (Firestore CRUD) - **패턴 분석 - 팀 소유자 기능** - 3가지 분석 타입 (self/by-team/by-topic) - TopicMemberAnalysisSection UI ### Performance - 캐시 히트: ~1ms (localStorage) - 완전 무료 (Realtime DB 100명) --- ## [2025-11-11] - 실시간 피드백 시스템 ### Added - **Vertex AI 기반 텍스트 분석** - POST /api/analyze-text - Delta 전송 지원 (40% 비용 절감) - Multi-region failover (3개 region) - 서버 캐싱 (LRU, 1분) - **Google AI SDK 마이그레이션**: @google-cloud/vertexai → @google/genai v1.29.0 - **텍스트 분석 평가 기준 개편**: 오감(4점) + 감정(2점) + 대화(2점) + 의성어(2점) - **분석 히스토리 시스템**: Draft.analysisHistory (최대 5개) - **맞춤법 검사 서비스**: spellingService.ts (독립 debounce 5초) - **글 작성 패턴 분석**: WritingPatternDialog/Display - **실시간 하이라이트** - SpellingHighlight/SensoryWordHighlight Extensions - EditorTooltip (Portal + ESC/외부 클릭) - **Toast 알림**: 분석 시작/완료/실패 ### Changed - `descriptive` → `emotion` - 프롬프트 최적화 (칭찬 강화, 제안 0~1개) --- ## [2025-11-10] - 5단계 보안 레벨 시스템 ### Added - **TeamSecurityLevel enum** (1-5) - OPEN, NAME_LIST, AUTH_REQUIRED, EMAIL_LIST, CLOSED - **명단 관리 API** - POST/DELETE /api/team/:teamId/allowed-names - POST/DELETE /api/team/:teamId/allowed-emails - POST /api/team/:teamId/security-level - **SecurityLevelSelector**: RadioCard 기반 UI - **다중 글조각 관리**: DraftManager (최대 10개) - **SavedDraftsDialog**: syncStatus 배지 ### Changed - **User 타입 최소화** - FirestoreUser/User 분리 - Firebase Auth = Single Source of Truth - **닉네임 저장 위치**: users.nicknames → team.members[uid].nickname - **memberUids 제거**: Object.keys(members) 사용 ### Removed - useColorModeValue() 전체 제거 (Semantic token 사용) ### Translations - securitySelector namespace (13개 키, ko/en/ja) --- ## [2025-11-07] - 매니저 패턴 API 전환 ### Added - **API 타입 시스템**: ApiResponse, HttpMethod Enum - **클라이언트 캐싱**: BaseManager (TTL, 자동 무효화) - **팀 주제 시스템**: 팀 소유자가 팀 주제 생성 - **API 명세서**: API_SPEC.md (23개 엔드포인트) ### Changed - TeamManager, StudentManager → API 호출 방식 - Firestore 직접 호출 제거 - **아키텍처 단순화**: students → users 컬렉션, PIN 제거 - TopicSelector: 팀/개인 배지 표시 ### Removed - 그룹(Group) 기능 완전 제거 --- ## [2025-11-06] - 팀 코드 시스템 ### Added - **한글 팀 코드 생성**: "춤추는 파란 사자" - **Anonymous Auth**: Firebase 익명 로그인 - **teamService, studentService**: 백엔드 로직 - **PIN SHA-256**: 암호화 저장 - **정식 계정 연결**: linkWithCredential - **팀 관리 UI**: 팀 목록, 생성, 멤버, 관리 페이지 - **학생 관리 기능**: 이름 수정, 강퇴 (Menu + Dialog) ### Changed - 용어 변경: "클래스" → "팀", "교사" → "소유자" - currentStudent 중심 authStore 재설계 - Semantic token 적극 활용 --- ## [2025-10-31] - 개인 주제 생성 UI ### Added - **CreateTopicDialog**: 태그 입력 필드 - 키보드 네비게이션 - 방향키 선택 - Backspace/Delete 삭제 --- ## [2025-10-30] - 글쓰기 페이지 및 주제 선택 ### Added - **글쓰기 페이지**: Tiptap 순수 텍스트 에디터 - Editable 제목 - LocalStorage 자동 저장 - 하단 고정 버튼 - **Firestore 연동**: 글 저장/불러오기/삭제 - **Manager 패턴 도입**: WritingManager (싱글톤) - **주제 선택 기능** - TopicManager, TopicSelector - 개인 주제 시스템 - 템플릿 미리채우기 --- ## [2025-10-29] - 인증 기반 라우팅 ### Added - **인증 기반 라우팅**: `/`와 `/home` 분리 - 자동 리다이렉트 구현 --- ## [2025-10-28] - 회원가입 및 테마 ### Added - **회원가입 기능** - LoginDialog 페이드 전환 - 비밀번호 강도 게이지 - HIBP API 연동 - **커스텀 테마**: Chakra UI v3 테마 시스템 - **SEO 최적화**: 메타데이터, OpenGraph, StructuredData - **랜딩 페이지**: Hero, Features, How It Works, CTA - **네비게이션**: Navbar, 다크모드 지원 --- ## [2025-10-27] - 인증 시스템 ### Added - **로그인 기능**: 이메일/비밀번호 - **Google OAuth**: 소셜 로그인 - **상태 관리**: Zustand 인증 스토어 --- ## [2025-10-26] - Firebase 연동 ### Added - **Firebase Auth**: 설정 및 초기화 --- ## [2025-10-25] - 프로젝트 초기화 ### Added - **프로젝트 설정**: Next.js 16, React 19, TypeScript --- ## 범례 - **Added**: 새로운 기능 - **Changed**: 기존 기능 변경 - **Deprecated**: 곧 제거될 기능 - **Removed**: 제거된 기능 - **Fixed**: 버그 수정 - **Security**: 보안 관련 변경 - **Performance**: 성능 개선 - **Translations**: 다국어 번역 추가/수정 - **Config**: 설정 파일 변경 --- © 2024 BlueNovaLab. All rights reserved.