과거, 나의 첫 자동 배포기(feat. GitHub Actions) 글을 통해 GitHub Actions를 통해 자동 배포 환경을 구성하였습니다. 여러 난관을 해결하면서 개발자들이 코드를 GitHub로 push만 한다면 인프라 팀한테 알리지 않아도 자동 배포가 되어 만족스러웠습니다. 하지만 가끔 cicd가 실패하여 수동 배포를 한 적도 여럿 있었고, 예전에는 미처 생각하지 못했던 치명적인 문제도 있었습니다. 이번 시간에는 cicd 구성에 어떤 문제점이 있었고 이를 어떻게 해결하였는지에 대한 이야기를 해보려 합니다. 프론트(React), 백엔드(Spring Boot) 양 쪽 모두 cicd를 개선했으나 cicd 구조가 조금 복잡한 백엔드 cicd를 중심으로 설명드리겠습니다.

cicd를 구축하고 반 년이 지나면서 보완하고 싶은 목록들을 아래와 같이 정리하였습니다.

우선적으로 해결하고 싶은 문제들을 순서로 적었습니다. 1, 3, 4번은 프론트 cicd에서도 보완하고 싶은 공통적인 문제입니다. 먼저 첫 번째 사항부터 파헤쳐 보겠습니다.

가끔 개발자분들이 push를 했는데 배포가 진행되지 않았다고 연락이 옵니다. 분명 cicd도 통과 되었음에도 불구하고 배포가 되지 않았다니 귀신이 곡할 노릇이었습니다. 원인을 분석해보니 공통적인 문제를 찾을 수 있었습니다. 배포 실패가 일어난 시간대가 한국 시각을 기준으로 밤 혹은 새벽 시간대였다는 것입니다. 이를 바탕으로 원인을 천천히 살펴보았습니다. cicd에서 빌드와 테스트가 정상적으로 통과되면 빌드물을 현재 날짜를 이름으로 압축하여 s3에 저장을 하게 설정하였습니다. 따라서 정상적으로 빌드가 되었음에도 locale 문제로 s3에 올라간 빌드물 이름이 현재 날짜와 동일하지 않고 하루 밀려서 배포가 진행되지 않았던겁니다. 위의 사실로 ‘GitHub Actions에서 제공해준 인스턴스(GitHub-hosted runners) locale 설정이 한국 기준이 아니라서 발생하는 문제구나’라는 원인을 찾을 수 있었습니다.

이를 해결하기 위해 떠오른 생각이 2가지 있었습니다.

  1. GitHub-hosted runners의 locale 설정을 한국 기준으로 바꾼다.
  2. 빌드물 압축 파일 이름을 날짜가 아닌 다른 고유값으로 바꾼다.

첫 번째 방법을 선택한다면 GitHub Actions yaml 파일에 locale을 설정하는 코드가 들어가게 되어 설정 파일이 길어지게 됩니다. 또한 하루에 여러 번 배포를 진행한다면 날짜 값이 겹쳐 해당 날짜의 최신의 빌드물만 관리할 수 있습니다.

두 번째 방법은 압축 파일 이름을 지을 고유값만 적절히 찾는다면 위의 문제들을 해결할 수 있습니다. 문제는 고유값을 찾는 일이였습니다. 고심끝에 commit마다 고유한 id가 있으니 이름이 겹칠 일이 없는 commit id를 사용하기로 결정했습니다. 다만, 이 commit id 길이가 기니 앞 8자리를 짤라서 쓰기로 하였습니다.

GitHub Actions에서 commit id를 쓰려면 아래의 코드와 같이 GITHUB_SHA 변수를 사용하면 됩니다. 앞 8자리만 쓸거니 GITHUB_SHA::8으로 슬라이스 처리하였습니다.