메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

개발자가 개인 프로젝트에 가장 선호하는 CI 툴, 깃허브 액션

한빛미디어

|

2024-06-13

|

by 브렌트 래스터

5,512

최근 10년 동안 소프트웨어 개발 과정에는 단순한 코드 작성 외에도 빠르고 나은 배포까지 포괄하게 됐습니다. 지속적 통합/지속적 배포(이하 CI/CD)와 데브옵스 DevOps, 그에 관련된 관행은 이제 거의 당연한 과정으로 인식되며 그만큼 적용 또한 쉽습니다. 과거에는 깃허브를 사용해 배포 파이프라인이나 기타 중요한 자동화를 제공하려면 깃허브와 별도인 다른 도구들을 깃허브에 통합해서 사용해야 했습니다. 

 

이런 식으로 CI/CD 프로세스를 외적으로 추가하는 방법은 오래전부터 있었지만, 깃허브 에코시스템 내에서 CI/CD와 엔드투엔드 소프트웨어 개발 수명주기(SDLC)를 지원하는 진정한 통합 솔루션은 없었습니다. 이제 이에 대한 해답이 깃허브 액션 GitHub Actions이라는 형태로 등장했습니다.

 

깃허브 액션

깃허브 액션은 엔드투엔드 깃허브 중심 소프트웨어 개발 생명주기software development life cycle(SDLC) 프로세스로, 이전에는 깃허브에 내장되지 않아 다른 솔루션으로 추가해야 했던 자동화 플랫폼과 프레임워크가 이제 깃허브 액션의 형태로 제공됩니다. 이 정의에 이미 많은 개념이 담겨 있습니다. 우선 깃허브 액션 기능의 핵심인 자동화 플랫폼 프레임워크 두 가지에 집중해보겠습니다.

 

1) 자동화 플랫폼

일반적인 깃허브 사용자 입장에서 깃허브 액션은 ‘깃허브 이벤트에 연결된 자동화 워크플로를 만들고 실행하는 수단’입니다. CI/CD를 떠올리면 이해하기 쉽습니다.  

 

풀 리퀘스트로 코드를 변경할 때마다 깃허브가 지속적 배포 파이프라인을 발동한다고 가정해 보겠습니다. 깃허브 액션을 사용하지 않는다면 풀 리퀘스트가 발생했다는 깃허브의 알림에 응답해 이를 처리하는 외부 도구나 프로세스가 필요합니다. 그리고 풀 리퀘스트가 진행됐다는 초기 알림 이후에 실행되는 자동화는 외부 도구로 구현합니다.

 

깃허브 액션을 사용하면 초기 알림과 이후 자동화를 도와줄 외부 도구나 프로세스가 필요하지 않습니다. (사진 출처: 깃허브 액션 홈페이지)

 

반면 깃허브 액션을 사용하면 깃허브에 내장된 기능으로 자동화를 구현할 수 있습니다. 푸시나 풀 리퀘스트 같은 이벤트에 이어서 무슨 프로세스를, 언제, 어떻게 진행할지 자동화 프로세스를 정의하는 식이죠. 리포지터리 내의 브랜치에서 푸시가 발생하면 자동으로 최신 코드를 가져와 빌드하게 자동화하거나 브랜치에 풀 리퀘스트가 발생하면 자동으로 코드를 빌드하고 테스트하는 자동화도 가능합니다. 테스트가 실패하면 깃허브 이슈를 업데이트하고 실패하지 않으면 자동으로 새 릴리스를 진행합니다.
 

이렇게 정의한 자동화는 편리하게 생성한 워크플로를 코드와 함께 깃허브 리포지터리에 저장합니다. 심지어 리포지터리 안에서의 편집도 지원합니다. 정리하면, 액션은 깃허브에 내장된 기능으로 자동화를 쉽게 구현하고, 깃허브가 제공하는 프레임워크가 액션의 구조와 흐름을 잡아줍니다. 

 

2) 프레임워크

자동화 플랫폼을 뒤죽박죽인 기능 모음이 아닌 체계적이고 써먹기 좋은 프로세스로 전환하려면 구조와 흐름을 명확하게 잡을 사람이 필요합니다. 구조와 흐름만 있다면 유용한 자동화 도구를 조합해 모든 작업이 순조롭게 수행됩니다. 구조와 흐름이 없는 자동화 플랫폼은 그저 도구 모음일 뿐이죠.


깃허브 액션의 경우, 이 프레임워크는 깃허브의 핵심 구성 요소들을 체계적으로 모아둔 집합으로 구성됩니다. 관련 있는 구성 요소를 모두 조합하면 매우 복잡한 자동화까지도 이해하기 쉬운 방식으로 구현해 결과물을 코드 형태로 저장합니다. 

 

우선 일치하는 이벤트 발생하면 리포지터리에 저장된 워크플로 정의가 트리거되고, 그러면 워크플로가 지정하는 러너runner라는 시스템에서 job이 실행됩니다. 잡은 사전 정의된 액션을 호출하거나 러너의 OS 셸에서 명령을 실행하는 스텝step으로 구성됩니다.


이전에도 API 호출과 같은 메커니즘으로 유사한 구현이 가능했지만, 이를 적절히 조합하기는 어려웠습니다. 개발자는 적절한 API를 찾아 호출하고, 젠킨스나 트래비스 CI 등의  다른 외부 도구와 통합하기 위해 상당한 시간과 노력을 투자해야 했습니다. 또는 사용자 지정 스크립트나 프로그래밍을 해야 원하는 목표에 도달할 수 있었습니다. 특히 깃허브에서 프로세스를 관리하려면 훨씬 더 어려웠습니다(이를 위해 제품에서 사용할 리포지터리를 깃허브 외부에 미러링하는 우회적인 방법도 있었습니다).


깃허브 액션은 이보다 원활하고 유연한 사용자 경험을 제공하는 프레임워크입니다. 이런 유연성은 액션을 게시하고 공유하는 공개 게시판인 액션 마켓플레이스 Actions Marketplace를 통해 더욱 강화됩니다. 일반적인 활동(예: 코드를 체크아웃하거나 특정 빌드 도구로 빌드하길 원하는 경우)을 자동화하고 싶다면 마켓플레이스에 있는 기존 액션에서 선택해 가져다 쓸 수 있습니다. 

 

액션을 게시하고 공유하는 게시판인 액션 마켓플레이스

 

더 광범위한 로직을 원하거나 특수한 액션이 필요하지만 아직 공개한 액션이 없다면 잘 정의된 프레임워크를 십분 활용해 사용자 지정 액션을 직접 만들어도 됩니다. 원한다면 만든 액션을 마켓플레이스에 게시해 다른 사람들과 공유할 수 있습니다. 이런 접근 방식은 이전에는 깃허브에서 사용할 수 없었던 유연성과 재사용성, 확장성을 제공합니다. 또한 다양한 사용 사례에 액션을 결합해 신속한 프로토타입 제작 및 구현이 가능합니다.

 

깃허브 액션의 사용 사례

CI/CD가 처음 등장했을 당시에는 주로 젠킨스 같은 전용 도구로 파이프라인을 만들었습니다. 이러한 도구는 유연했지만 너무 유연해서 문제였습니다. 개별 구성 요소를 한 파이프라인으로 묶는 데 너무 많은 과정이 필요했기 때문입니다. 

 

CI/CD가 널리 채택됨에 따라 이 파이프라인이란 개념은 소프트웨어 업계 전반에 자리 잡았습니다. 그와 함께 단순한 테스트 구축에만 사용하던 파이프라인 정의 능력 또한 업계 전반에 걸쳐 향상됐습니다. 오늘날의 CI/CD 파이프라인은 매우 복잡하거나 고급 테스트, 여러 통합 수준, 자동화된 배포/릴리스가 포함되기도 합니다. 깃허브 액션을 사용하면 이렇게 복잡한 처리에 필요한 워크플로를 만들 수 있으며, 깃허브의 생태계를 벗어나지 않아도 된다는 장점도 있습니다. 또한 추가적인 자동화 사용 사례에 필요한 만큼 다양한 워크플로를 만들 수 있습니다.


깃허브 액션은 프로세스에서 파이프라인 pipeline이라는 용어를 명시적으로 사용하지 않지만, 프레임워크의 흐름을 보면 파이프라인의 구조와 거의 흡사합니다. 워크플로에는 job이라 부르는 작은 기능 단위가 서로 연결됩니다. 잡은 다른 애플리케이션에서 흔히 스테이지 stage라고 부릅니다. 잡과 스테이지는 전체 자동화 프로세스 내에서 딱 집어 구분되는 개별적인 기능 하나를 수행하는 구간을 의미합니다. 실제로 다른 자동화 도구를 가지고 개발하는 경우에 빗대서 이해하면, 전체 깃허브 액션의 흐름이 곧 파이프라인인 셈입니다. 즉, 특정한 변경 사항이나 이벤트가 발생하면 이에 대응해 자동화된 액션이 수행됩니다.


