
Cosmos는 NASA와 전 세계 우주 커뮤니티로부터 제공되는 최신 이미지, 뉴스, 천문 이벤트를 누구나 쉽고 재미있게 접할 수 있도록 기획된 우주 정보 커뮤니티 플랫폼입니다. 단순한 정보 제공을 넘어, 사용자들이 직접 촬영한 천체 사진 공유, 영화 리뷰, 자유로운 토론 등 커뮤니티 기능을 통해 소통할 수 있습니다. 또한 퍼즐과 퀴즈 같은 게임 콘텐츠를 결합하여 우주를 친근하게 즐기고 자연스럽게 지식을 확장할 수 있는 경험을 제공합니다.
2025.06. - 2025.08.
팀 프로젝트 (FrontEnd 5명)

Supabase 핵심 기능 구현
- • 데이터베이스 설계 및 ERD 구조화
사용자, 게시글, 댓글, 좋아요 등 핵심 테이블을 정규화하고 관계형 모델로 구조화하여 데이터 중복을 최소화하고 조회 성능을 개선
- • 실시간 댓글 동기화 (Realtime)
Supabase Realtime을 활용해 댓글 작성/삭제가 즉시 반영되도록 구현하여, 새로고침 없이도 사용자 간 상호작용이 원활해짐으로써 커뮤니티 UX 개선
- • 이미지 관리 (Storage)
아바타 이미지 업로드·URL 저장·리셋 기능을 제공하여 개인화 경험을 강화하고 프로필 관리 편의성 향상
- • 데이터베이스 설계 및 ERD 구조화

퍼즐 게임 및 랭킹 기능 구현 (우주 이미지 활용)
- • 퍼즐 난이도 및 시간 제한 설계
react-jigsaw-puzzle 라이브러리를 활용하고, 주제(Category)와 난이도(Difficulty)에 따라 퍼즐 조각 수와 제한 시간을 차등 설정하여 다양한 난이도 경험 제공
- • 효율적인 게임 상태 관리
Zustand를 이용해 게임 상태(퍼즐 조각, 타이머, 점수 등)를 전역으로 관리하여 렌더링 지연 없는 부드러운 상호작용 구현
- • 점수 계산 및 랭킹 보드 구현
퍼즐 완료 시간과 난이도 기반으로 점수를 계산하고 Supabase에 기록하여 누적 점수를 관리 또한 실시간 점수 반영 및 랭킹 조회 기능으로 사용자 간 경쟁 유도 및 재플레이 장려
- • 퍼즐 난이도 및 시간 제한 설계

한글 번역 시스템 구축 (영어 기반 우주 콘텐츠)
- • AI 기반 번역 및 요약 기능 구현
영어로 제공되는 우주 콘텐츠를 GPT와 Gemini를 활용해 자연스럽게 한글로 번역하고 핵심 요약하여 사용자가 즉시 이해 가능, 접근성 향상 및 UX 개선
- • BLEU/BERTScore 성능 평가로 최적 번역 방식 선택
번역 정확성과 자연스러움을 평가해 GPT와 Gemini 모델을 콘텐츠 특성에 맞게 사용함으로써 신뢰도 높은 번역 제공과 사용자 만족도 증가
- • Supabase 기반 캐싱 전략 적용
이미 번역된 콘텐츠는 DB에서 즉시 불러와 API 호출 없이 빠르게 표시하여 속도와 비용 최적화, 페이지 로딩 시간 단축과 서버 비용 절감
- • AI 기반 번역 및 요약 기능 구현

