https://github.com/CLD3rd-Team4/Infra
https://github.com/CLD3rd-Team4/App
-
개요
장거리 이동시 이동 스케줄과 사용자 정의 요구사항, 식사시간, 목표 도착시간, 식사 반경 등을 입력하면 원하는 식사시간에 사용자가 위치하게 될 장소를 예측하여 해당 지역의 맛집을 추천해주는 서비스
-
기획 의도
단순 지역 맛집을 추천하는것이 아니라 사용자 입력 데이터와 AI, 경로탐색 API를 통해 장거리 이동의 모든 과정을 예측하고 최적화하여 사용자에게 계획된 즐거움을 제공한다.
-
개발 목표
- 사용자에게 제시하는 목표
- 장거리 이동 중 식사 계획에 소요되는 고민과 시간을 최소화
- 이동 스케줄과 개인 취향에 최적화된 맛집을 추천받아 만족도 높은 식사 경험 제공
- 검증된 리뷰 기반 추천으로 신뢰할 수 있는 음식점 선택 가능
- 앱 구현에 필요한 기술적 목표
- PWA로 패키징하여 모바일 앱처럼 사용 가능하게 제작
- 오래걸리는 API에 Kafka를 사용해 비동기 처리
- 크롤링을 사용하지 않으면서 최대한의 정보 제공이 가능한 데이터 수집
- AI 프롬프트 최적화
- 사용자에게 제시하는 목표
-
핵심기능
- 스케줄 기반 식사 예정 지점 도출
- 출발지 ~ 도착지 경로 중 식사 시간 기준 위치 계산
- 반경 기반 맛집 탐색
- 사용자가 설정한 식사반경과 도출된 좌표를 기반으로 반경 내 음식점 리스트 확보
- AI 사용자 맞춤 맛집 추천
- 사용자가 입력한 요구사항(식사/간식, 동승자 정보, 이동목적)과 리뷰 데이터를 기반으로 AWS bedrock(claude-3-sonnet)에서 식당 3개씩 추천
- 리뷰 작성
- 영수증 OCR 검증을 통해 해당 식당 방문자만 리뷰 작성 가능
- 스케줄 기반 식사 예정 지점 도출
-
사용기술
- Frontend : React
- Backend : Java Springboot, PostgreSQL, Valkey
- AWS : Cloudfront, VPC, AuroraDB, ElastiCache, MSK, SSM Parameter Store, S3, S2S VPN, Client VPN, ECR, EKS, Bedrock, CloudWatch, SNS, Lambda, DynamoDB
- IaC, CI/CD : Terraform, Github Actions, ArgoCD
- 협업 : Github, Notion, Jira, Slack, Terraform Cloud, Draw.io, Figma
## 인프라 및 아키텍처 개요
- 프론트엔드는 S3 - CloudFront로 정적 호스팅
- 백엔드는 EKS에서 마이크로서비스 형태로 호스팅
- Cluster Autoscaler, Horizontal Pod Autoscaler를 통해 리소스 자동 스케일링
- Rolling Update 및 헬스체크 설정으로 무중단 배포
- VPC 내부에 퍼블릭, 프라이빗 서브넷을 각 3개의 AZ에 구성하여 고가용성 확보
- Spring Cloud 기반 Gateway, Config 서버 사용
- 인증, 게이트웨이, 설정, 리뷰, 추천, 스케줄 등 서버와 DB를 모듈별로 분리하여 독립성/확장성/장애 격리 확보
- Istio를 활용한 서버 간 네트워킹, 분산 추적, HTTP-JSON 필터링 적용
- gRPC를 이용한 서비스 간 내부 API 호출
- 로깅 서버를 온프레미스 Kubernetes에 구축하여 로그 데이터 관리
- S2S VPN 연결을 통한 하이브리드 통신
- Istio 멀티클러스터 설정으로 클라우드/온프레미스 연동
- Valkey (Redis Fork): TTL 기능 필요 시 사용, Serverless 옵션은 비중 낮은 서비스에 적용
- PostgreSQL: 향후 벡터 DB 기반 RAG 시스템 구축을 고려해 채택
- DynamoDB: 확장성이 뛰어난 NoSQL DB
- MSK (Kafka): 비동기 처리가 필요한 서비스에 메시지 큐로 사용
- DB별 자동 백업 및 Point-in-Time 복구 설정
- 읽기 전용 복제본(Read Replica) 구성으로 부하 분산
- Prometheus 메트릭 수집 + CloudWatch 연동
- Grafana 대시보드 구성
- DB별 Slack 알림 설정
- EFK(Elasticsearch, Fluentd, Kibana) 스택으로 로그 수집 및 시각화
- 프론트엔드 및 백엔드 HTTPS 적용
- 내부 리소스 접근을 위한 Client VPN 구성
- SSM Parameter Store로 민감 정보 관리
- Spring Config 서버의 암호화 기능 활용
- Terraform Cloud 및 GitHub Actions Secret을 통한 민감 변수 관리
- Sealed Secret을 이용한 EKS 내 Secret GitOps 방식 배포
- AWS IAM 리소스 최소 권한 원칙 적용
- GitHub Actions용 OIDC 설정
- 백엔드 Gateway에 XSS 필터링 적용
- Terraform Workspace를
prod,staging,dev로 구분 - GitHub 브랜치와 연동하여 환경별 변수 자동 설정
- Backend CI/CD
- 변경 감지: Git diff로 변경된 마이크로서비스만 식별
- 병렬 빌드: Matrix 전략으로 여러 서비스 동시 빌드
- 컨테이너화: Maven 빌드 → Docker 이미지 생성 → ECR 푸시
- GitOps 연동: 성공한 서비스만 Infra 레포의 ArgoCD YAML 업데이트
- Frontend CI/CD
- 정적 사이트 생성: Next.js 빌드로 정적 파일 생성
- AWS 배포: S3 업로드 + CloudFront 캐시 무효화
- 환경 변수 주입: 빌드 시 API URL, 카카오맵 키 등 설정
- Config CI/CD
- 설정 변경 감지: 개별 서비스 설정 vs 공통 설정 구분
- 중복 배포 방지: Backend 변경과 겹치는 서비스 제외
- 무중단 재시작: kubectl로 Kubernetes 배포 롤링 재시작
- Protocol Buffer CI/CD
- Proto 파일 수집: 모든 .pb 파일을 하나의 이미지로 패키징
- InitContainer 업데이트: 서비스 시작 전 최신 Proto 파일 복사
- 자동 배포: ArgoCD YAML의 InitContainer 이미지 태그 업데이트
- Jira 연동
- 이슈 동기화: GitHub 이슈 → Jira 티켓 자동 생성
- 브랜치 생성: Jira 티켓 번호로 개발 브랜치 자동 생성
- 상태 동기화: GitHub 이슈 종료 시 Jira 티켓도 완료 처리
수행 로직이 많은 추천 결과 요청 조회 외에는 모두 준수한 성능을 보였다.

