커피넛

숨쉬는 다람쥐

게이미피케이션 기반 대기 및 날씨 정보 서비스

ReactTypeScriptZustandSpring BootOpenAIAWS EC2Docker

숨쉬는 다람쥐

게이미피케이션 기반 대기 및 날씨 정보 서비스

프로젝트 개요

대기 오염과 날씨 정보를 단순히 제공하는 것을 넘어, 게이미피케이션 요소를 통해 사용자가 재미있게 정보를 확인하고 참여할 수 있는 서비스를 개발했습니다.

팀 구성

  • Frontend: 2명
  • Backend: 3명
  • 본인 역할: 프로젝트 팀장, 프론트엔드 개발

주요 기능

  1. 대기 오염 정보 조회: 위치 기반 실시간 대기 오염 정보 제공
  2. 날씨 정보 조회: 현재 날씨와 예보 정보 제공
  3. 다람쥐 챗봇: LLM으로 대기 오염 및 날씨 관련 질문에 답변
  4. 게이미피케이션: 요소와 게임으로 도토리를 획득해 다람쥐를 육성

기술 스택

구분기술
언어JavaScript, TypeScript, Java, Python
프레임워크React, Zustand, Spring Boot
APIOpenAI, OpenWeather, 공공데이터(에어코리아, 기상청)
서버AWS EC2, Docker, RDS (MySQL), AWS Load Balancer
모니터링Sentry, Google Analytics, WhaTap, JMeter

역할 및 업무

프로젝트 리딩 및 일정 관리

  • 팀원 별 작업 분담 및 스프린트 플래닝 관리
  • 일일 스크럼 및 스프린트 회고 진행

프론트엔드 CI/CD 배포 파일 작성 및 배포

  • EC2에 Nginx 설정, 도메인 및 SSL 인증서 연결, 로드밸런서 설정 작업 수행
  • GitHub Actions를 활용해 React 배포 리소스 파일 빌드 및 SCP 명령어로 EC2 서버의 도메인 연결 폴더에 자동 배치

API 통신 및 페이지 레이아웃 구현

  • 게임(떨어지는 도토리 받기), 일일 미션 체크, 미션 완료, 도토리 지급, OX 퀴즈, 로그인 등 주요 기능과 연동되는 백엔드 API를 활용하여 프론트엔드 기능 구현
  • 메인, 대기질 조회, 날씨 조회, 옷 추천, 로그인, 문의하기 페이지 등의 레이아웃을 설계 및 구현

서버 모니터링 환경 설정

  • Sentry, Google Analytics, WhaTap을 이용해 서버 상태 및 성능을 모니터링할 수 있는 환경 구축
  • 서버 로그, 사용자 행동 추적, 실시간 오류 탐지를 웹훅을 이용하여 실시간 온콜 대응

주요 문제 해결

(1) 실 사용자 피드백: 로그인 하지 않으면 어떤 서비스인지 모르겠어요

기존 서비스: 로그인이 필요한 서비스에 접근할 경우, 로그인하지 않은 상태라면 해당 페이지로 이동 시 바로 로그인 페이지로 강제 이동

사용자 피드백: 단순히 메뉴나 페이지 이름만으로는 어떤 서비스인지 파악하기 어렵고, 그 의도나 기능을 충분히 이해하기 어려움

해결: IT 서비스인 "요즘IT"를 참고하여, 로그인하지 않은 상태에서도 서비스의 특징과 기능을 어느 정도 파악할 수 있도록 페이지 디자인(구성)을 개선

(2) 서버 다운 2회: 원인 분석과 해결 과정

초기 서버 다운 상황: AWS EC2 인스턴스에 접속 불가 현상이 있었고, 약 10분 이내에 AWS 내부 문제로 인해 복구됨

두 번째 서버 다운 상황:

  • AWS EC2 내 Spring Boot 애플리케이션 로그 및 Sentry 로그 분석을 통해, AWS RDS 데이터베이스의 max_connections 제한(프리 티어 최대 40)이 원인임을 확인
  • RDS 로그 분석 결과, 평소 평균 접속 수는 20대였으나, 사용자가 몰리는 시간대에는 30 후반대까지 치솟아 40에 도달하는 순간 DB와 애플리케이션 간 연결이 끊기며 서버 다운 발생

해결책: RDS 인스턴스의 티어를 한 단계 상향(small)하고, skip_name_resolve 옵션을 활성화한 뒤 VPC 설정을 적절히 조정함으로써 이후에는 동일한 서버 다운 현상이 재발하지 않음

성과

2차 릴리즈: 추가 기능 개발 동시에 전 페이지 리디자인 & API 내부 로직 개선

  • 기존 페이지 대비 UI/UX 중심의 디자인으로 개선
  • 기존 실시간성 요구사항을 반영한 API 로직 변경으로 API 응답 시간 단축 (약 8초 → 1초)
  • MVP 출시 당시 사용자 수(약 135명) 대비 2차 릴리즈 이후 475명으로 증가 (약 251% 성장)

실 사용자 피드백 반영 및 적용

  • 페이지를 접속할 수 있게 하여 어떤 서비스인지 먼저 보여주고, 자연스럽게 로그인 유도
  • 이를 통해 신규 사용자를 촉진하고 더 많은 사용자를 확보

실시간 모니터링 및 온콜 대응

  • WhaTap / Sentry / Google Analytics를 통한 실시간 모니터링 서비스 적용
  • 서버 다운 총 2회 발생, 각각 온콜 대응을 통해 문제 분석 및 다운타임 최소화