디자인 시스템 및 UI/UX 설계 총괄
- • 컴포넌트 기반 UI 디자인 시스템 구축 및 반응형 UI/UX 전반 구조 설계
Home 랜딩 페이지 & Contact 페이지 구현
- • GSAP ScrollTrigger을 활용해 스크롤에 따라 인터랙션이 변화하는 랜딩 페이지를 구성하여 몰입감 있는 사용자 경험을 제공
- • 다크/라이트 테마에 따라 react-globe.gl, three.js 기반의 지구(라이트) 또는 달(다크) 3D 모델이 표시되며, 마우스 움직임에 따라 회전/확대
- • MutationObserver로 테마 변경 실시간 감지 및 적용
이미지 · 폰트 리소스 용량 최적화
메인 시각 요소로 사용된 우주 관련 이미지 용량이 수 MB에 달하고 폰트(TTF/OTF) 용량도 500KB 이상으로 지나치게 커서 초기 로딩 지연이 발생하고, 주요 콘텐츠보다 리소스 로딩 대기 시간이 우선되어 LCP가 늦어지며 UX가 저하되고 트래픽 부담도 증가했습니다.해결 과정
• 이미지 WebP 변환 (손실률 -q 75 기준, cwebp CLI 사용)
• 폰트 woff2 변환 (Transfonter 사용)
• 불필요한 리소스를 제거하고 용량 최적화를 통해 초기 로딩 속도 향상
결과
• 이미지 용량 5.54MB → 445KB, 약 91.9% 절감
• 폰트 용량 2.0MB → 43KB, 약 97.9% 절감
• 전체 리소스 7.5MB 이상 → 488KB, 약 93.5% 용량 감소
• 초기 로딩 속도와 LCP 크게 개선, 사용자 체감 성능 향상
배운 점
• WebP와 woff2 변환을 통해 대용량 리소스 최적화 경험
• 웹 성능 개선에서 이미지와 폰트 최적화가 UX와 트래픽 효율에 큰 영향을 미침
• 프론트엔드에서 리소스 효율화 전략을 설계하고 적용하는 실무 경험 습득
콘텐츠 번역 비용 및 속도 최적화
영어로 된 우주 관련 콘텐츠를 번역·요약하기 위해 매번 OpenAI/Gemini API를 호출하며, 동일한 콘텐츠임에도 페이지 접근 시마다 중복 요청이 발생해 대량 번역 시 속도 지연과 API 사용량 과다로 인해 비용이 증가하는 문제가 발생했습니다.해결 과정
• 개선 전: 매 컴포넌트 렌더링 시 useEffect 내에서 번역용 API 호출→ 이미 번역한 데이터도 매번 새로 요청되어 리소스 낭비
• 개선 후: 콘텐츠 별 ID(date) 기반 캐싱 로직 적용 → Supabase `translations` 테이블 생성
• → 요청 시 해당 날짜의 번역 결과가 Supabase에 존재하는지 먼저 조회
• → 없을 경우에만 API 요청 후 Supabase에 저장
결과
• 요청 속도: 평균 2~3초 이상 → 100~200ms 수준
• API 비용: 불필요한 중복 요청 다수 → 약 70% 이상 절감
• UX 반응성: 느림(로딩 빈도 높음) → 대부분 캐시로 빠른 응답
• 코드 유지보수: 중복 요청 처리 로직 필요 → 단순화 및 재사용 용이
배운 점
• 캐싱 전략을 통해 외부 API 호출 빈도를 줄이면 비용과 성능을 동시에 개선할 수 있음
• 데이터베이스(Supabase) 기반 캐시를 활용하면 중복 호출을 체계적으로 관리 가능
• API 호출 최소화와 UX 반응성 사이의 균형 중요
게시물 내 댓글 실시간성 부여
커뮤니티 내 게시글에서 사용자가 댓글을 작성해도 실시간으로 반영되지 않아, 다른 사용자의 댓글을 확인하려면 새로고침이 필요하며, 이로 인해 사용자 간 상호작용이 단절되고 커뮤니케이션 흐름이 끊겨 사용자 경험이 저하되었습니다.해결 과정
• 개선 전: 댓글 작성은 클라이언트 상태만 갱신, 조회는 fetchCommentsByPostId(postId)로 별도 요청 → 실시간 반영 불가
• 개선 후: Supabase Realtime 채널 도입
• → INSERT, DELETE 이벤트 구독으로 자동 상태 업데이트
• → 작성자 외 사용자도 새로고침 없이 댓글 확인 가능
결과
• 실시간 댓글 반영으로 커뮤니티 몰입도와 상호작용 개선
• 클라이언트 단 로직 단순화 (자동 상태 업데이트)
• 새로고침 의존도 제거로 UX 전반 개선
배운 점
• Supabase Realtime은 channel 및 postgres_changes 구독만으로 간단히 실시간 시스템 구축 가능
• 실시간 처리는 사용자 간 상호작용을 강화하고 커뮤니티 경험에 필수적임
• 실시간 로직 적용 시 중복 반영 방지 및 구독 해제(clean-up) 관리가 중요함