부하테스트는 비용과 환경 문제로 특정 API에서만 실시하였고 빠른 스케일링 설정으로 트래픽에 유연하게 대응하도록 하였다.

- 기대효과
- 사용자의 이동 스케줄과 개인 취향을 고려해, 만족스러운 식사 경험을 제공한다.
- MSA 구조와 하이브리드 클라우드 기반 인프라로 확장성과 장애 대응 능력을 확보하고 Kafka와 gRPC 등을 활용해 빠르고 효율적인 내부 통신으로 원활한 경험을 제공한다.
- 자동화된 CI/CD와 GitOps 배포로 개발 및 디버깅을 가속화하며, 실시간 모니터링 체계로 안정적이고 신뢰성 높은 서비스를 제공한다.
- 향후 프로젝트 계획
- 데이터베이스 분리로 인한 데이터 일관성 처리
- Prometheus, alertmanager를 slack과 연동
- AI 추천 로직 RAG 시스템으로 최적화
| 이름 | 담당 역할 |
|---|---|
| 박시윤 | - EKS 내부 프로그램 설치, 멀티 클러스터, Istio 설정 - 모니터링 및 분산 추적 - Gateway 서버 구축 - K6 테스트 - 협업 툴 연동 및 프론트엔드, 백엔드 CI/CD 구축 |
| 한동연 | - EKS 클러스터 인프라 구축 - Spring Authorization 서버 기반 인증 서버 프론트, 백엔드 구현 - Redis 기반 토큰 관리 |
| 서예은 | - Route53, HTTPS, ECR, S2S VPN 인프라 구축 - 추천 서버 구축 - MSK, Bedrock 연동 - 프론트엔드 초안 작성 |
| 양정모 | - Aurora DB RDS 클러스터 인프라 구축 - 정적 웹사이트 호스팅 S3 리소스 구성 - 스케줄 서버 CRUD 작성 및 추천 서버 Tmap 로직 기여 (Backend) |
| 조성욱 | - 네트워크 (VPC, 서브넷, IGW) 인프라 구축 - CloudWatch 알람, SNS 토픽, Lambda 함수 기반 실시간 Slack 알람 시스템 개발 - Config Server 구축 - Config CI/CD 구축 |
| 조성민 | - MSK, DynamoDB, ElastiCache 인프라 구축 - Review 서버 백엔드, 프론트엔드, 모니터링 구축 - Google Vision API 연동 - K6 테스트 |