Skip to content

raota-team/raota-server

Repository files navigation

Raota Server

라멘 맛집을 찾고, 기록하고, 공유하는 커뮤니티 플랫폼 라오타의 백엔드 서버입니다.

Java Spring Boot MySQL Redis Flyway Docker

소개

Raota Server는 라멘 매장 정보, 방문 인증샷, 메뉴 투표, 북마크, 커뮤니티, 회원 활동, AI 추천 기능을 제공하는 Spring Boot 기반 REST API 서버입니다.

주요 기능은 다음과 같습니다.

  • 라멘 매장 목록/상세 조회, 북마크, 정보 오류 제보
  • 라멘 매장별 메뉴 투표와 투표 현황 조회
  • 방문 인증샷 등록/조회/삭제 및 업로드 티켓 발급
  • 커뮤니티 게시글, 좋아요, 스레드 댓글
  • OAuth2 기반 소셜 로그인과 JWT Access/Refresh Token 인증
  • 공개 API만 명시적으로 허용하고 나머지를 인증하는 fail-closed 접근 정책
  • 마이페이지 활동 내역 조회
  • AI 기반 취향 추천, 매장 비교, 리뷰 요약, 후속 채팅
  • ADMIN 권한으로 보호되는 라멘 매장 CRUD, 회원/제보 조회 및 검색/RAG 인덱싱 API

문서

기술 스택

Back-end

Java Spring Boot Spring Security Spring AI JPA

Database & Infra

MySQL Redis Flyway Oracle Cloud Cloudinary Docker

Test & Tools

JUnit5 Testcontainers RestAssured GitHub Actions

프로젝트 아키텍처

image

패키지 구조

src/main/java/com/raota
├── presentation  # REST API, Admin Controller, 공통 응답/예외 처리
├── application   # 유스케이스 서비스와 트랜잭션 경계
├── domain        # 도메인 모델, 정책, 저장소 인터페이스
└── infrastructure# 인증, Redis, 파일 업로드, 캐시, 벡터 검색, 외부 연동

배포

main 브랜치에 push되면 GitHub Actions가 다음 순서로 운영 배포를 진행합니다.

  1. JDK 25 환경에서 ./gradlew clean bootJar -x test 실행
  2. Docker 이미지 빌드
  3. OCIR(Oracle Cloud Infrastructure Registry)에 이미지 push
  4. raota-team/raota-infra 저장소의 배포 워크플로 dispatch
  5. canary 또는 full 배포 진행 상태 확인

기술적 이슈와 해결 과정

  • Refresh Token 저장소를 JPA/Redis 구현으로 분리해 테스트와 운영 환경의 선택지를 확보
  • Redis 기반 캐시 무효화 pub/sub으로 라멘 매장 상세/목록 캐시 정합성 관리
  • Flyway 마이그레이션과 ddl-auto=validate 조합으로 운영 DB 스키마 변경 안정성 확보
  • 파일 용도별 업로드 라우팅으로 프로필, 배경, 매장, 커뮤니티, 인증샷 이미지 경로 분리
  • Oracle Vector Store와 Spring AI를 활용한 매장 검색/RAG 인덱싱 기반 마련

프로젝트 팀원

Backend
박희태
image

About

라멘 덕후를 위한, 맛집 탐색 서비스 "라오타" 🍜

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages