Spring Boot 기반 RESTful API 서버입니다. 사용자 인증, 영양 분석 요청 처리, 이미지 업로드 관리 등의 기능을 제공합니다.
- Java 21 이상
- MySQL 8.0 이상
- Gradle (또는 Gradle Wrapper 사용)
프로젝트 루트 디렉터리에서:
Windows:
gradlew.bat buildLinux/macOS:
./gradlew buildMySQL에 데이터베이스를 생성합니다:
CREATE DATABASE nutrigo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'nutrigo_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON nutrigo.* TO 'nutrigo_user'@'localhost';
FLUSH PRIVILEGES;.env 파일 또는 시스템 환경 변수에 아래 값을 설정합니다.
SPRING_DATASOURCE_URL: MySQL 연결 URL (예:jdbc:mysql://localhost:3306/nutrigo)SPRING_DATASOURCE_USERNAME: 데이터베이스 사용자명SPRING_DATASOURCE_PASSWORD: 데이터베이스 비밀번호
AWS_S3_BUCKET(필수): 업로드 대상 버킷명AWS_S3_REGION: S3 리전 (예:ap-northeast-2)AWS_S3_ENDPOINT(옵션): 커스텀 엔드포인트 사용 시AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY(옵션): IAM Role 사용 시 생략 가능AWS_S3_URL_EXPIRATION_SECONDS(옵션): presigned 유효시간(기본 900초)
JWT_SECRET: JWT 토큰 서명에 사용할 비밀키JWT_EXPIRATION: 토큰 만료 시간 (밀리초, 기본 86400000 = 24시간)
AI_SERVICE_URL: AI 서비스 URL (예:http://localhost:8000)
Windows:
gradlew.bat bootRunLinux/macOS:
./gradlew bootRun또는 IDE에서 NutrigoBackendApplication.java를 실행합니다.
기본 포트: 8080 Swagger 문서: http://localhost:8080/swagger-ui.html
POST /api/v1/auth/signup: 회원가입POST /api/v1/auth/login: 로그인POST /api/v1/auth/refresh: 토큰 갱신
POST /api/v1/nutrition/upload-url: S3 업로드 URL 발급POST /api/v1/nutrition/store-link: 가게 링크 분석 요청POST /api/v1/nutrition/cart-image: 장바구니 이미지 분석POST /api/v1/nutrition/order-image: 주문 내역 이미지 분석
GET /api/v1/user/profile: 사용자 프로필 조회PUT /api/v1/user/profile: 사용자 프로필 수정GET /api/v1/user/goals: 사용자 목표 조회PUT /api/v1/user/goals: 사용자 목표 설정
GET /api/v1/insights/calendar: 식습관 캘린더 데이터GET /api/v1/insights/weekly: 주간 인사이트 리포트
GET /api/v1/challenge: 챌린지 목록POST /api/v1/challenge: 챌린지 시작GET /api/v1/challenge/{id}: 챌린지 상세 정보GET /api/v1/challenge/{id}/progress: 챌린지 진행 상황
POST /api/v1/nutribot/chat: 챗봇 메시지 전송
- 클라이언트가
POST /api/v1/nutrition/upload-url호출- body 예:
{"type": "CART_IMAGE", "content_type": "image/jpeg"} - 응답:
upload_url,key,expires_at,content_type
- body 예:
- 클라이언트는 presigned
upload_url로 이미지를 PUT 업로드. - 업로드 완료 후 기존 분석 API 호출 시
image_url자리에 S3 키(또는s3://bucket/key)를 전달./api/v1/nutrition/cart-image/api/v1/nutrition/order-image
- 파이썬
nutrigo-ai는 S3에서 직접 이미지를 읽어 OCR → 분석 수행.
nutrigo-backend/
├── src/
│ └── main/
│ ├── java/
│ │ └── com/nutrigo/nutrigo_backend/
│ │ ├── domain/ # 도메인 모델
│ │ ├── controller/ # REST 컨트롤러
│ │ ├── service/ # 비즈니스 로직
│ │ ├── repository/ # 데이터 접근 계층
│ │ ├── dto/ # 데이터 전송 객체
│ │ ├── config/ # 설정 클래스
│ │ └── security/ # 보안 설정
│ └── resources/
│ ├── application.yml # 애플리케이션 설정
│ └── db/migration/ # Flyway 마이그레이션 스크립트
├── build.gradle
└── Dockerfile
- MySQL 서비스가 실행 중인지 확인
.env파일의 데이터베이스 설정 확인- 방화벽 설정 확인
- Java 버전이 21 이상인지 확인:
java --version - Gradle 캐시 삭제 후 재빌드:
gradlew clean build
- 다른 애플리케이션이 포트 8080을 사용 중인지 확인
application.yml에서 포트 변경 가능
- AWS 자격 증명이 올바른지 확인
- S3 버킷 권한 설정 확인
- 리전 설정 확인