Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
name: Deploy to Oracle Cloud

on:
push:
branches:
- master
workflow_dispatch:

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: 'maven'

- name: Build with Maven
run: ./mvnw clean package -DskipTests

- name: Deploy to Oracle Cloud
env:
ORACLE_HOST: ${{ secrets.ORACLE_HOST }}
ORACLE_USER: ${{ secrets.ORACLE_USER }}
ORACLE_SSH_KEY: ${{ secrets.ORACLE_SSH_KEY }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: |
# SSH 키 설정
mkdir -p ~/.ssh
echo "$ORACLE_SSH_KEY" > ~/.ssh/oracle_key
chmod 600 ~/.ssh/oracle_key

# known_hosts에 호스트 추가
ssh-keyscan -H $ORACLE_HOST >> ~/.ssh/known_hosts

# WAR 파일을 서버로 전송
scp -i ~/.ssh/oracle_key target/jpetstore.war $ORACLE_USER@$ORACLE_HOST:/tmp/

# 서버에서 배포 스크립트 실행
ssh -i ~/.ssh/oracle_key $ORACLE_USER@$ORACLE_HOST << 'ENDSSH'
# Tomcat 중지
sudo systemctl stop tomcat || true

# 기존 애플리케이션 백업 및 삭제
sudo rm -rf /opt/tomcat/webapps/jpetstore
sudo rm -f /opt/tomcat/webapps/jpetstore.war

# 새 WAR 파일 배포
sudo mv /tmp/jpetstore.war /opt/tomcat/webapps/
sudo chown tomcat:tomcat /opt/tomcat/webapps/jpetstore.war

# 환경 변수 설정 (GEMINI_API_KEY)
echo "GEMINI_API_KEY=$GEMINI_API_KEY" | sudo tee /opt/tomcat/bin/setenv.sh
sudo chmod +x /opt/tomcat/bin/setenv.sh

# Tomcat 시작
sudo systemctl start tomcat

# 상태 확인
sleep 10
sudo systemctl status tomcat
ENDSSH

- name: Health Check
env:
ORACLE_HOST: ${{ secrets.ORACLE_HOST }}
run: |
echo "Waiting for application to start..."
sleep 30

# 헬스 체크 (최대 5번 시도)
for i in {1..5}; do
if curl -f http://$ORACLE_HOST:8080/jpetstore/; then
echo "✅ Application is running!"
exit 0
fi
echo "Attempt $i failed, retrying..."
sleep 10
done

echo "❌ Health check failed"
exit 1
238 changes: 238 additions & 0 deletions AI_SETUP_GUIDE.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
====
Copyright 2010-2025 the original author or authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
====

========================================
Google Gemini AI 추천 기능 설정 가이드
========================================

📋 목차
1. Google Gemini API 키 발급
2. API 키 설정 방법
3. 애플리케이션 실행
4. 기능 테스트
5. 데모 모드 (API 키 없이 사용)

========================================
1. Google Gemini API 키 발급
========================================

🔗 https://ai.google.dev/ 접속

1) Google 계정으로 로그인
2) "Get API Key" 버튼 클릭
3) "Create API Key" 선택
4) API 키 복사 (예: AIzaSyABC123...XYZ)

💰 비용: 완전 무료 (일일 1,500회 요청 제한)
⏱️ 소요 시간: 약 3분

========================================
2. API 키 설정 방법
========================================

방법 A) macOS/Linux 환경 변수 설정 (추천)
------------------------------------------
터미널에서 다음 명령어 실행:

export GEMINI_API_KEY="여기에_발급받은_API_키_입력"

예시:
export GEMINI_API_KEY="AIzaSyABC123def456GHI789jkl012MNO345pqr"

* 영구 설정하려면 ~/.zshrc 또는 ~/.bash_profile에 추가:
echo 'export GEMINI_API_KEY="여기에_발급받은_API_키_입력"' >> ~/.zshrc
source ~/.zshrc


방법 B) Windows 환경 변수 설정
-------------------------------
명령 프롬프트(CMD)에서:

set GEMINI_API_KEY=여기에_발급받은_API_키_입력

PowerShell에서:

$env:GEMINI_API_KEY="여기에_발급받은_API_키_입력"


방법 C) IntelliJ IDEA에서 설정
--------------------------------
1) Run > Edit Configurations
2) Environment variables 항목 찾기
3) 다음 추가: GEMINI_API_KEY=여기에_발급받은_API_키_입력

========================================
3. 애플리케이션 실행
========================================

터미널에서 프로젝트 루트 디렉토리로 이동 후:

# API 키 설정 (방법 A 참고)
export GEMINI_API_KEY="여기에_발급받은_API_키_입력"

# Maven으로 빌드 및 실행
mvn clean package
mvn cargo:run

# 또는 한 줄로
mvn clean package && mvn cargo:run

✅ 서버 시작 완료 메시지 확인:
[INFO] Press Ctrl-C to stop the container...

========================================
4. 기능 테스트
========================================

1) 브라우저에서 접속:
http://localhost:8080/jpetstore

2) 메인 페이지에서 카테고리 선택 (예: FISH, DOGS, CATS 등)

3) 원하는 상품 클릭

4) 상품 목록에서 특정 Item ID 클릭

5) 상품 상세 페이지 하단에 "🤖 AI 추천 상품" 섹션 확인

📝 예상 결과:
------------------------------------------
[상품 정보]
Large Angelfish
$16.50
[Add to Cart 버튼]

🤖 AI 추천 상품
이 상품과 함께 구매하면 좋은 제품을 AI가 추천해드립니다

1. 고급 어류 사료: 물고기의 건강한 성장과...
2. 수족관 여과 시스템: 깨끗한 수질 관리로...
3. 수초 세트: 자연스러운 서식 환경을...

💡 Powered by Google Gemini AI
------------------------------------------

⏱️ 로딩 시간: 1-3초 (API 응답 대기)

========================================
5. 데모 모드 (API 키 없이 사용)
========================================

API 키를 설정하지 않아도 기능이 동작합니다!

📌 동작 방식:
- API 키가 없으면 자동으로 데모 모드로 전환
- 카테고리별로 미리 작성된 추천 내용 표시
- 실제 API 호출 없이 즉시 표시

💡 데모 모드 활용:
- 발표 준비 시 API 키 없이 먼저 테스트
- 네트워크 문제 시 대체 수단
- API 할당량 초과 시 백업

========================================
🔧 문제 해결 (Troubleshooting)
========================================

문제 1) AI 추천이 표시되지 않음
해결:
- 환경 변수가 제대로 설정되었는지 확인:
echo $GEMINI_API_KEY
- 서버를 재시작했는지 확인
- 브라우저 캐시 삭제 (Ctrl+Shift+R)

문제 2) API 에러 메시지 (403, 400 등)
해결:
- API 키가 올바른지 확인
- https://ai.google.dev/에서 API 키 활성화 상태 확인
- 일일 할당량 초과 여부 확인

문제 3) 로딩이 너무 느림 (5초 이상)
해결:
- 네트워크 연결 확인
- Gemini API 서버 상태 확인
- 데모 모드로 전환 고려

========================================
📊 발표 시나리오
========================================

발표 시 추천 순서:

1. 데모 모드로 먼저 시연
"먼저 AI 기능이 어떻게 동작하는지 보여드리겠습니다"

2. 실제 API 연동 설명
"실제로는 Google Gemini API를 실시간으로 호출합니다"

3. 코드 구조 설명
- AIRecommendationService.java: API 호출 로직
- CatalogActionBean.java: 컨트롤러 통합
- Item.jsp: UI 표시

4. 기술적 특징 강조
- 무료 API 사용
- 실시간 AI 분석
- 에러 처리 및 폴백 메커니즘
- 기존 MVC 패턴과 완벽 통합

========================================
📚 참고 자료
========================================

- Google Gemini API 문서:
https://ai.google.dev/docs

- API 키 관리:
https://makersuite.google.com/app/apikey

- JPetStore 프로젝트:
https://github.com/mybatis/jpetstore-6

========================================
✅ 체크리스트
========================================

설치 전:
[ ] Google 계정 준비
[ ] 인터넷 연결 확인

설치:
[ ] API 키 발급 완료
[ ] 환경 변수 설정
[ ] 프로젝트 빌드 성공

테스트:
[ ] 서버 실행 확인
[ ] 상품 페이지 접속
[ ] AI 추천 섹션 표시 확인
[ ] 추천 내용이 적절한지 확인

발표 준비:
[ ] 데모 시나리오 작성
[ ] 네트워크 연결 확인
[ ] 백업 플랜 준비 (데모 모드)

========================================
🎉 완료!
========================================

모든 설정이 완료되었습니다!
즐거운 발표 되세요! 😊

문의사항이 있으면 코드 주석을 참고하세요.
AIRecommendationService.java 파일에
자세한 설명이 있습니다.
Loading