Skip to content

ci(#154): 실서버 배포 환경 NCP에서 OCI로 이관#155

Open
fnzl54 wants to merge 1 commit into
mainfrom
infra/#154
Open

ci(#154): 실서버 배포 환경 NCP에서 OCI로 이관#155
fnzl54 wants to merge 1 commit into
mainfrom
infra/#154

Conversation

@fnzl54

@fnzl54 fnzl54 commented Jun 26, 2026

Copy link
Copy Markdown
Member
  • 연관 이슈

  • 작업 사항

    • 컨테이너 레지스트리 NCR → GHCR (GHCR 이미지 패키지)
    • 서버 접속 방식 변경 (password → SSH key)
    • 배포 스크립트(deploy-prod.sh) 수정
  • 테스트

    • test 브랜치에서 CICD 성공 후 서버 정상 동작 확인 완료
  • 주의 사항 및 참고사항

    • 해당 PR은 main에만 적용되면 되는 사항으로 main merge 완료 후 devmain 기준으로 rebase하여 정렬 예정
    • Actions secrets 추가 완료

@fnzl54 fnzl54 requested a review from yeonchaepark June 26, 2026 04:27
@fnzl54 fnzl54 self-assigned this Jun 26, 2026

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Code Review

This pull request updates the deployment script deploy-prod.sh to run the Docker container with host networking, pass the server port as an environment variable, and update the host path for the application.yml volume mount. The review feedback highlights two critical issues: first, mounting the configuration file to /application.yml instead of /app/application.yml may prevent Spring Boot from locating it; second, using --network host poses security risks and potential port conflicts, so maintaining bridge networking with port mapping is recommended.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread deploy-prod.sh Outdated
docker run -d --name "$TARGET_NAME" \
--network host \
-e SERVER_PORT=${TARGET_PORT} \
-v /home/ubuntu/quizly-server/application.yml:/application.yml \

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

현재 Dockerfile을 보면 WORKDIR /app으로 설정되어 있어, 컨테이너 내부의 작업 디렉토리는 /app입니다.

Spring Boot는 기본적으로 작업 디렉토리(./) 또는 ./config/ 등에서 설정 파일을 찾습니다. 따라서 호스트의 application.yml을 컨테이너의 루트 디렉토리인 /application.yml에 마운트하게 되면, Spring Boot가 이 외부 설정 파일을 인식하지 못하고 jar 내부의 기본 설정만 사용하게 되는 문제가 발생할 수 있습니다.

이로 인해 실서버 환경의 데이터베이스 연결 정보나 API 키 등 외부 설정이 정상적으로 적용되지 않아 애플리케이션 구동 실패나 오동작으로 이어질 수 있습니다.

안정적인 설정을 위해 마운트 경로를 /app/application.yml 또는 /app/config/application.yml로 변경하는 것을 권장합니다.

Suggested change
-v /home/ubuntu/quizly-server/application.yml:/application.yml \
-v /home/ubuntu/quizly-server/application.yml:/app/application.yml \
References
  1. 유지보수성·확장성·안정성 관점에서 왜 문제인지 근거를 함께 설명하고 대안을 제시해야 합니다. (link)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

현재 CI/CD 구조에서 docker 이미지 빌드 전에 yml 주입하여 jar를 빌드하고 있어서 Spring Boot가 jar 내부에서 설정 파일 사용 중 (볼륨 마운트 코드는 이전에 배포 시 사용하던 코드가 남아있는 것으로 추측)

볼륨 마운트 라인과 서버로의 설정 파일 전송 스텝을 함께 제거하여 수정

런타임 외부 주입 방식도 고민했으나 기존 방식을 유지하기로 결정
GHCR이 private으로 운영되고 있어 이미지 접근이 팀원으로 제한되고 급하게 클라우드 서비스를 변경해야 할 경우 서버에 별도 파일 없이 이미지 단독으로 바로 구동 가능

Comment thread deploy-prod.sh
docker run -d --name "$TARGET_NAME" -p "${TARGET_PORT}:8080" \
-v /root/quizly-server/application.yml:/application.yml \
docker run -d --name "$TARGET_NAME" \
--network host \

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

security-medium medium

현재 --network host 옵션을 사용하여 컨테이너가 호스트의 네트워크 네임스페이스를 직접 공유하도록 변경되었습니다.

--network host를 사용하면 포트 포워딩 없이 호스트 포트에 직접 바인딩하므로 네트워크 성능 이점이 있을 수 있으나, 컨테이너 간의 네트워크 격리(Isolation)가 해제되어 보안상 취약해질 수 있습니다. 또한 호스트의 다른 프로세스나 컨테이너와 포트 충돌이 발생할 위험이 커집니다.

만약 특별한 성능상의 이유나 호스트 네트워크 직접 접근이 필요한 상황이 아니라면, 기존처럼 브릿지 네트워크를 사용하고 포트 매핑(-p ${TARGET_PORT}:${TARGET_PORT})을 유지하는 것이 컨테이너 환경의 격리성과 보안성을 유지하는 데 더 안전합니다.

References
  1. 안정성 및 보안 관점에서 문제가 발생할 수 있는 부분을 지적하고 대안을 제시해야 합니다. (link)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

보안 측면에서 Bridge 네트워크가 더 안전하다고 생각하지만 다만 현재 운영 서버의 Redis가 Docker 컨테이너로 사용 중

Bridge 네트워크로 전환하면 컨테이너 내부의 localhost가 호스트가 아닌 컨테이너 자신을 가리키게 되어 Redis 못 잡아서 현재 방식 유지

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.

2 participants