Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
df99caa
feat: Add the log template for Ai #5
bleuxsy Aug 25, 2025
bf2f277
Merge branch 'release/1.0.0' of https://github.com/GoormOne/goormOne_…
bleuxsy Aug 25, 2025
7413029
Merge pull request #12 from GoormOne/develop
bleuxsy Aug 25, 2025
b97888a
feat: Add the log params for ai #5
bleuxsy Aug 25, 2025
8b3906c
feat: Add the log params for ai #5
bleuxsy Aug 25, 2025
16c73d0
feat: Add the log params for ai #5
bleuxsy Aug 25, 2025
1613b50
Merge branch 'develop' into release/1.0.0
miiiniii Aug 27, 2025
f71f569
fix: Change task-definition.json
miiiniii Aug 27, 2025
72b16be
Merge pull request #18 from GoormOne/feature/ai
miiiniii Sep 10, 2025
334aa5c
chore: Modify requirements.txt
miiiniii Sep 10, 2025
2554cd4
Merge branch 'feature/ai' into release/1.0.0
miiiniii Sep 10, 2025
9f13887
refactor: change project architecture #21
miiiniii Sep 12, 2025
98f17b9
chore: change config.py #21
miiiniii Sep 12, 2025
9d155d3
feat: Connect to Redis Stream #21
miiiniii Sep 12, 2025
e34a45a
chore: Modify .env and config #21
miiiniii Sep 16, 2025
747e723
fix: Make grpc connection
miiiniii Sep 16, 2025
d1ffa2c
feat: Add the log params for ai #5
bleuxsy Sep 17, 2025
51e6682
feat: Add the log params for ai #5
bleuxsy Sep 17, 2025
0c847f5
feat: Devide into 2 servers #21
miiiniii Sep 17, 2025
34cb129
feat: Add the log params for ai #5
bleuxsy Sep 17, 2025
6e61db9
Merge branch 'release/1.0.0' into feature/ai
miiiniii Sep 17, 2025
996cfa9
Merge pull request #22 from GoormOne/feature/ai
miiiniii Sep 17, 2025
3c8e2f3
chore: Modify workflow.yml #21
miiiniii Sep 17, 2025
7d18aba
chore: Modify workflow #23
miiiniii Sep 17, 2025
b9c3f84
Merge pull request #25 from GoormOne/feature/ai
miiiniii Sep 17, 2025
8eec447
chore: Modify workflow #23
miiiniii Sep 17, 2025
5ebcc0e
chore: Modify model-service Dockerfile #23
miiiniii Sep 17, 2025
253100c
choer: Modify workflow.yml
miiiniii Sep 17, 2025
b480a83
chore: Modify ai-service, model-service workflow
miiiniii Sep 17, 2025
ebf1b3b
chore: Modify ai-workflow.yml
miiiniii Sep 17, 2025
2823e38
chore: Modify ai-workflow.yml
miiiniii Sep 17, 2025
0ff824e
chore: Add secrets to workflow
miiiniii Sep 17, 2025
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
97 changes: 97 additions & 0 deletions .github/workflows/ai-model-workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@

name: CI/CD for ai-model Service
on:
push:
branches: [ "release/1.0.0" ]
paths:
- 'model-service/**'





env:
AWS_REGION: ap-northeast-2
SERVICE_DIR: model-service
ECR_REPOSITORY: ai-model-service
# ECS_CLUSTER_NAME: DevCluster
# ECS_TASK_DEFINITION_FAMILY: ai-service-td
CONTAINER_NAME: model-service
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}



permissions:
id-token: write
contents: read

jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:

- name: Checkout code
uses: actions/checkout@v4


- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::490913547024:role/gitactionToECR # 기존에 사용하던 역할 ARN
aws-region: ${{ env.AWS_REGION }}


- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2


- name: Set short git commit SHA
id: vars
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT


- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ steps.vars.outputs.sha_short }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG -f ./${{ env.SERVICE_DIR }}/Dockerfile .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT



# - name: Download task definition
# id: download-task-def
# run: |
# aws ecs describe-task-definition --task-definition ${{ env.ECS_TASK_DEFINITION_FAMILY }} --query taskDefinition > task-definition.json
# echo "file=task-definition.json" >> $GITHUB_OUTPUT
#
#
# - name: Clean task definition for old SDK
# id: clean-task-def
# run: |
# jq 'del(.enableFaultInjection)' ${{ steps.download-task-def.outputs.file }} > cleaned-task-def.json
# echo "file=cleaned-task-def.json" >> $GITHUB_OUTPUT
#
#
# - name: Render Amazon ECS task definition
# id: render-task-def
# uses: aws-actions/amazon-ecs-render-task-definition@v1
# with:
# task-definition: ${{ steps.clean-task-def.outputs.file }}
#
# container-name: ${{ env.CONTAINER_NAME }}
# image: ${{ steps.build-image.outputs.image }}
#
#
# - name: Deploy Amazon ECS task definition
# uses: aws-actions/amazon-ecs-deploy-task-definition@v1
# with:
# task-definition: ${{ steps.render-task-def.outputs.task-definition }}
# service: ${{ env.ECR_REPOSITORY }}
# cluster: ${{ env.ECS_CLUSTER_NAME }}
# wait-for-service-stability: true
#
78 changes: 39 additions & 39 deletions .github/workflows/ai-workflow.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@

name: CI/CD for AI Service


name: CI/CD for ai Service
on:
push:
branches: [ "release/1.0.0" ]
paths:
- 'msa-ai-service/**'



Expand All @@ -14,12 +14,13 @@ env:
AWS_REGION: ap-northeast-2
SERVICE_DIR: msa-ai-service
ECR_REPOSITORY: ai-service
ECS_CLUSTER_NAME: DevCluster
ECS_TASK_DEFINITION_FAMILY: ai-service-td
# ECS_CLUSTER_NAME: DevCluster
# ECS_TASK_DEFINITION_FAMILY: ai-service-td
CONTAINER_NAME: msa-ai-service
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}



# GitHub Actions Runner에 부여할 권한
permissions:
id-token: write
contents: read
Expand All @@ -28,70 +29,69 @@ jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# 1. 소스 코드 체크아웃

- name: Checkout code
uses: actions/checkout@v4

# 2. AWS 자격 증명 설정 (OIDC 역할 사용)

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::490913547024:role/gitactionToECR # 기존에 사용하던 역할 ARN
aws-region: ${{ env.AWS_REGION }}

# 3. Amazon ECR 로그인

- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2

# 4. 이미지 태그로 사용할 짧은 Git 커밋 해시 생성

- name: Set short git commit SHA
id: vars
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT

# 5. Docker 이미지 빌드 및 ECR에 푸시

- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ steps.vars.outputs.sha_short }}
run: |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG -f ./${{ env.SERVICE_DIR }}/Dockerfile ./${{ env.SERVICE_DIR }}
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG -f ./${{ env.SERVICE_DIR }}/Dockerfile .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT

# 6. 최신 ECS 태스크 정의 파일 다운로드


- name: Download task definition
id: download-task-def
run: |
aws ecs describe-task-definition --task-definition ${{ env.ECS_TASK_DEFINITION_FAMILY }} --query taskDefinition > task-definition.json
echo "file=task-definition.json" >> $GITHUB_OUTPUT
# - name: Download task definition
# id: download-task-def
# run: |
# aws ecs describe-task-definition --task-definition ${{ env.ECS_TASK_DEFINITION_FAMILY }} --query taskDefinition > task-definition.json
# echo "file=task-definition.json" >> $GITHUB_OUTPUT


- name: Clean task definition for old SDK
id: clean-task-def
run: |
# jq를 사용해 다운로드한 파일에서 enableFaultInjection 키를 삭제합니다.
jq 'del(.enableFaultInjection)' ${{ steps.download-task-def.outputs.file }} > cleaned-task-def.json
echo "file=cleaned-task-def.json" >> $GITHUB_OUTPUT
# - name: Clean task definition for old SDK
# id: clean-task-def
# run: |
# jq 'del(.enableFaultInjection)' ${{ steps.download-task-def.outputs.file }} > cleaned-task-def.json
# echo "file=cleaned-task-def.json" >> $GITHUB_OUTPUT


- name: Render Amazon ECS task definition
id: render-task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: ${{ steps.clean-task-def.outputs.file }}
# - name: Render Amazon ECS task definition
# id: render-task-def
# uses: aws-actions/amazon-ecs-render-task-definition@v1
# with:
# task-definition: ${{ steps.clean-task-def.outputs.file }}

container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
# container-name: ${{ env.CONTAINER_NAME }}
# image: ${{ steps.build-image.outputs.image }}

# 8. 새로운 태스크 정의를 ECS 서비스에 배포
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.render-task-def.outputs.task-definition }}
service: ${{ env.ECR_REPOSITORY }}
cluster: ${{ env.ECS_CLUSTER_NAME }}
wait-for-service-stability: true

# - name: Deploy Amazon ECS task definition
# uses: aws-actions/amazon-ecs-deploy-task-definition@v1
# with:
# task-definition: ${{ steps.render-task-def.outputs.task-definition }}
# service: ${{ env.ECR_REPOSITORY }}
# cluster: ${{ env.ECS_CLUSTER_NAME }}
# wait-for-service-stability: true

Empty file added airflow-service/Dockerfile
Empty file.
Empty file.
Empty file.
44 changes: 44 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
version: "3.9"

services:
redis:
image: redis:7
ports:
- "6379:6379"

mongo:
image: mongo:6
ports:
- "27017:27017"
command: ["mongod", "--replSet", "rs0", "--bind_ip_all"]
volumes:
- mongo_data:/data/db

model-service:
build:
context: .
dockerfile: model-service/Dockerfile
container_name: model-service
ports:
- "50051:50051"
env_file:
- .env.dev
depends_on:
- mongo

msa-ai-service:
build:
context: .
dockerfile: msa-ai-service/Dockerfile
container_name: msa-ai-service
ports:
- "8000:8000"
env_file:
- .env.dev
depends_on:
- redis
- mongo
- model-service

volumes:
mongo_data:
Empty file added infra/ai-task.json
Empty file.
Empty file added infra/airflow-task.json
Empty file.
Empty file added infra/model-task.json
Empty file.
30 changes: 30 additions & 0 deletions model-service/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
FROM python:3.10-slim

WORKDIR /app

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
ca-certificates \
curl \
&& rm -rf /var/lib/apt/lists/*

COPY model-service/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# proto 복사 & gRPC 코드 생성 → 루트(/app)에 생성
COPY proto ./proto
RUN python -m grpc_tools.protoc \
-I./proto \
--python_out=. \
--grpc_python_out=. \
./proto/model.proto

# 서비스 코드 복사
COPY model-service/app ./app

# PYTHONPATH 설정
ENV PYTHONPATH=/app

# gRPC 서버 실행
CMD ["python", "-m", "app.main"]

Empty file added model-service/app/__init__.py
Empty file.
34 changes: 34 additions & 0 deletions model-service/app/core/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import os
from dotenv import load_dotenv

# ENV 구분
ENV = os.getenv("ENV", "dev")

if ENV == "prod":
load_dotenv(".env.prod")
else:
load_dotenv(".env.dev")

# Mongo
MONGODB_URI = os.getenv("MONGODB_URI", "mongodb://mongo:27017")
MONGODB_NAME = os.getenv("MONGODB_NAME", "ai_service_dev")

# Redis
REDIS_HOST = os.getenv("REDIS_HOST", "redis")
REDIS_PORT = int(os.getenv("REDIS_PORT", 6379))
REDIS_REQUEST_STREAM = os.getenv("REDIS_REQUEST_STREAM", "chat:requests")
REDIS_RESPONSE_STREAM = os.getenv("REDIS_RESPONSE_STREAM", "chat:responses")

# OpenAI
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

# gRPC
MODEL_SERVICE_HOST = os.getenv("MODEL_SERVICE_HOST", "model-service")
MODEL_SERVICE_PORT = int(os.getenv("MODEL_SERVICE_PORT", 50051))

# Vector Search (prod용)
VECTOR_INDEX_NAME = os.getenv("VECTOR_INDEX_NAME", "reviews_embedding_index")

# 라벨 정의
REVIEW_LABELS = ["quantity", "size", "sweet", "salty", "spicy", "deep", "sour"]
POLARITY_LABELS = ["POSITIVE", "NEGATIVE"]
Empty file.
8 changes: 8 additions & 0 deletions model-service/app/db/mongodb.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from pymongo import MongoClient
from app.core.config import MONGODB_URI, MONGODB_NAME

client = MongoClient(MONGODB_URI)
db = client[MONGODB_NAME]

def get_collection(name: str):
return db[name] # 지정된 콜렉션 반환
Loading