숨쉬는 다람쥐
게이미피케이션 기반 대기 및 날씨 정보 서비스
ReactTypeScriptZustandSpring BootOpenAIAWS EC2Docker
숨쉬는 다람쥐
게이미피케이션 기반 대기 및 날씨 정보 서비스
프로젝트 개요
대기 오염과 날씨 정보를 단순히 제공하는 것을 넘어, 게이미피케이션 요소를 통해 사용자가 재미있게 정보를 확인하고 참여할 수 있는 서비스를 개발했습니다.
팀 구성
- Frontend: 2명
- Backend: 3명
- 본인 역할: 프로젝트 팀장, 프론트엔드 개발
주요 기능
- 대기 오염 정보 조회: 위치 기반 실시간 대기 오염 정보 제공
- 날씨 정보 조회: 현재 날씨와 예보 정보 제공
- 다람쥐 챗봇: LLM으로 대기 오염 및 날씨 관련 질문에 답변
- 게이미피케이션: 요소와 게임으로 도토리를 획득해 다람쥐를 육성
기술 스택
| 구분 | 기술 |
|---|---|
| 언어 | JavaScript, TypeScript, Java, Python |
| 프레임워크 | React, Zustand, Spring Boot |
| API | OpenAI, 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회 발생, 각각 온콜 대응을 통해 문제 분석 및 다운타임 최소화