깃허브 액션은 환경 외부에서 일어난 이벤트나 특정 일정, 액션 인터페이스의 수동 조작에 반응하는 동시에 깃허브에서 일어나는 사건에도 반응합니다. 


깃허브 액션은 주로 CI 혹은 CI/CD 때문에 사용하지만 워크플로와 액션으로 거의 모든 프로세스를 자동화할 수도 있습니다. 사용할 만한 액션을 찾고 있다면 스타터 워크플로 starter workflow와 액션 마켓플레이스를 살펴보기를 추천합니다.

 

1) 스타터 워크플로

출처:  책 <러닝 깃허브 액션> (브렌트 래스터 저, 2024)

입문자가 초기 단계에 액션을 제대로 응용하는 걸 돕기 위해, 깃허브는 새 워크플로를 만들기 시작할 때 여러 스타터 워크플로 예시를 제공합니다. 반드시 사용할 필요는 없지만, 목적에 맞거나 비슷하다면 [Configure](구성) 버튼을 클릭해 이 워크플로를 가져와 작업시간을 줄일 수 있습니다. 스타터 워크플로가 있는 카테고리는 다음과 같습니다.

배포

컨테이너처럼 배포 가능한 개체를 생성한 다음 다양한 클라우드 플랫폼에 배포하는 워크플로

보안

주로 다양한 보안 플랫폼과 해당 도구를 사용하는 코드 스캔 워크플로

지속적 통합

다양한 프로그래밍 언어 및 도구에 대한 빌드, 테스트 혹은 퍼블리싱 영역을 포괄하는 워크플로

자동화

기본 자동화에 참고하기 좋은 몇 가지 간단한 예시. 

hello world 출력, 워크플로 수동 트리거, 풀 리퀘스트 및 이슈 같은 깃허브 구성 다루기 등이 있습니다.

페이지

개츠비, 아스트로, 지킬 등과 같은 일반적인 도구를 사용해 사이트를 패키징, 배포하는 워크플로

 

이 외에 스타터 워크플로의 전체 목록과 코드는 https://github.com/actions/starter-workflows 에서 찾아볼 수 있습니다.

 

2) 액션 마켓플레이스

깃허브 마켓플레이스의 [Actions] 탭에는 이미 다른 사람이 만든 유용한 액션이 모여있습니다. 사용자는 원하는 액션을 찾아 호출만 하면 됩니다.

 

깃허브의 마켓플레이스


이 액션들은 완전한 기능을 갖춘 코드로 사용자가 자신의 워크플로에 자유롭게 도입할 수 있습니다. 다른 애플리케이션에 기능을 추가하는 플러그인이나 기타 애드온 모듈과 비슷하다고 생각하면 됩니다. 워크플로를 만들기 위해 깃허브 기본 제공 환경 내에서 액션 마켓플레이스로 이동하기도 합니다. 여기에서 액션을 찾아 직접 코딩하는 시간과 노력을 줄일 수 있습니다. (물론 나만의 액션을 만들 수도 있습니다. 이는 책 「러닝 깃허브 액션」에서 상세히 다룹니다.)

 

마켓플레이스에는 통합 개발 환경 IDE과의 상호 작용, 현지화, 모바일 개발, 심지어 지라JIRA같은 프로젝트 관리용 애플리케이션을 위한 카테고리도 있습니다. 마켓플레이스의 액션들은 깃허브가 공식적으로 만들어 올릴 때도 있고 다른 개인, 조직 또는 회사 등 액션을 사용하는 사용자들이 직접 만들어 공유한 것들도 있습니다.


새 워크플로를 만들 때, 액션 마켓플레이스는 이미 필요한 기능을 수행하는 기존 액션을 모아두어 기능을 직접 코딩하는 수고를 덜어줍니다. 이 모든 걸 무료로 이용할 수 있습니다 (기준 이상으로 사용이 발생하면 이용료가 부과됩니다).

 


위 글은 「러닝 깃허브 액션」에서 내용을 발췌하여 정리하였습니다.

댓글 입력
자료실

최근 본 상품0