카카오웹툰이 브랜치 이름을 파싱해 배포하던 방식을 버리고, `workflow_dispatch` 와 GitHub CLI 로 로컬에서 워크플로를 직접 실행하는 방식으로 바꾼 기록이다. 여기에 `inquirer.js` 를 얹어 터미널에서 브랜치·리전·환경을 골라 배포하게 만든다.
핵심 포인트- 기존 방식은 배포용 브랜치를 만들어 push 하고, 그 브랜치 이름(예: `deploy/twn/qa/test`)을 파싱해 리전과 환경을 얻는 구조였다.
- 그래서 배포할 때마다 로컬에서 브랜치를 최신화하고 새 브랜치를 만들어야 하는 번거로움이 있었다.
- `workflow_dispatch` 를 쓰면 push 이벤트 없이 워크플로를 수동 실행할 수 있고, `github.event.inputs` 로 값을 받을 수 있다.
- 실행은 GitHub CLI 의 `gh workflow run` 으로 하며, `--ref` 로 어느 브랜치에서 실행할지, `-F key=value` 로 입력값을 넘긴다.
- `inquirer.js` 로 터미널 UI 를 만들어 사용자가 브랜치·리전·환경을 고르면 그 값을 `gh workflow` 명령에 넘겨주도록 감쌌다.
상세 정리- 이 글은 이전 "카카오웹툰은 GitHub Actions를 어떻게 사용하고 있을까?" 의 연장선으로, 그때 예고한 GitHub CLI 방식 전환을 설명한다.
- 실습 준비: CRA 로 리액트 프로젝트를 만들어 원격 저장소에 push 한다. 사실 프로젝트가 없어도 `.github/workflows` 폴더만 있으면 GitHub Actions 는 동작한다.
- 워크플로 작성: `on` 에 push 대신 `workflow_dispatch` 키워드를 넣고, region 과 env 같은 입력값을 정의한다. 원하는 값을 얼마든지 추가할 수 있다.
- 검증 단계로 수동 트리거 시 inputs 값이 제대로 들어오는지 출력해 확인한다.
- GitHub CLI 설치는 Mac 기준 터미널 명령 한 줄이며, 공식 설치 안내를 링크로 건다.
- 인증 함정: 설치만 하고 실행하면 인증 정보가 없다는 에러가 난다. `gh auth login` 으로 웹 인증 코드를 복사·붙여넣어 완료해야 `gh` 명령을 쓸 수 있다.
- 실행 확인: Actions 탭에서 push 같은 이벤트 없이 워크플로가 수동 트리거된 것과, env·region 값이 입력한 대로 찍힌 것을 확인한다.
- 반복 부담 해소: 매번 긴 명령을 치지 않도록 package.json 스크립트에 넣어 둔다.
- `inquirer.js` 도입 이유: 카카오웹툰은 매번 다른 브랜치·리전·환경으로 배포하므로 그 값을 입력받을 UI 가 필요했다. 터미널에서 선택형 입력을 간단히 만들 수 있는 라이브러리다.
- 구현: `deploy.js` 에서 사용자 입력을 받아 그 값을 `gh workflow` 명령에 넘긴다. CommonJS 가 아닌 ESM 을 써서 package.json 에 `type: module` 을 명시했다.
- 권한 함정: 실행 시 Permission 에러가 날 수 있어 `deploy.js` 의 권한을 열어 준다. 개발자만 쓰는 파일이라 자유롭게 읽고 쓰게 풀었다고 밝힌다.
- 결과: 브랜치는 master, env 는 prod, region 은 twn 처럼 사용자가 고른 값이 그대로 Actions 에 반영된다.
- 정리: 이제 브랜치를 최신화하지도, 만들지도, 파싱하지도 않는다. 다만 이벤트로 실행되는 워크플로도 여전히 함께 존재한다.
왜 읽나배포용 브랜치 이름에 정보를 실어 나르는 방식이 불편한 팀에게 `workflow_dispatch` + GitHub CLI 로 옮기는 전체 경로를 보여준다.