73. 깃허브 액션 (GitHub Actions)
⚠️ 이 문서는 개발자들이 소스코드를 올리던 단순한 코드 저장소(Git)였던 깃허브가 자체적으로 내장한 강력한 CI/CD(지속적 통합/배포) 자동화 로봇으로, **무겁게 따로 서버를 세팅해야 했던 젠킨스(Jenkins)의 시대를 끝내고 소스코드 폴더 안에
.yml파일 하나만 던져두면 마이크로소프트의 거대한 클라우드 서버가 코드를 대신 빌드하고 배포해 주는 차세대 인프라 자동화 도구인 'GitHub Actions'**를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 소스코드 관리(GitHub)와 파이프라인 자동화(CI/CD)를 하나의 툴로 완벽하게 통일해 버린 일체형 생태계다. 코드 푸시(Push)나 풀 리퀘스트(PR) 같은 깃허브 내의 모든 '사건(Event)'을 트리거로 삼아 자동화 스크립트를 폭발시킨다.
- 가치: 회사가 밤낮으로 젠킨스 서버를 관리하고 플러그인 업데이트하다 에러가 터지는 인프라 유지보수(Ops)의 고통을 0(Zero)으로 만들었다. 서버 없는 '서버리스(Serverless) CI/CD'의 편리함과 막강한 오픈소스 액션(Action) 스토어 생태계가 최대 무기다.
- 기술 체계: 프로젝트 루트의
.github/workflows/폴더 아래에 텍스트 기반의 YAML 파일로 언제 봇이 깰지(on), 어떤 컴퓨터에서 돌릴지(runs-on), 무슨 일을 할지(steps) 선언적으로 코딩(Pipeline as Code)하여 구동한다.
Ⅰ. 젠킨스(Jenkins)의 짐을 벗어던지다: 일체형 클라우드 CI
서버 관리의 늪에서 벗어나 코드에만 집중하게 된 혁명이다.
- 기존 젠킨스(Jenkins)의 치명적 피로감:
- 젠킨스를 쓰려면 AWS에 서버(EC2)를 임대하고, 자바를 깔고, 젠킨스를 띄우고, GitHub과 연동되게 웹훅(Webhook)을 수동으로 연결해 줘야 했다.
- 젠킨스 서버 자체가 해킹당하거나 디스크가 꽉 차서 뻗으면, 회사의 모든 배포 라인이 멈추는 대재앙이 일어났다. 데브옵스 팀은 젠킨스의 노예였다.
- GitHub Actions의 파괴적 등장 (서버리스 CI/CD):
- 마이크로소프트(GitHub 인수)가 말했다. "네가 코드 올리는 우리 깃허브 서버 안에 엄청난 클라우드 컴퓨터(Runner)들을 대기시켜 놨어. 네가 코드 올릴 때마다 우리가 공짜로(또는 과금) 빌려줄 테니까, 거기서 빌드하고 배포해!"
- 인프라 관리가 0이다. 서버 다운 걱정이 없다. 그냥 내 소스코드 파일들 사이에 조용히
.github/workflows/main.yml이라는 텍스트 파일 하나만 만들어두면, 깃허브가 그걸 보고 백그라운드에서 로봇을 출동시켜 모든 일을 끝내버린다.
📢 섹션 요약 비유: 옛날엔 자동차(코드)를 조립하려고 우리 회사 뒷마당에 수억 원짜리 조립 공장(젠킨스 서버)을 직접 짓고, 24시간 경비원까지 둬서 관리해야 했습니다. GitHub Actions는 거대한 '마이크로소프트 공용 공유 공장'입니다. 조립 매뉴얼(YAML 파일)만 택배 상자에 같이 껴서 보내면, 알아서 그 공장 로봇들이 조립하고 포장까지 다 해서 고객에게 보내주는 완벽한 아웃소싱 시스템입니다.
Ⅱ. GitHub Actions의 해부학: Event, Workflow, Job, Step
이 네 가지 단어만 알면 자동화 파이프라인의 뼈대를 짤 수 있다.
- 이벤트 (Event: 언제 깰 것인가? -
on):- 봇(Bot)을 깨우는 방아쇠다. "누군가
main브랜치에 코드를push했을 때", 또는 "매일 밤 12시에 예약 스케줄(cron)로", "PR이 올라왔을 때" 등 무한한 조건 설정이 가능하다.
- 봇(Bot)을 깨우는 방아쇠다. "누군가
- 워크플로우 (Workflow: 무엇을 할 것인가?):
- 방아쇠가 당겨졌을 때 실행될 최상위 자동화 공정 1개다. 1개의
.yml파일이 1개의 워크플로우를 뜻하며, 보통 'CI(테스트) 워크플로우'와 'CD(배포) 워크플로우'를 따로 쪼개어 만든다.
- 방아쇠가 당겨졌을 때 실행될 최상위 자동화 공정 1개다. 1개의
- 잡 (Job: 병렬 실행 단위):
- 워크플로우 내부의 거대한 덩어리다. 기본적으로 여러 개의 잡(Job)은 동시(병렬)에 실행되어 속도를 극대화한다.
needs키워드를 써서 "빌드(Job A)가 성공해야만 배포(Job B)를 시작해라"라고 강제로 순서(직렬)를 맞출 수도 있다.- 런너(Runner): 각 Job은
runs-on: ubuntu-latest라고 적어서, 깃허브가 빌려주는 최신 우분투 리눅스 가상머신(Runner) 위에서 깨끗하게 백지상태로 실행된다.
- 스텝 (Step: 실제 쉘 명령어와 액션):
- Job 안에서 순차적으로 실행되는 구체적인 타이핑 명령어들이다.
run: npm install처럼 내가 직접 리눅스 명령어를 치거나, 남이 만든 훌륭한 매크로 버튼인uses: actions/checkout@v3(소스코드 가져오기 액션)를 가져다 쓴다.
📢 섹션 요약 비유: 공장의 작업 지시서(Workflow)입니다. "매일 밤 12시(Event)에, 리눅스 작업자(Runner)를 불러서, 청소와 재고 조사(2개의 병렬 Job)를 시켜라. 청소 작업자는 먼저 빗자루를 들고(Step 1), 바닥을 닦아라(Step 2)"라는 완벽하게 짜인 다단계 로봇 조종 스크립트 문법입니다.
Ⅲ. 최강의 킬러 피처: Marketplace 'Action' 생태계
내가 며칠 밤새워 짤 스크립트를 누군가 버튼 한 개로 만들어 놨다.
- 남의 코드를 레고 블록처럼 훔쳐 쓰기 (
uses):- AWS S3에 빌드된 파일을 복사해 넣으려면 쉘 스크립트에 AWS 자격 증명을 뚫고 CLI 명령어를 치는 수십 줄의 더러운 스크립트를 짜야 한다.
- 하지만 깃허브 마켓플레이스에는 아마존이 직접 올려둔
aws-actions/configure-aws-credentials라는 기성품 레고 블록(Action)이 있다. - 내 YAML 파일에
uses: aws-actions/...한 줄만 쓱 적어주면 그 복잡한 로그인 과정이 0.1초 만에 깔끔하게 해결된다.
- 무한한 커뮤니티의 힘:
- 도커 이미지 굽기, 슬랙 알림 보내기, 쿠버네티스 배포하기 등 데브옵스 엔지니어가 상상할 수 있는 모든 99%의 뻘짓(스크립트)은 이미 전 세계 천재 개발자들이 예쁜 액션(Action) 블록으로 만들어 무료 스토어에 올려두었다.
- 개발자는 그저 장바구니에 담듯 이 액션들을 내 YAML 파일에 끼워 맞추기(Copy & Paste)만 하면 완벽한 기업용 CI/CD 배포 라인을 단 1시간 만에 구축할 수 있다. 이것이 젠킨스의 플러그인을 학살해 버린 가장 무서운 생태계의 힘이다.
📢 섹션 요약 비유: 과거 젠킨스 공장에서는 컨베이어 벨트를 깔 때 볼트와 너트(쉘 스크립트)를 직접 하나하나 돌려서 기계를 조립해야 했습니다. GitHub Actions는 전 세계 장인들이 만들어둔 '자동 압축기', '자동 포장기' 완제품(Action 블록)들을 거대한 무료 쇼핑몰(마켓플레이스)에 쫙 진열해 두고, 우리는 카트에 담아와서 콘센트만 꽂으면 바로 수백억짜리 배포 공장이 뚝딱 완성되는 경이로운 레고 조립 세상입니다.