Ac.T(관광데이터 공모전)

🚀 프로젝트 개요

Ac.T 프로젝트는 사용자의 활동 기록과 리뷰 데이터를 바탕으로 맞춤형 여행지를 추천하는 사용자 활동 기반 여행 추천 시스템이다. 단순한 장소 추천을 넘어, 실제 사용자의 행동 데이터를 분석하여 개인화된 여행 경험을 제공하는 것을 목표로 개발하였다.

한국관광공사에서 주최한 2024 관광데이터 공모전 프로젝트 앱 부문으로 참여했고, 관광 데이터(openAPI) 를 분석하여 맞춤형 여행 코스를 추천하는 서비스를 개발했다. 아쉽게도 수상을 하진 못 했지만 다양한 시도를 할 수 있는 경험이었다!

💡 주요 성과

  • 실시간 관광지 정보 제공 API 구축
  • 업체 정보 자동 매핑 및 정제 기능
  • 활동 지역의 날씨 정보와 업체 정보를 연동하여, 현재 환경에 최적화된 활동 추천
  • 사용자의 누적 활동 데이터(장소, 시간, 활동 유형 등)를 분석하여 유사한 활동을 선호하는 다른 사용자들과 비교하고, 개인화된 여행지나 활동을 추천
  • 특정 활동을 완료하거나 특정 지역을 여러 번 방문하는 등, 다양한 조건을 만족할 경우 사용자에게 배지를 부여하는 시스템을 구현

🛠️ 기술 스택

React Node.js Python MongoDB

시스템 아키텍처

Ac.T 프로젝트는 사용자 중심의 데이터를 기반으로 여행지를 추천하기 위해, 모바일 클라이언트, 백엔드 서버, 데이터베이스, 외부 API 연동 모듈로 구성된 모듈화된 아키텍처를 채택했다.

📌 전체 아키텍처 구성

[사용자 모바일 앱]
       ↓
[React Native 프론트엔드]
       ↓ API 요청
[Flask 기반 백엔드 서버]
       ├─ 사용자 인증 / 활동 기록 처리
       ├─ 날씨 데이터 수집 (외부 API)
       ├─ 업체 정보 매핑 (공공 API)
       ↓
[MongoDB 데이터베이스]
       ├─ userActivities (활동 정보 저장)
       ├─ vendors (업체 정보)
       ├─ weatherData (날씨 기록)
       └─ badges (사용자 배지 상태)
  

구성 요소 설명

- 마이크로서비스 아키텍처 패턴 적용
- Express.js 기반 RESTful API 서버
- Socket.IO를 통한 실시간 통신 구현
- Docker 컨테이너화로 배포 환경 표준화
- HTTPS 보안 적용 (SSL 인증서 설정)
  • 모바일 클라이언트 (React Native)
    사용자가 활동을 입력하거나 후기를 등록하고, 실시간 상태 및 추천 정보를 UI로 출력한다.
  • 백엔드 서버 (Flask + RESTful API)
    사용자 요청 처리, 데이터 전송, 활동 기록 처리, 외부 API 통신을 담당한다. Docker로 컨테이너화하여 GCP VM 인스턴스에 배포하였다.
  • 데이터베이스 (MongoDB)
    NoSQL 기반 유연한 구조로 userActivities, vendors, weatherData, badges 컬렉션을 중심으로 구성되어 있다. 사용자 활동 기록, 업체 정보, 날씨 데이터를 저장하고, 사용자 배지 상태를 관리한다.
  • 외부 API 연동
    날씨 API를 통해 활동 시간·위치 기반 기상 정보를 수집하고, 공공 관광 데이터 API를 통해 위치 기반 업체 정보를 수집·정제한다.

☁ 인프라 및 배포

  • Google Cloud Platform (GCP)
    VM 인스턴스를 활용하여 백엔드 서버를 운영하고, Docker 및 Gunicorn을 이용한 서비스 배포를 구현했다.
  • CI/CD 구성
    GitHub Actions 및 Docker Hub 연계를 통해 향후 자동 배포 구성을 고려하였으나 , 아직은 적용하지 않았다.

🔍 TroubleShooting

  • 2025-02-16» About GCP
  • 2025-01-18» 배포 과정 정리
  • 📝 Code Review

    🔌 OpenAPI

  • 2024-09-30» AI 활용
  • 2024-08-18» 기상청 단기예보 API 통합
  • 2024-08-01» 한국관광공사 Tour API 활용
  • © 2025 Jeewon Yoon   •  Powered by Soopr   •  Theme  Moonwalk