GitHub Actions(Free Tier)를 사용한 Go 앱의 Google Cloud Run 자동 배포

발행: (2025년 12월 20일 오전 09:40 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

Cover image for Automating Go App Deployment to Google Cloud Run with GitHub Actions (Free Tier)

안녕하세요, 여러분! 이번이 dev.to에 올리는 첫 글입니다.👋

최근에 Go 애플리케이션을 만들고 Google Cloud RunGitHub Actions를 이용해 배포했습니다. DevOps 실력을 키우기 위해서였죠. 이번 포스트에서는 배포 과정을 자동화한 방법과 그 과정에서 얻은 인사이트를 공유합니다.

배경

저는 현재 캐나다에 살고 있지만 급여는 JPY(일본 엔)로 받습니다. 환율이 계속 변동하기 때문에 매일 CAD/JPY 환율을 수동으로 확인하는 것이 번거로웠습니다. 전날 대비 환율이 상승했을 때 Slack으로 자동 알림을 받고 싶었고, 이를 위해 GCP와 GitHub Actions를 활용해 워크플로를 자동화하기로 했습니다.

시스템 아키텍처

graph LR
  GitHub[GitHub] --> Actions[GitHub Actions]
  Actions --> Registry[Artifact Registry]
  Registry --> CloudRun[Cloud Run]
  Scheduler[Cloud Scheduler] --> CloudRun

왜 이 기술들을 선택했나요?

  • 왜 Go인가?
    정적 타입 언어라 안정성이 높고 컨테이너 이미지 크기를 작게 유지할 수 있습니다.

  • 왜 Google Cloud Run인가?
    서버리스 플랫폼이라 서버 관리가 필요 없습니다. 사용하지 않을 때는 0으로 스케일링돼 Free Tier 내에서 실행할 수 있습니다.

  • 왜 GitHub Actions인가?
    코드와 바로 연결된 CI/CD 파이프라인을 관리할 수 있습니다. GCP와의 연동도 안전하고 매끄럽습니다.

주요 과제와 해결 방안

  • “Secure by Default” 함정 (403 Forbidden)
    Google Cloud Run은 기본적으로 인증되지 않은 접근을 차단합니다. Cloud Scheduler 인증 헤더에 OIDC 토큰을 설정해 403 Forbidden 오류를 해결했습니다.

  • CI/CD 설정 세부 사항
    Artifact Registry 설정이 맞지 않아 GitHub Actions 파이프라인 디버깅에 시간을 많이 썼습니다. 레포지토리 이름과 레포지토리 ID를 혼동했는데, DevOps에서는 변수 이름 하나하나에 신경 쓰는 것이 코드 작성만큼 중요하다는 교훈을 얻었습니다.

배운 점

초기 설정에 드는 고통과 이후 효율성 사이의 트레이드‑오프가 명확해졌습니다. 로컬에서 코드를 실행하는 것은 직관적이고 즉시 결과를 볼 수 있지만, 클라우드로 옮기는 과정은 번거롭습니다. 일단 그 장벽을 넘으면 자동화의 힘을 실감하게 됩니다. 이제 시스템은 제가 잠든 사이에도 동작해 주며, 초기 설정의 고통을 견디고 장기적인 효율성을 얻는 것이 엔지니어링이라는 점을 보여줍니다.

향후 개선 사항

  • 데이터베이스 연동: **PostgreSQL (Atlas 사용)**을 추가해 과거 환율 데이터를 저장합니다.
  • 데이터 분석: Pandas를 이용해 환율 추세를 분석하고 시각화하는 Python 컴포넌트를 구축합니다.

링크

  • GitHub Repository:
Back to Blog

관련 글

더 보기 »

창고 활용에 대한 종합 가이드

소개 창고는 근본적으로 3‑D 박스일 뿐입니다. Utilisation은 실제로 그 박스를 얼마나 사용하고 있는지를 측정하는 지표입니다. While logistics c...