📌 강의 핵심 요약
1. CI/CD 파이프라인 개요
- 목표: ChatGPT 애플리케이션을 Google Kubernetes Engine(GKE)에 자동 배포.
- 도구: GitHub Actions 기반 CI/CD.
- 3단계 접근법
- GitHub Action Secrets 설정
- 워크플로우 파일(actions.yaml) 검증
- CI/CD 파이프라인 테스트
2. GitHub Secrets 설정
- Secrets 종류
- GKE_PROJECT: Google Cloud Project ID
- GKE_SA_KEY: GCP Service Account Key(JSON)
- OPENAI_API: OpenAI API Key
- 저장 위치: Settings → Secrets and variables → Actions → Repository secrets
- 역할: 민감한 인증정보(프로젝트 ID, 서비스 계정 키, API 키)를 안전하게 참조.
3. GitHub Actions Workflow (actions.yaml)
- 트리거: main 브랜치 push 시 동작
- 환경 변수:
- PROJECT_ID, GKE_CLUSTER, GKE_ZONE, DEPLOYMENT_NAME, IMAGE
- 핵심 Job (setup-build-publish-deploy) 단계 :
- 코드 체크아웃
- GCP 인증 (google-github-actions/auth)
- GKE 클러스터 credentials 가져오기
- Docker Build & Push → gcr.io/PROJECTID/IMAGE:$GITHUB_SHA
- Kustomize 설정 & OpenAI Secret 생성
- Kubernetes 배포 및 롤아웃 확인
4. Kubernetes 배포 (deploy.yaml, kustomization.yaml)
- Deployment :
- 이름: chatgpt-deploy
- 파드 레플리카: 3개
- 컨테이너: mychatgptcontainer
- 환경 변수: OPENAI_API (Secret에서 참조)
- Service :
- 타입: LoadBalancer
- 외부 접근용 IP 제공
- Kustomize (kustomization.yaml) :
- deploy.yaml 기반으로 이미지 태그 자동 업데이트
5. 배포 & 테스트 과정
- 코드 수정 후 git commit & push → GitHub Actions 자동 실행
- 새 Docker 이미지 빌드 → Google Artifact Registry에 push
- kubectl과 kustomize로 GKE에 자동 배포
- kubectl get svc 로 External IP 확인 → 브라우저에서 애플리케이션 접속
- 예: Welcome to ChatGPT application v2, v3 등 변경 사항 반영됨
6. 프로젝트 정리 (Cleanup)
✅ 핵심 정리
- GitHub Actions + GKE 조합으로 완전 자동화된 CI/CD 파이프라인 구축.
- Secrets 관리가 보안과 안정성의 핵심.
- Docker → Artifact Registry → GKE 배포의 전체 플로우 자동화.
- kustomize 사용으로 버전 태깅 자동화 및 배포 유연성 확보.
- 마지막에는 클린업 절차까지 포함하여 비용 낭비 방지.
📝 문제 세트 (섹션 11 기반)
🔹 난이도 하
문제 1.
GitHub Actions에서 민감한 인증 정보를 안전하게 관리하기 위해 사용하는 기능은 무엇인가?
① GitHub Variables
② GitHub Secrets
③ GitHub Tokens
④ GitHub Vault
정답: ②
해설: 민감한 프로젝트 ID, 서비스 계정 키, API Key는 GitHub Repository Secrets에 저장해야 한다 .
문제 2.
actions.yaml 워크플로우 파일이 실행되는 시점은 기본적으로 언제인가?
① main 브랜치에 Push 될 때
② develop 브랜치에 Pull Request 생성 시
③ GitHub Issue 생성 시
④ 일정 시간마다 자동 실행
정답: ①
해설: 설정된 트리거는 push → main 브랜치로 지정되어 있다 .
🔹 난이도 중
문제 3.
다음 중 GitHub Actions에서 Docker 이미지를 빌드하고 레지스트리에 Push하는 과정을 올바르게 나열한 것은?
① Checkout → Build → Auth → Push
② Auth → Checkout → Build → Push
③ Checkout → Auth → Build → Push
④ Checkout → Push → Build → Auth
정답: ③
해설: 먼저 코드 체크아웃, GCP 인증(auth), 이후 Docker Build, 그리고 Push 순서로 진행된다 .
문제 4.
CI/CD 과정에서 kustomize를 사용하는 주된 이유는 무엇인가?
① 보안 강화를 위해 API Key를 암호화하기 위함
② GKE 클러스터의 노드 수를 자동으로 조정하기 위함
③ 배포 YAML 파일에서 이미지 태그 등을 동적으로 수정하기 위함
④ Docker 빌드 속도를 최적화하기 위함
정답: ③
해설: kustomize edit set image 명령을 이용해 최신 커밋 ID 기반 태그로 deploy.yaml의 이미지 값을 자동 수정한다 .
🔹 난이도 상
문제 5.
다음은 deploy.yaml의 일부이다. 빈칸에 들어갈 값으로 올바른 것은?
env:
- name: OPENAI_API
valueFrom:
secretKeyRef:
name: _________
key: API_KEY
① gcp-secret
② github-secret
③ openai-secret
④ chatgpt-secret
정답: ③
해설: 실습에서는 kubectl create secret generic openai-secret --from-literal=API_KEY=... 로 생성했으므로 openai-secret이 맞다 .
문제 6. (서술형)
CI/CD 파이프라인에서 클린업(cleanup) 작업이 필요한 이유와 대표적인 정리 항목을 2가지 이상 서술하시오.
모범 답안:
- 이유: 사용하지 않는 클러스터, Artifact Registry, LoadBalancer, Service Account 키 등을 방치하면 비용 증가 및 보안 리스크가 발생한다.
- 대표 정리 항목:
- GKE 클러스터 삭제 (gcloud container clusters delete ...)
- Artifact Registry 이미지 삭제
- 불필요한 Service Account 키 제거
- LoadBalancer/VM 인스턴스 확인 후 삭제