Skip to content

[RELEASE] FastAPI EC2 인스턴스에 배포#12

Merged
youyeon11 merged 4 commits intodevelopfrom
feat/deploy-7
Aug 28, 2025
Merged

[RELEASE] FastAPI EC2 인스턴스에 배포#12
youyeon11 merged 4 commits intodevelopfrom
feat/deploy-7

Conversation

@youyeon11
Copy link
Contributor

📌 작업 목적

배포를 위한 설정


🗂 작업 유형

  • 기능 추가 (Feature)
  • 버그 수정 (Bug Fix)
  • 리팩터링 (Refactor)
  • 성능 개선 (Performance)
  • 테스트 추가/수정 (Test)
  • 빌드/배포/환경 설정 (Chore)
  • 문서 수정 (Docs)

🔨 주요 작업 내용

  • 배포를 위한 Dockerfile을 설정하였습니다.
  • 설정 중 오류가 나는 것들을 해결하였습니다.

📎 관련 이슈


✅ 체크리스트

  • 환경 변수 변경 사항 업로드 필요

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @youyeon11, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 애플리케이션 배포를 위한 초기 설정을 도입하고, 이 과정에서 발생한 구성 오류를 해결합니다. 주요 변경 사항으로는 애플리케이션을 컨테이너화하기 위한 Dockerfile 추가, 환경 변수 관리 개선, FastAPI 애플리케이션 메타데이터 업데이트, 그리고 Redis 및 S3 클라이언트 설정 조정이 포함됩니다.

Highlights

  • Dockerfile 추가: nvidia/cuda 기반 이미지를 사용하여 애플리케이션을 컨테이너화하고, 필요한 종속성을 설치하며, Uvicorn 서버를 실행하도록 설정했습니다.
  • 환경 변수 관리 개선: app/core/config.py에서 python-dotenv를 사용하여 .env 파일에서 환경 변수를 로드하도록 변경하고, Redis 및 S3 관련 변수 로딩 방식을 수정했습니다.
  • FastAPI 애플리케이션 정보 업데이트: app/main.py에서 FastAPI 애플리케이션의 제목, 설명, 버전을 "DearBelly CV API"로 업데이트했습니다.
  • Pydantic 모델 필드 별칭 설정: app/schemas/job.py에서 ImageJob 모델의 필드 이름을 스네이크 케이스로 변경하고, 기존 카멜 케이스 이름에 대한 Field(alias=...)를 추가하여 API 호환성을 유지했습니다.
  • S3 클라이언트 설정 간소화: app/services/s3_service.py에서 S3 클라이언트 초기화 시 S3_ENDPOINT_URL 설정을 제거했습니다.
  • Redis 클라이언트 초기화 방식 변경: app/worker/redis_client.py에서 Redis 클라이언트 초기화를 redis.asyncio.from_url을 사용하도록 변경하여 비동기 환경에 더 적합하게 만들었습니다.
  • 새로운 의존성 추가: requirements.txt에 dotenv 패키지를 추가했습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@youyeon11

This comment was marked as resolved.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이 PR은 배포를 위한 설정을 추가하고 관련 오류를 수정하는 것을 목표로 합니다. Dockerfile 추가, 환경 변수 관리 방식 변경, 비동기 Redis 클라이언트 도입 등 중요한 변경 사항이 포함되어 있습니다.

리뷰 결과, 몇 가지 치명적인 버그와 개선점을 발견했습니다.

  • Dockerfile에서 requirements.txt 경로가 잘못되어 빌드가 실패할 것입니다. 또한, Docker 이미지 크기와 빌드 효율성을 개선할 여지가 있습니다.
  • app/core/config.py에서 S3 관련 환경 변수가 서로 바뀌어 할당되어 S3 기능이 오작동할 것입니다. 또한, pydantic-settings의 기능을 활용하여 설정을 더 깔끔하게 관리할 수 있습니다.
  • app/core/lifespan.py에서 app.state.redis_client 할당 코드가 삭제되어, 이를 사용하는 API 엔드포인트와 상태 확인 기능이 동작하지 않게 됩니다.
  • app/schemas/job.py에서 Pydantic 모델의 필드명이 변경되었지만, 이를 사용하는 다른 코드들이 수정되지 않아 애플리케이션 실행 시 오류가 발생합니다.

이러한 치명적인 문제들은 배포 전에 반드시 수정되어야 합니다. 그 외에도 코드 유지보수성을 높이기 위한 몇 가지 제안 사항을 포함했습니다.

@gemini-code-assist
Copy link

안녕하세요, Gemini Code Assist입니다. 제공해주신 오류 메시지를 확인했습니다. 해당 오류는 Gemini API의 할당량 초과로 인해 발생한 것으로 보입니다. 이로 인해 코드 리뷰를 완료할 수 없었습니다. API 할당량은 제가 직접 제어할 수 있는 부분이 아닙니다.

@youyeon11

This comment was marked as resolved.

@gemini-code-assist
Copy link

