반응형

 

요즘 AI 가 발달하면서 생겨난 일명 "바이브 코딩" 이라는 기술로, 아이디어만 있으면, 누구나 개발이 가능한 환경이 갖춰졌다.

 

나 역시도 마찬가지로 바이브 코딩으로 하고 싶었던 주제로 서비스를 만들어보기도 하고, 툴을 만들면서 내 업무의 생산성을 높이고 있다.

 

오늘 다룰 Github Action 이라는 주제와 맞지 않는 서문일 수 있지만, 우리가 만든 개발물은 결국 Git 을 통해 형상관리를 해줘야 손이 덜 가게 된다는 것을 느낄 것이다.

 

Github 는 Git 을 온라인 호스팅으로 서비스하고 있는 솔루션으로 보면 되고, 마이크소프트 산하의 제품이다.

 

Github 든 GitLab 이던 Repository 를 만들어 코드를 관리하고 있다면, 매번 새로운 Commit, Merge 가 일어날 때마다 서버에 진입하며 코드를 최신화 ($ git pull) 하고 서비스를 재시작 해야 할 것이다.

 

보통은 이 과정들을 Script 로 만들고, Jenkins , GoCD 와 같은 CI/CD 서비스 를 이용하여 Git 에 커밋이 발생할 때 자동으로 배포하게 만든다.

 

Github Action 도 비슷한 기능이 있어, 아래 소개한다.

  • 준비
    • 서비스 자동화 스크립트
    • 서비스 자동화 스크립트가 배포된 EC2 서버
  • 시나리오
    • 서비스 서버에 배포용 SSH 키페어를 생성한다.
    • 생성된 공개키를 서버의 authorized_keys 에 추가한다.
    • Github Secrets 설정에서 원격 서버의 정보를 저장한다.
    • workflow yaml 파일을 작성한다.
    • Git Action 에서 워크플로우를 실행한다.

전체 과정

1. SSH 키 생성 및 설정

 

 

먼저 로컬에서 SSH 키 페어를 생성

ssh-keygen -t ed25519 -C "github-actions"

 

생성된 공개키(id_ed25519.pub)를 서버의 ~/.ssh/authorized_keys에 추가, 개인키(id_ed25519)는 일단 복사한다.

2. GitHub Secrets 설정

Repository → Settings → Secrets and variables → Actions에서 다음 정보들을 등록

  • SSH_PRIVATE_KEY: SSH 개인키 내용 (1번 과정에서 복사한 개인키를 복사해서 붙여넣는다.)
  • SERVER_HOST: 서버 IP 또는 도메인
  • SERVER_USER: SSH 접속 유저명
  • SERVER_PORT: SSH 포트 (기본값 22)

3. GitHub Actions Workflow 파일 생성

.github/workflows/deploy.yml 파일을 생성합니다:## 더 간단한 방법: marketplace action 사용

SSH 액션을 직접 작성하는 대신, 검증된 marketplace action을 사용할 수도 있습니다:

  1. 코드 푸시: 워크플로우 파일을 커밋하고 main 브랜치에 푸시
  2. Actions 탭 확인: GitHub Repository의 Actions 탭에서 실행 상태 확인
  3. 로그 확인: 각 step의 실행 로그를 확인하여 성공/실패 여부 파악
    name: Test Workflow (여기 이름이 워크플로우 목록에 뜸)
    
    on:
      # 수동 실행 가능하도록 설정 (테스트용)
      workflow_dispatch:
      
      # push할 때도 실행 (원하면 주석 해제)
      # push:
      #   branches:
      #     - main
    
    jobs:  #워크플로우에서 실행할 작업(job)들을 정의합
      test-workflow: # 작업(job)의 고유한 이름입니다. 여기서는 '연결 테스트' 역할
        runs-on: ubuntu-latest
        # 이 작업이 실행될 환경을 지정. 최신 버전의 Ubuntu 가상 머신에서 실행
        steps:
        - name: Checkout code 
          uses: actions/checkout@v4 # GitHub 저장소의 코드를 가상 환경으로 가져오는(체크아웃하는) 공식 액션(v4 버전)을 사용
      
        - name: SSH Connection Test 
          uses: appleboy/ssh-action@v1.0.0 # SSH를 통해 원격 서버에 명령을 실행하는 서드파티 액션(v1.0.0 버전)을 사용
          with:
            host: ${{ secrets.SERVER_HOST }}
            username: ${{ secrets.SERVER_USER }}
            key: ${{ secrets.SSH_PRIVATE_KEY }}
            port: 22
            script: |
              echo "SSH Connection Test Success"
              [여기에 자동화 스크립트 실행 명령어를 넣으면 된다.]

 

결과 

이 방법으로 코드가 푸시될 때마다 자동으로 서버에 배포하거나 특정 작업을 실행할 수 있다.

 


결론

  • 배포 자동화는 사실 구성하기 귀찮다. 손도 많이가고, 시간도 많이 소요된다.
  • 그런데 한 번 구성해놓으면, 그 후는 정말 편하다.
  • 서비스 배포를 한동안 안하다가 오랜만에 하면 까먹고, 다시 기억해내려면 시간이 또 걸리거든.

 

반응형

+ Recent posts