CI/CD 자동화가 가져다 준 행복

LINE DEVELOPER DAY 2020에서 구상모 님이 발표하신 The CI/CD Automation make happiness from small pieces 세션 내용을 옮긴 글입니다.

안녕하세요. LINE Plus에서 Android 클라이언트 빌드 배포 시스템 관리 및 자동화 업무를 수행하고 있는 구상모입니다. 이번 글에서는 작은 것들을 모아 행복을 이뤄낸 CI/CD 자동화 사례를 공유하려고 합니다. 먼저 아래 짧은 LINE 메시지를 보시겠습니다.

이 메시지는 LINE 메신저 클라이언트를 사용자에게 배포할 때 실시간으로 공유되는 메시지입니다. 배포 진척 상황과 배포 완료 후 서드 마켓을 위한 추가 배포 상황까지 실시간으로 공유됩니다. 바로 이 단순한 메시지가 릴리스 담당자와 여러 유관 부서 동료들에게 행복을 가져다줄 수 있습니다. 이미 눈치채셨겠지만 이번 글의 주제는 릴리스 자동화입니다. 릴리스와 관련해 어떤 문제점이 있었는지 먼저 설명드리고 이를 어떻게 해결해 행복을 이뤘는지 말씀드리겠습니다. 또한 추가로 자동화의 필요성에 대해서도 간략하게 정리해보겠습니다.

 

기존 릴리스 과정의 문제점

릴리스 과정에서 어떤 이슈가 있었는지 알아보기 위해 개발 프로세스를 먼저 확인해보겠습니다. 개발 프로세스는 다들 아시는 것과 유사합니다. 개발하고 빌드한 뒤 QA를 거쳐 사용자에게 배포하는 순서로 진행됩니다.

여기서 이번 글의 주제인 릴리스 과정을 좀 더 자세히 살펴보겠습니다. 

 

LINE 클라이언트 릴리스 과정

LINE 클라이언트를 사용자에게 배포하는 작업은 마켓에서 릴리스 버튼을 누르면서 시작됩니다. 릴리스 버튼을 누른 뒤 사용자 오류를 탐지할 수 있는 오류 수집 시스템의 알람 규칙을 업데이트하는데요. 알람 규칙을 설정하면 사용자에게 배포된 버전에서 오류가 발생할 경우 알람이 발생하며, 이를 통해 신규 버전의 오류를 빠르게 인지해 배포를 중지하고 새로운 버전을 준비할 수 있습니다. 다음으로 여러 담당자에게 릴리스를 공지합니다. 릴리스 공지는 운영과 연관되기 때문에 많은 유관 부서에서 관심을 갖고 있습니다. 이어서 개발된 소스의 이력을 추적하기 위해 버전 태그를 생성하고 새로운 버전을 표시하기 위해서 소스 코드를 업데이트합니다. 이후 사용자 대상 배포 비율이 100%가 되면 서드 마켓 지원과 line.me 홈페이지에서 신규 클라이언트를 제공하기 위한 배포를 수행합니다. 이 또한 사용자 배포와 동일하게 여러 담당자가 참여한 채널에 공지하는 것으로 종료됩니다. 

 

릴리스 과정의 세 가지 문제점

릴리스 작업은 아래와 같이 크게 일곱 가지로 정리할 수 있고, 이 과정에서 세 가지 문제점을 파악했습니다.

첫째, 각 작업을 수동으로 조작하고 있었습니다. 배포가 잘 진행되고 있는지 혹은 신규 버전에서 오류가 발생하고 있지는 않은지 등의 상황을 확인하면서 이후 작업을 수작업으로 진행하고 있었는데요. 이런 작업은 진행할 때 항상 긴장해야 하기 때문에 릴리스 담당자나 고객 대응 팀의 피로도가 증가했습니다.

두 번째로 작업이 누락되는 상황이 발생하기 시작했습니다. 장애가 발생하지 않으면 누락 사실을 인지하기 어려운 작업들을 놓칠 수 있는 가능성이 계속 존재하고 있었습니다.

마지막으로 릴리스 관련 업무를 추가하거나 변경할 때 부담이 있었습니다. 이미 일곱 개의 작업을 수행해야 하는 상태에서 또 다른 작업을 추가하거나 혹은 담당자를 변경해야 한다면 어떻게 될까요? 이 질문의 답변은 쉽게 예상하실 거라고 생각합니다. 

 

자동화로 문제 해결!

문제를 인식했으니 이제 문제를 해결해야겠죠. 우선 오류 수집 시스템의 알람 업데이트부터 서드 마켓 배포와 알람까지 순차적으로 자동으로 실행되도록 작업을 구성해서 연결했습니다.

배포를 시작하면 각 작업은 자동으로 수행되며 완료 알람도 발송됩니다. 이 작업들은 마켓 내 배포 상태에 따라 실행돼야 하는데요. 여기서 문제가 하나 있었습니다. 바로 외부 접근이 차단된 사내 망을 이용해야 한다는 점이었습니다. 이에 마켓에서 공개한 API를 이용해 주기적으로 데이터를 조회하는 방식으로 릴리스 상태를 모니터링하는 작업을 만들었습니다.

이 작업을 통해 거의 실시간으로 마켓의 배포 상태를 탐지할 수 있게 되었습니다. 기존 수작업들은 마켓 내 배포와 동시에 자동으로 실행될 수 있게 구성하고 연결했습니다. 이를 통해 새로운 작업을 부담 없이 추가할 수 있게 되었다는 이점을 얻었고, 덕분에 CI 시스템에 연관된 데이터나 설정을 업데이트하는 작업과 마켓에 배포된 경우 코드 리뷰어 수를 늘려서 패치 버전 개발 시 리뷰 정책을 강화하는 자동화 작업을 추가할 수 있었습니다.

 

자동화가 찾아준 세 가지 행복

다시 메신저 화면으로 돌아가 보겠습니다. 아래 메시지가 가져다주는 행복이 예상되시나요? 

첫 번째는 수행해야 할 업무에 집중할 수 있게 되었다는 것입니다. 릴리스 담당자가 본래 수행해야 하는, 배포가 시작되면 상황적 오류를 빠르게 인지해 유관 부서와 협의 후 릴리스 중단 여부를 검토해야 하는 중요한 업무 말이죠. 두 번째로 실수로 작업을 누락하는 것을 방지해 주었고 단순 작업에서 벗어날 수 있게 해주었습니다. 마지막으로 업무의 신뢰를 높여줬습니다. 위 메시지를 접한 사람들은 릴리스 작업이 자동으로 수행되고 있으며 이상 없이 진행되고 있다는 믿음이 생겼습니다.

이렇게 주어진 일에 집중할 수 있는 행복과 지루한 일에서 벗어날 수 있는 행복, 신뢰가 형성되는 행복을 몇 줄의 메시지와 자동화를 통해 만들어 낼 수 있었습니다.

 

지속적인 유지 보수가 필요한 자동화

끝으로 자동화를 지속적으로 관리하고 유지해야 하는 이유를 정리해 봤습니다. 새로운 기능이 지속적으로 추가되며 소프트웨어가 변화하듯 플랫폼의 변화와 라이브러리의 변화, 그리고 시스템의 변화 등 주변 환경도 끊임없이 변화하고 있습니다. 이런 변화에 대응하기 위해서 DevOps 엔지니어나 자동화 엔지니어가 필요합니다. 또한 요구 사항이 늘어나거나 변경되면서 주변 환경이 복잡해지고 있습니다. 규칙이 늘어나거나 배포 도구가 변경되기도 합니다. 이런 환경에 기민하게 적응하기 위해서는 자동화가 필수입니다. 이에 저는 앞으로 LINE에서 CI/CD 자동화를 통해 새로운 행복을 찾고 개발자와 사용자의 간극을 줄이는 데 더욱 힘쓰려고 합니다.

 

마치며

이번 글에서 개발 프로세스 중심으로 릴리스 자동화 작업에 대한 이야기를 풀어보았습니다. 아래에서 발표 영상도 확인하실 수 있습니다. 기회가 된다면 다음에는 자동화하기 위해 활용하고 있는 기술과 경험을 공유해 보려고 합니다. 읽어주셔서 감사합니다.