hyejuPortfolio
Back
COSMOS우주 콘텐츠 큐레이션 및 커뮤니티 플랫폼
COSMOS 목업
간단 소개이미지간단 소개

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

작업 기간이미지작업 기간

2025.06. - 2025.08.

프로젝트 유형이미지프로젝트 유형

팀 프로젝트 (FrontEnd 5명)

프로젝트 관련 링크이미지프로젝트 관련 링크
기술 스택이미지기술 스택
#React
#Typescript
#TailwindCSS
#zustand
#Supabase
#GSAP
#Three.js
구현한 기능이미지구현한 기능
  • 코스모스 기능 1

    Supabase 핵심 기능 구현

    • 데이터베이스 설계 및 ERD 구조화

      사용자, 게시글, 댓글, 좋아요 등 핵심 테이블을 정규화하고 관계형 모델로 구조화하여 데이터 중복을 최소화하고 조회 성능을 개선

    • 실시간 댓글 동기화 (Realtime)

      Supabase Realtime을 활용해 댓글 작성/삭제가 즉시 반영되도록 구현하여, 새로고침 없이도 사용자 간 상호작용이 원활해짐으로써 커뮤니티 UX 개선

    • 이미지 관리 (Storage)

      아바타 이미지 업로드·URL 저장·리셋 기능을 제공하여 개인화 경험을 강화하고 프로필 관리 편의성 향상

  • 코스모스 기능 2

    퍼즐 게임 및 랭킹 기능 구현 (우주 이미지 활용)

    • 퍼즐 난이도 및 시간 제한 설계

      react-jigsaw-puzzle 라이브러리를 활용하고, 주제(Category)와 난이도(Difficulty)에 따라 퍼즐 조각 수와 제한 시간을 차등 설정하여 다양한 난이도 경험 제공

    • 효율적인 게임 상태 관리

      Zustand를 이용해 게임 상태(퍼즐 조각, 타이머, 점수 등)를 전역으로 관리하여 렌더링 지연 없는 부드러운 상호작용 구현

    • 점수 계산 및 랭킹 보드 구현

      퍼즐 완료 시간과 난이도 기반으로 점수를 계산하고 Supabase에 기록하여 누적 점수를 관리 또한 실시간 점수 반영 및 랭킹 조회 기능으로 사용자 간 경쟁 유도 및 재플레이 장려

  • 코스모스 기능 3

    한글 번역 시스템 구축 (영어 기반 우주 콘텐츠)

    • AI 기반 번역 및 요약 기능 구현

      영어로 제공되는 우주 콘텐츠를 GPT와 Gemini를 활용해 자연스럽게 한글로 번역하고 핵심 요약하여 사용자가 즉시 이해 가능, 접근성 향상 및 UX 개선

    • BLEU/BERTScore 성능 평가로 최적 번역 방식 선택

      번역 정확성과 자연스러움을 평가해 GPT와 Gemini 모델을 콘텐츠 특성에 맞게 사용함으로써 신뢰도 높은 번역 제공과 사용자 만족도 증가

    • Supabase 기반 캐싱 전략 적용

      이미 번역된 콘텐츠는 DB에서 즉시 불러와 API 호출 없이 빠르게 표시하여 속도와 비용 최적화, 페이지 로딩 시간 단축과 서버 비용 절감

  • 코스모스 기능 4

    디자인 시스템 및 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) 관리가 중요함

COSMOS | FE 현혜주 포트폴리오