brunch

You can make anything
by writing

C.S.Lewis

by 서진호 Aug 02. 2021

개발과 운영을 지속적으로 도와주는 Xcode Cloud

NIA 디지털 서비스 이슈리포트 7월호

지난 6월 애플 전세계 개발자 회의(WWDC21)에서 드디어 소프트웨어 개발과 IT 운영을 결합한 애플의 아이폰, 아이패드, 맥 앱들을 개발 및 배포해 주는 새 엑스코드 클라우드(Xcode Cloud)를 선보였습니다. 엑스코드 클라우드는 한마디로 말해서 앱을 자동으로 빌드, 테스트 및 배포하여 개발자들의 변경 사항을 확인하고 고품질 앱을 만드는 도구입니다. 또한 엑스코드 클라우드를 사용하면 코드를 개발 및 유지 관리하고, 앱 내부 테스터와 외부 사용자에게 앱을 제공하는 데 도움이 되는 표준 소프트웨어 개발 방식인 지속적인 통합 및 배포(CI/CD)를 채택할 수 있습니다. 


따라서 엑스코드 클라우드는 기존의 개발 통합 환경인 애플 플랫폼 프레임워크와 앱을 만드는 'Xcode' 와 앱 테스트를 하는 '테스트플라이트(TestFlight)' 와 밀접한 관계를 가지고 있습니다. 따라서 ‘앱 스토어 커넥트(App Store Connect)’에서 앱 심사와 인증을 받을 수 있는 도구 연결하여 앱 배포를 지속적 통합 및 배포(CI/CD)할 수 있는 데브옵스(DevOps) 시스템입니다.


CI/CD에서 관점에서 바라본 Xcode Cloud


데브옵스의 CI/CD 파이프라인은 코드 변경을 더 자주, 안정적으로 제공하기 위해 데브옵스 팀이 구현하는 모범 사례 중 하나입니다. 다시 말해, 지속적 통합(CI, Continuous Integration)지속적 배포(CD, Continuous Delivery/Deployment)배포 단계가 자동화되어 있으므로 소프트웨어 개발팀이 비즈니스 요구사항, 코드 품질 및 보안을 충족하는 데 집중할 수 있도록 하는 민첩한 방법론입니다.


따라서 지속적인 통합은 개발팀이 작은 변경 사항을 구현하고 코드를 버전 컨트롤 리포지토리에 자주 체크인하도록 유도하는 코딩 철학이자 일종의 관습적인 프로세스입니다. 대부분의 최신 애플리케이션은 다양한 플랫폼과 도구에서 코드를 개발해야 하므로 팀은 변경 사항을 통합하고 검증하는 메커니즘이 필요합니다. 따라서, 지속적인 통합의 기술 목표는 애플리케이션을 빌드, 패키지 및 테스트하는 일관되고 자동화된 방법을 확립하는 데 있습니다. 만일 통합 프로세스의 일관성이 유지되면, 팀은 코드 변경을 더 자주 커밋할 가능성이 높아져 공동 작업과 소프트웨어 품질이 향상됩니다.


한편, 지속적인 배포는 지속적 통합이 끝나는 곳에서 시작됩니다. 지속적인 배포는 선택한 인프라 환경에 대한 애플리케이션 제공을 자동화하고, 대부분의 팀은 개발 및 테스트 환경과 같이 프로덕션 이외의 여러 환경에서 작업하며, 코드 변경 사항을 자동으로 푸시할 수 있는 방법이 있는지 확인합니다. 그러므로 지속적인 통합과 배포 둘 다 데브옵스의 한 부분이며 소스 코드 변경 사항을 정기적으로 통합하여 문제를 조기에 포착하고 수정하는 방식입니다. 이 방식을 채택하면 팀이 협업하면서 고품질 제품을 만들 수 있는 장점을 가집니다. 


엑스코드 클라우드에서 일반적인 지속적 통합 워크플로우는 사용자 또는 팀 구성원이 리포지토리에 코드 변경 사항을 푸시할 때 실행하는 연속 자동화된 단계를 말합니다. 이러한 단계는 빌드, 테스트, 액션 또는 코드 변경이 팀의 확립된 품질 수준을 충족하는지 확인하는 데 필요한 여러 가지의 작업을 수행할 수 있습니다. 지속적 통합을 사용하면 변경 사항을 통합하는 것이 위험이 적고 다음 앱의 버전 릴리스를 안정적으로 업그레이드할 수 있습니다.


[그림 1 - XCode Cloud 전체 프로세스]

전체 앱의 수명 주기 관점에서 지속적인 통합은 개발자는 여러 소스의 피드백을 사용하여 작업할 가능성이 높다. 엑스코드에서 버그를 수정하고 기능을 만들고, 풀 리퀘스트(PR, Pull Request)에 대해 팀으로부터 코드 검토 피드백을 받고, 테스트 플라이트를 통해 테스터 피드백을 통합하고 새 버전을 배포할 수 있습니다. 소스 코드와 피드백을 생산적으로 반복하는 능력은 고품질 앱이나 프레임워크를 만드는 데 필수적입니다. 


따라서 바로 여기에 엑스코드 클라우드가 필요한데, 지속적 통합을 기반으로 하는 동시에 애플 개발자 도구 간의 구심점 역할을 합니다. 또한 프로젝트를 빌드, 테스트, 배포 및 모니터링을 통한 피드백 수집하고 신속하게 반복하기 위한 완전한 개발 파이프라인 기능들을 제공합니다. 엑스코드 클라우드 또한 Xcode 안에 통합되어 있어서 개발자는 따로 외부의 도구를 사용하지 않고 앱 개발하는 대부분의 시간을 할애할 수 있습니다.


[그림 2 - 전체 앱 주기에서의 지속적인 통합] 


Xcode Cloud에서 워크플로우 실행


엑스코드 클라우드 워크플로우(Xcode Cloud Workflow)는 엑스코드 클라우드에 수행할 작업과 시기를 알려주는 환경 설정입니다. 간단한 사용자 인터페이스로 첫 번째 워크플로우를 빠르게 시작하고 실행할 수 있습니다. 그런 다음 소스 코드 에디터로 돌아와서 편집하거나 새로운 워크플로우를 만들어 다양한 사용 사례를 지원할 수 있습니다.


워크플로우 실행 결과를 ‘빌드(Build)’라고 부르는데, 엑스코드 클라우드는 코드 서명과 여러 운영 체제 버전 및 엑스코드 릴리스에 대한 액세스를 제공하는 애플 관리형 클라우드 인프라에서 빌드를 실행합니다. 참고로 애플은 자체 클라우드가 아닌 AWS와 구글 클라우드 등 외부의 클라우드 서비스를 필요할 때마다 적절히 빌려 사용하고 있습니다.


만일 보고서 탐색기의 클라우드 탭에서 앱을 클릭하면 모든 워크플로우의 상태와 사이드바에서 최신 빌드를 볼 수 있습니다. 만일 하나의 앱을 클릭하면 워크플로우뿐만 아니라 Git 분기별로도 개발팀이 작업하는 방식에 따라 구성된 모든 빌드를 보여주는 빌드 그룹 개요가 열리므로 여러 분기에 대해 하나의 워크플로우를 사용하면서도 결과를 별도로 볼 수 있습니다. 또한 빌드 그룹 개요 한 수준 아래에는 워크플로우의 단일 실행에 대한 빌드 보고서가 있습니다. 여기에서 코드 변경과 관련된 결과를 자세히 알아볼 수 있습니다. 따라서 테스트 보고서와 로그를 보고 문제를 일으킨 코드로 바로 이동할 수 있는 장점이 있습니다.


[그림 3 - Fruta 앱을 XCode Cloud 를 실행한 사용 사례]

Xcode Cloud에서 전체 워크플로우 실행 프로세스를 설명하자면, 앱은 자동으로 생성된 기본 첫 번째 워크플로우로 시작합니다. 먼저 로컬 프로젝트를 검사하여 XCode Cloud는 이러한 초기 워크플로우 설정을 팀의 기존 구성과 일치하도록 조정할 수 있습니다.


워크플로우는 Start Connection, Environment, Actions/Notification, Post Actions 메뉴로 구성됩니다. Xcode Cloud가 Start Connection을 통해 메인 브랜치(분기)에 대한 모든 푸시, 개발자 환경에 대한 최신 릴리스의 iOS 및 맥 OS 운영체제 버전 모두에 대한 아카이브 작업을 선택한 것을 볼 수 있습니다. 엑스코드 클라우드가 내 소스 코드에 액세스하도록 승인하고 기본 리포지토리 및 모든 하위 모듈과 비공개 스위프트 패키지를 포함하여 개발자 프로젝트를 빌드하는 데 필요한 모든 소스 리포지토리를 다루는 일회성 작업을 실행합니다. 또한 개발자 프로젝트에서 두 개의 비공개 저장소를 검색하여 소스 코드가 호스팅 되는 깃허브에 명시적 권한을 부여합니다. 액세스 권한 부여를 클릭하면 다음 단계에 대한 자세한 내용이 포함된 앱스토어 커넥트로 이동하는데, 이 프로세스는 소스 제공자에 따라 다르며 어떤 이유로든 액세스 권한을 언제든지 취소할 수 있습니다.


참고로 공개적으로 접근할 수 있는 저장소의 경우 추가 승인이 필요하지 않습니다. Xcode Cloud에 대한 소스 코드 액세스 권한 부여는 웹에서 시작하여 완료되며, 엑스코드 클라우드에서 개인화된 경험을 활성화하는 데 사용되는 원본 계정에 Apple ID를 연결합니다. 이 단계는 공급자의 기본 인증 흐름과 엑스코드 클라우드의 보안 암호화를 활용하므로 내 코드와 개인 정보가 계속 보호되고 있습니다. 깃허브에 엑스코드 클라우드 애플리케이션을 설치하여 개발자가 선택한 저장소에 액세스 할 수 있도록 합니다. 이 단계가 완료되면 깃허브 계정이 모두 설정되고 이제 로컬에서 Xcode에서 사용할 수 있게끔 완료됩니다. 그런 후 저장소가 준비되었으므로 엑스코드 클라우드는 개발자의 애플리케이션과 번들 ID를 앱스토어 커넥트에 끝으로 등록하면 됩니다. 


앱스토어 커넥트와 엑스코드 클라우드의 관계


엑스코드 클라우드의 워크플로우는 엑스코드에서 사용할 수 있을 뿐만 아니라 앱스토어 커넥트에서도 사용할 수 있다. 빌드 시작 및 보기, 워크플로우 관리, 아티팩트(artifact) 보기 및 다운로드, 팀과 결과 공유, 알림 설정 관리가 포함하고 있습니다. 그리고 이미 TestFlight 에서 작업하고 있다면 엑스코드 클라우드는 빠른 액세스를 위해 앱스토어 커넥트에서 개인 알림 설정을 지정할 수도 있습니다. 빌드 실패에 대한 슬랙 알림을 설정하면 코드를 푸시 한 후에도 계속 작업할 수 있습니다. 또한 소스 코드에 수정할 사항이 있으면 개발자들이 빠르게 알림을 받을 수 있습니다. 참고로 팀의 모든 사람이 자신에게 가장 적합한 알림을 설정할 수 있습니다.


[그림4 - 앱스토어 커넥트 웹사이트에서의 바라본 Xcode Cloud 워크플로우] (출처: 애플)

이동 중이거나 엑스코드에서 설정하지 않은 프로젝트 빌드에 대한 가시성을 원하거나, 프로젝트에 코드를 커밋하지 않는 팀 구성원인 경우, 앱 스토어의 앱스토어 커넥트는 모든 기능을 갖춘 웹 기반 경험을 제공합니다. 엑스코드 클라우드에서 앱을 빌드할 때 개발자의 개발 프로세스 및 팀과의 협업을 위해 설계했지만 개인 정보 보호를 핵심으로 고려하고 소스 코드는 프로젝트의 핵심이므로 엑스코드 클라우드의 모든 측면은 데이터가 보호되도록 설계되었습니다. 그러므로 빌드 환경은 임시적이며 워크로드는 완전히 격리되어 있다. 빌드 환경은 소스 코드가 포함된 프로젝트들의 빌드 간에 처음부터 해체되고 생성됩니다.


다시 말해, 소스 코드는 저장되지 않으며 엑스코드 클라우드는 임시 빌드 환경 내에서만 코드를 가져옵니다. 빌드 데이터는 암호화되어 전용 클라우드키트(CloudKit) 데이터베이스에 저장되어 개인이 스스로 데이터를 통제할 수 있습니다. 따라서 개인의 통제권 아래에서 데이터는 언제든지 삭제할 수 있으며 시스템에서 완전히 제거됩니다.


Xcode Cloud에서 깃허브를 통한 깃옵스


깃옵스(GitOps)는 버전 관리, 협업, 규정 준수, 지속적 통합 및 배포 등 애플리케이션 개발에 사용되는 데브옵스 모범 사례를 가져와 인프라 자동화에 적용하는 운영 프레임워크입니다. 오늘날 소프트웨어 개발 수명 주기는 자동화되었지만 인프라는 전문 팀이 필요한 대부분 수동적 프로세스로 남아 있습니다. 


요즘 인프라에 대한 요구로 인해 인프라 자동화를 구현하는 것이 점점 더 중요해지고 있는데, 최신 인프라는 지속적 배포에 필요한 클라우드 리소스를 효과적으로 관리할 수 있도록 탄력적이어야 합니다. 최신 애플리케이션은 속도와 규모를 염두에 두고 개발합니다. 성숙한 데브옵스 문화를 가진 조직은 하루에 수백 번 프로덕션에 코드를 배포할 수 있습니다. 데브옵스 팀은 테스트 및 배포를 자동화하는 버전 제어, 코드 검토 및 CI/CD 파이프라인과 같은 개발 모범 사례를 통해 이를 달성할 수 있습니다.


[그림 5 GitHub 와 XCode 연결하는 깃옵스] (출처: 애플)

따라서, 깃옵스는 인프라 프로비저닝 프로세스를 자동화하는 데 사용합니다. 팀이 애플리케이션 소스 코드를 사용하는 것과 유사하게 깃옵스를 채택한 운영팀은 코드로 저장한 구성 파일을 사용합니다. 애플리케이션 소스 코드가 빌드될 때마다 동일한 애플리케이션 바이너리를 생성하는 것처럼 깃옵스 환경 설정 파일은 배포될 때마다 동일한 인프라 환경을 생성하는 것이 관리에 편리하기 때문입니다. 


Xcode Cloud는 이러한 깃옵스의 표준적인 모범 사례를 이어받아 깃(Git)을 기반으로 하며 깃허브(GitHub), 깃랩(GitLab) 또는 비트버킷(BitBucket)에 코드가 있어야 사용할 수 있습니다. Xcode13은 풀 리퀘스트를 사용한 협업을 수용하며 개발자가 풀 리퀘스트를 생성, 확인 및 주석 처리할 수 있을 뿐만 아니라 변경 사항을 코드베이스에 병합할 수 있습니다. 따라서 엑스코드 클라우드는 새로운 풀 리퀘스트를 감지하고 임시 분기를 만들고 빌드 환경을 설정하여 프로젝트를 빌드하고 테스트를 실행할 수 있습니다.


또한 엑스코드 클라우드는 종속성을 관리할 수 있으며 지정된 시간에 특정 작업을 수행하기 위한 커스텀 빌드 스크립트를 지원합니다. 엑스코드 클라우드는 전체 인프라를 설정할 필요 없이 iOS 앱용 지속적 통합 및 배포(CI/CD)를 사용하는 것과 같이 사용하기 쉬운 도구를 제공합니다. 그러나 ‘코드형 인프라(Infrastructure as Code)’, 쉐프(Chef), 퍼펫(Puppet), 테라폼(Terraform)과 같은 타 업체의 데브옵스 플랫폼은 현재 XCode13에서 지원하지 않고 있습니다.


엑스코드 클라우드는 소스 제어를 위해 깃을 사용하는 지속적 통합 시스템이며 코드베이스의 품질과 안정성을 보장하는 통합 시스템을 제공합니다. 따라서 앱을 효율적으로 게시하는 데 도움이 됩니다. 이번에 새롭게 업그레이드된 Xcode13은 다양한 소스 형상 관리 시스템으로 향상된 깃 통합, 깃허브(GitHub), 비트버킷(Bitbucket) 및 깃랩(GitLab) 협업 기능 지원과 소스 코드 호스팅 플랫폼에서 제공하는 고급 협업 기능을 원활하게 통합했습니다.


특히, 통합 개발 환경 내에서 쉽게 풀 리퀘스트을 생성하고 변경 사항 검토를 요청할 수 있습니다. 소스 코드 검토자가 제공한 모든 주석은 검토자의 이름 및 아바타와 함께 편집기 내부의 코드와 함께 인라인으로 표시되며 Xcode를 벗어나지 않고 통합 개발 환경 안에서 댓글에 답글을 달 수도 있습니다. 또한 Xcode13은 깃 리포지토리 작업 및 두 가지 버전의 파일 비교, 프로젝트의 모든 변경 사항들을 리스트 형태로 나열하고, 탐색과 같은 일반적인 작업 수행과 모든 분기(Branch)와 커밋(Commit)을 쉽게 검사할 수 있습니다.


TestFlight 와 Xcode Cloud를 결합한 테스트옵스


엑스코드 클라우드를 사용하면 여러 iOS 시뮬레이터에서 자동으로 쉽게 빌드하고 테스트할 수 있다. 오류가 발생하면 개발자가 즉시 수정할 수 있도록 엑스코드 클라우드에서 알림을 보냅니다. 선택적으로 빌드가 성공하면 테스트 플라이트를 통해 팀 구성원에게 자동으로 배포하거나 앱스토어에 게시하기 전에 검토를 위해 제출할 수 있습니다. 코드가 변경되면 지속적 배포가 자동으로 트리거할 수 있으며 애플은 테스트플라이트 충돌 보고서와의 통합을 개선하고 인증서 관리를 단순화하기 위해 새로운 클라우드 서명 서비스를 도입했습니다. 이번 새 클라우드 서명은 기존의 클라이언트 서명과 달리 클라이언트의 해시값을 클라우드에 보내고 클라우드에서 다시 인증서를 내려받는 새로운 방식으로 바뀌었습니다.