안녕하세요, 다시 한번 할당량 초과 오류가 발생했음을 확인했습니다. 이 문제는 Gemini API의 할당량 제한으로 인해 발생하며, 제가 직접 해결할 수 있는 부분이 아닙니다. 자세한 내용은 Gemini API 할당량 문서를 참조하시어 할당량 및 결제 정보를 확인해 주시기 바랍니다.

@youyeon11
Copy link
Contributor Author

🤖 Gemini 코드 리뷰 결과

코드 리뷰: Feat/deploy (#7)

1. 주요 변경 사항 요약 및 의도 파악

이 PR은 DearBelly CV 애플리케이션의 배포 환경을 구축하기 위한 설정을 추가하고, 배포 과정에서 발생하는 오류를 해결하는 것을 목표로 합니다. Dockerfile을 작성하여 컨테이너 이미지를 빌드하고, GitHub Actions workflow를 통해 ECR에 이미지를 푸시하고, EC2 인스턴스에 배포하는 CI/CD 파이프라인을 구현합니다. .env 파일을 통해 환경 변수를 관리하고, Redis, S3와 같은 외부 서비스와의 연동을 위한 설정도 포함되어 있습니다.

2. 코드 품질 및 가독성

  • 코드 스타일: 전반적으로 PEP 8 규칙을 잘 준수하고 있습니다. 다만, workflow.yml 파일의 일부 들여쓰기가 불규칙적인 부분이 있어 수정이 필요합니다 (e.g., deploy step의 script 부분).
  • 변수/함수명: 명확하고 직관적인 변수 및 함수 이름을 사용하고 있습니다. app/schemas/job.py에서 snake_case로 변경한 부분은 일관성을 유지하는 좋은 접근입니다.
  • 주석/문서화: app/core/config.py, app/schemas/job.py 에 주석을 추가하여 각 설정값과 필드의 역할을 명확히 설명한 점이 좋습니다. 하지만, Dockerfile의 각 명령어에 대한 설명을 추가하면 더욱 이해하기 쉬울 것입니다.
  • 중복 코드: 현재 PR에서 중복 코드는 발견되지 않았습니다.

3. 잠재적 버그 및 엣지 케이스

  • 논리적 오류: app/core/config.py에서 S3_REGIONBUCKET_NAME 변수 할당이 서로 바뀐 것 같습니다. S3_REGION에는 region 이름이, BUCKET_NAME에는 bucket 이름이 들어가야 합니다.
  • 경쟁 상태 (Race Condition): 현재 PR에서는 멀티쓰레드/비동기 처리 부분이 명확하게 드러나지 않아 경쟁 상태 발생 가능성은 낮아 보입니다. 하지만 배포 스크립트에서 컨테이너 실행 부분 (docker run) 이후 애플리케이션의 정상 동작 여부를 확인하는 절차가 없는 점이 우려됩니다. 컨테이너가 정상적으로 시작되었는지 확인하는 로직을 추가하는 것이 좋습니다.
  • 에러 핸들링: workflow.yml의 배포 스크립트에서 각 단계별로 에러 처리가 부족합니다. 각 명령어 실행 후 에러 코드를 확인하고, 에러 발생 시 workflow를 중단하도록 수정해야 합니다. 예를 들어, docker pull 실패 시 다음 단계로 진행되지 않도록 해야합니다.

4. 성능 및 효율성

  • 시간 복잡도: 배포 스크립트 자체의 성능에는 큰 문제가 없어 보입니다.
  • 자원 사용: Dockerfile에서 필요한 패키지만 설치하고, apt-get clean을 통해 불필요한 파일을 제거하는 등 효율적인 리소스 관리를 하고 있습니다.
  • 최적화 제안: Dockerfile의 COPY . . 대신 필요한 파일/폴더만 명시적으로 복사하여 이미지 크기를 줄이는 것을 고려해 볼 수 있습니다.

5. 보안 및 아키텍처

  • 보안 취약점: .env 파일을 통해 민감한 정보를 관리하고 있지만, 이 파일이 Git 저장소에 포함되지 않도록 주의해야 합니다. .gitignore.env를 추가하고, secrets management 기능을 적극 활용하는 것이 좋습니다. 또한, EC2 서버 접속에 사용하는 SSH 키를 secrets management를 통해 안전하게 관리해야 합니다.
  • 아키텍처 적합성: CI/CD 파이프라인을 도입하여 배포 프로세스를 자동화한 것은 좋은 아키텍처 설계 방향입니다.
  • 확장성: Docker를 사용하여 배포 환경을 구축했기 때문에 향후 서비스 확장에 유리한 구조입니다. 다만, 배포 스크립트에 하드코딩된 부분(e.g., 컨테이너 이름 app-blue, port 8000)을 변수화하여 관리하면 더욱 유연하게 확장할 수 있을 것입니다.

전반적으로 배포 자동화를 위한 좋은 시작입니다. 위에 언급된 사항들을 수정하면 더욱 안정적이고 효율적인 배포 파이프라인을 구축할 수 있을 것입니다. 수고하셨습니다!

@youyeon11 youyeon11 merged commit 9f22b65 into develop Aug 28, 2025
3 checks passed
@youyeon11 youyeon11 changed the title Feat/deploy (#7) [RELEASE] FastAPI EC2 인스턴스에 배포 Aug 30, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant