<aside> 🗺️
포켓몬고 처럼 AI 챗봇을 수집하자!
</aside>
본 프로젝트는 회사 동료와 함께 진행한 프로젝트로, “포켓몬고 처럼 AI 챗봇을 만들어볼까?” 에서 시작하였습니다. 사실 우리가 포켓몬고 하면 떠오르는 것은 내 위치 중심으로 다양한 포켓몬 들이 있고, 이를 잡기도 하고 레이드도 하는 등 다양한 이벤트를 **“위치 기반”**의 게이밍입니다.
사람들의 추억과 향수 그리고 “수집욕” 과 모바일 기기에서 할 수 있는 “간소화된 경쟁” 시스템, “수집형 RPG” 시스템 등으로 누구나 1번 쯤은 해봤을 겁니다. AI 챗봇을 GPS 기반으로 포켓몬 고 처럼 떠다니게 해서 사람들이 다양하게 이용해보면 어떨까? 에서 확장한 단계가 바로,
<aside> 🗺️
뭔가 거창해보이지만, 사실 AI + TMAP 조합 입니다.
</aside>
단순하게 생각하면 현재 내 위치 정보(GPS)에 AI 챗봇을 보여주면 됩니다. 하지만 임의의 챗봇을 만들기에는 너무 재미가 없었습니다. 따라서 현재 내 위치 기반으로 주변 상권(음식점, 숙박시설, 카페, 놀거리, 박물관, 공원 등) 정보 기반으로 한 AI 챗봇을 만들고 이와 대화를 할 수 있게 하는 것 입니다.
graph TB
subgraph "AMAP Project Structure"
subgraph "Root Level"
MAIN[main.py<br/>FastAPI 애플리케이션 진입점]
CONFIG[config.py<br/>설정 관리]
DEPS[dependencies.py<br/>의존성 주입]
LOGS[loggings.py<br/>로깅 설정]
REQ[requirements.txt<br/>Python 의존성]
DOCKER[Dockerfile<br/>컨테이너 설정]
BUILD[build.sh<br/>빌드 스크립트]
end
subgraph "App Layer"
subgraph "app/agents/"
subgraph "API Layer"
API_AGENT[agent_router.py<br/>에이전트 API]
API_USER[user_router.py<br/>사용자 API]
API_ACHIEVE[achievement_router.py<br/>업적 API]
API_PUSH[subsrbe_router.py<br/>푸시 알림 API]
end
subgraph "Core Layer"
CORE_AGENT[agent_manager.py<br/>에이전트 관리]
CORE_USER[user_manager.py<br/>사용자 관리]
CORE_ACHIEVE[achivement_manager.py<br/>업적 관리]
CORE_DB[d1_database.py<br/>데이터베이스]
CORE_TOOLS[tool_list.py<br/>도구 목록]
end
subgraph "Schema Layer"
SCHEMA_AGENT[agent_schemas.py<br/>에이전트 스키마]
SCHEMA_USER[user_schemas.py<br/>사용자 스키마]
SCHEMA_CHAT[chat_schemas.py<br/>채팅 스키마]
SCHEMA_MAP[map_schemas.py<br/>지도 스키마]
SCHEMA_ACHIEVE[achivement_schemas.py<br/>업적 스키마]
end
end
end
subgraph "External Services"
AWS[AWS Services<br/>DynamoDB, Lambda]
GOOGLE[Google Places API<br/>장소 검색]
OPENAI[OpenAI API<br/>AI 에이전트]
end
subgraph "Testing"
TEST_ACHIEVE[test_achievements.py<br/>업적 테스트]
TEST_CONF[conftest.py<br/>테스트 설정]
end
end
%% 연결 관계
MAIN --> API_AGENT
MAIN --> API_USER
MAIN --> API_ACHIEVE
MAIN --> API_PUSH
API_AGENT --> CORE_AGENT
API_USER --> CORE_USER
API_ACHIEVE --> CORE_ACHIEVE
CORE_AGENT --> SCHEMA_AGENT
CORE_USER --> SCHEMA_USER
CORE_ACHIEVE --> SCHEMA_ACHIEVE
CORE_AGENT --> AWS
CORE_AGENT --> GOOGLE
CORE_AGENT --> OPENAI
CORE_DB --> AWS
TEST_ACHIEVE --> CORE_ACHIEVE
TEST_CONF --> TEST_ACHIEVE
%% 스타일링
classDef apiLayer fill:#e1f5fe
classDef coreLayer fill:#f3e5f5
classDef schemaLayer fill:#e8f5e8
classDef external fill:#fff3e0
classDef test fill:#fce4ec
class API_AGENT,API_USER,API_ACHIEVE,API_PUSH apiLayer
class CORE_AGENT,CORE_USER,CORE_ACHIEVE,CORE_DB,CORE_TOOLS coreLayer
class SCHEMA_AGENT,SCHEMA_USER,SCHEMA_CHAT,SCHEMA_MAP,SCHEMA_ACHIEVE schemaLayer
class AWS,GOOGLE,OPENAI external
class TEST_ACHIEVE,TEST_CONF test
백엔드 구성
인프라 구성
FastAPI로 가볍게 백엔드 API 를 잡고, ECR 에 도커 빌드해서 올립니다. 그 다음 AWS Lambda 에 도커 빌드 이미지를 가져와 배포하였습니다. 별칭 기반 버전 관리를 하였습니다. 이렇게 하면 딸깍! 만으로도 API 버전을 관리할 수 있기 때문입니다. 별칭 자체를 API 스냅샷처럼 운영해서 배포한 뒤 API Gateway를 통해 세부 작업을 할 수 있습니다. 물론 사이드 프로젝트로 그만큼 할 필요는 없었기에, 단순 AWS Lambda 함수 URL 만 사용했습니다.
<aside> 🗺️
ASGI 비동기 에플리케이션 배포를 위한 “Mangum” 패키지
</aside>