[그림 6 - 새롭게 변경된 클라우드 인증 프로세스] (출처: 애플)

참고로 테스트옵스(TestOps)는 소프트웨어 제공 수명 주기 내에서 테스트의 운영 측면을 관리하는 분야를 나타냅니다. 소프트웨어 테스팅은 기능 테스팅과 비기능 테스팅을 모두 포함하는 방향으로 진화하고 있습니다. 특히, 애자일 개발 프로세스에서의 소프트웨어 테스트는 소프트웨어 개발자, 품질 엔지니어, 수동 테스터, 제품 소유자 등이 품질 프로세스에 참여하는 지속적인 테스트 프로세스로 점점 더 많이 변하고 있는 추세입니다.


더 많은 사람이 테스트 프로세스에 참여하고 테스트 프로젝트가 성장함에 따라 소프트웨어 품질 프로세스, 인력, 시스템 및 테스트를 관리하기 위한 규율을 만들어야 할 필요성도 커졌습니다. 애플은 이번 엑스코드 클라우드와 테스트 플라이트를 통해 테스트옵스 표준 절차를 iOS 또는 맥 OS 앱들을 테스트하는 데 끌어들여 쉽게 사용할 수 있도록 지원합니다.


마치며


이번 Xcode Cloud는 애플이 그동안 패스트레인(Fastlane)과 같은 타 업체의 지속적 통합과 배포를 사용하던 경험을 본격적으로 애플이 직접 엑스코드와 통합함으로써 다양한 도구 체인을 앱의 클라이언트와 클라우드 인프라 및 서비스로 사용하는 첫 사례입니다. 그러므로 수동적인 개발 인프라 관리를 이제 자동화된 테스트 및 배포를 통해 지속적으로 개발자들에게 편리하게 사용할 수 있도록 제공합니다. 이로써 데브옵스의 철학과 문화는 스위프트 언어를 사용하는 모바일 앱 개발자들에게도 계승됩니다. 


알림


이 컬럼은 한국지능정보사회진흥원(NIA) 디지털서비스 이슈리포트 2021년 7월호에 게재된 글을 옮겨 놓았습니다. 원본은 아래의 참고 문헌의 웹사이트 링크에서 보시고 PDF 파일로도 다운로드 가능합니다.  


참고문헌 


NIA 씨앗 클라우드 이슈 리포트 - 디지털 서비스 7월호(원본):  https://www.ceart.kr/web/board/BD_board.view.do?domainCd=2&bbsCd=1033&bbscttSeq=20210729151902508®istPassword=Y&othbcAt=Y&fbclid=IwAR0BH0ZQO5JBOYXmY1gBKH7Wd0nbASWvocvb6bAjdPU9hM5JT92m4YsZXME
AWS, “What is DevOps?”: https://aws.amazon.com/ko/devops/what-is-devops/#:~:text=DevOps%20is%20the%20combination%20of,development%20and%20infrastructure%20management%20processes
InfoWorld, “What is CI/CD?”, JAN 17, 2020: https://www.infoworld.com/article/3271126/what-is-cicd-continuous-integration-and-continuous-delivery-explained.html
NIA 씨앗 이슈 리포트 5월호, “미국 빅테크 업체의 클라우드 비즈니스 동향 및 시사점”, 2021년 5월 28일: https://www.ceart.kr/web/board/BD_board.view.do?domainCd=2&bbsCd=1033&bbscttSeq=20210528180540136®istPassword=Y&othbcAt=Y
Wikipedia, “Infrastructure as Code”, https://en.wikipedia.org/wiki/Infrastructure_as_code
InfoQ, Xcode 13 Extends Team Collaboration and Source Editing Features, JUN 27, 2021: https://www.infoq.com/news/2021/06/Xcode-13-released/
Apple WWDC21 Video, “Meet Xcode Cloud”, JUN 10, 2021: https://developer.apple.com/videos/play/wwdc2021/10267/
Apple WWDC21 Video, “Explore Xcode Cloud workflows”, JUN 10, 2021: https://developer.apple.com/videos/play/wwdc2021/10268/
Apple WWDC21 Video, “Distribute apps in Xcode with cloud signing”, JUN 10, 2021: https://developer.apple.com/videos/play/wwdc2021/10204/


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari