지난 6월 애플 전 세계 개발자 회의(WWDC 2021)에서 드디어 소프트웨어 개발과 IT 운영을 결합한 애플의 아이폰, 아이패드, 맥 앱들을 개발 및 배포해 주는 새로운 엑스코드 클라우드(Xcode Cloud)를 선보였다.
엑스코드 클라우드?
엑스코드 클라우드(Xcode Cloud)는 한마디로 말해서 앱을 자동으로 빌드, 테스트 및 배포하여 개발자의 변경 사항을 확인하고 고품질 앱을 만드는 도구이다. 또한, 엑스코드 클라우드를 사용하면 코드를 개발 및 유지 관리하고, 앱 내부 테스터와 외부 사용자에게 앱을 제공하는 데 도움이 되는 표준 소프트웨어 개발 방식인 지속적인 통합·배포(CI/CD)를 채택할 수 있다.
따라서 엑스코드 클라우드는 기존의 개발 통합 환경인 애플 플랫폼 프레임워크와 앱을 만드는 엑스코드와 앱 테스트를 하는 테스트플라이트(TestFlight)와 밀접한 관계를 가지고 있다. 따라서 ‘앱 스토어 커넥트(App Store Connect)’에서 앱 심사와 인증을 받을 수 있는 도구 연결하여 앱 배포를 지속적 통합·배포(CI/CD)할 수 있는 데브옵스(DevOps) 시스템이다.

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

따라서 지속적인 통합은 개발팀이 작은 변경 사항을 구현하고 코드를 버전 컨트롤 리포지토리에 자주 체크인하도록 유도하는 코딩 철학이자 일종의 관습적인 프로세스다. 대부분의 최신 애플리케이션은 다양한 플랫폼과 도구에서 코드를 개발해야 하므로 팀은 변경 사항을 통합하고 검증하는 메커니즘이 필요하다. 따라서, 지속적인 통합의 기술 목표는 애플리케이션을 빌드, 패키지 및 테스트하는 일관되고 자동화된 방법을 확립하는 데 있다. 만일 통합 프로세스의 일관성이 유지되면, 팀은 코드 변경을 더 자주 커밋할 가능성이 높아져 공동 작업과 소프트웨어 품질이 향상된다.
한편, 지속적인 배포는 지속적 통합이 끝나는 곳에서 시작된다. 지속적인 배포는 선택한 인프라 환경에 대한 애플리케이션 제공을 자동화한다. 대부분의 팀은 개발 및 테스트 환경과 같이 프로덕션 이외의 여러 환경에서 작업하며, 코드 변경 사항을 자동으로 푸시할 수 있는 방법이 있는지 확인한다. 그러므로 지속적인 통합과 배포 둘 다 데브옵스의 한 부분이며 소스 코드 변경 사항을 정기적으로 통합하여 문제를 조기에 포착하고 수정하는 방식이다. 이 방식을 채택하면 팀이 협업하면서 고품질 제품을 만들 수 있는 장점을 가진다.
엑스코드 클라우드에서 일반적인 지속적 통합 워크플로우는 사용자 또는 팀 구성원이 리포지토리에 코드 변경 사항을 푸시할 때 실행하는 연속 자동화된 단계를 말한다. 이러한 단계는 빌드, 테스트, 액션 또는 코드 변경이 팀의 확립된 품질 수준을 충족하는지 확인하는 데 필요한 여러 가지의 작업을 수행할 수 있다. 지속적 통합을 사용하면 변경 사항을 통합하는 것이 위험이 적고 다음 앱의 버전 릴리스를 안정적으로 업그레이드할 수 있다.

전체 앱의 수명 주기 관점에서 지속적인 통합은 개발자는 여러 소스의 피드백을 사용하여 작업할 가능성이 높다. 엑스코드에서 버그를 수정하고 기능을 만들고, 풀 리퀘스트(PR, Pull Request)에 대해 팀으로부터 코드 검토 피드백을 받고, 테스트 플라이트를 통해 테스터 피드백을 통합하고 새 버전을 배포할 수 있다. 소스 코드와 피드백을 생산적으로 반복하는 능력은 고품질 앱이나 프레임워크를 만드는 데 필수적이다.
따라서 바로 여기에 엑스코드 클라우드가 필요한데, 지속적 통합을 기반으로 하는 동시에 애플 개발자 도구 간의 구심점 역할을 한다. 또한, 프로젝트를 빌드, 테스트, 배포 및 모니터링을 통한 피드백 수집하고 신속하게 반복하기 위한 완전한 개발 파이프라인 기능들을 제공한다. 엑스코드 클라우드 또한 엑스코드 안에 통합되어 있어서 개발자는 따로 외부의 도구를 사용하지 않고 앱 개발하는 대부분의 시간을 할애할 수 있다.

엑스코드 클라우드에서 워크플로우 실행
엑스코드 클라우드 워크플로우는 엑스코드 클라우드에 수행할 작업과 시기를 알려주는 환경 설정이다. 간단한 사용자 인터페이스로 첫 번째 워크플로우를 빠르게 시작하고 실행할 수 있다. 그런 다음 소스 코드 에디터로 돌아와서 편집하거나 새로운 워크플로우를 만들어 다양한 사용 사례를 지원할 수 있다.
워크플로우 실행 결과를 ‘빌드’라고 부르는데, 엑스코드 클라우드는 코드 서명과 여러 운영 체제 버전 및 엑스코드 릴리스에 대한 액세스를 제공하는 애플 관리형 클라우드 인프라에서 빌드를 실행한다. 참고로 애플은 자체 클라우드가 아닌 AWS와 구글 클라우드 등 외부의 클라우드 서비스를 필요할 때마다 적절히 빌려 사용하고 있다.
만일 보고서 탐색기의 클라우드 탭에서 앱을 클릭하면 모든 워크플로우의 상태와 사이드바에서 최신 빌드를 볼 수 있다. 만일 하나의 앱을 클릭하면 워크플로우뿐만 아니라 Git 분기별로도 개발팀이 작업하는 방식에 따라 구성된 모든 빌드를 보여주는 빌드 그룹 개요가 열리므로 여러 분기에 대해 하나의 워크플로우를 사용하면서도 결과를 별도로 볼 수 있다.
또한, 빌드 그룹 개요 한 수준 아래에는 워크플로우의 단일 실행에 대한 빌드 보고서가 있다. 여기에서 코드 변경과 관련된 결과를 자세히 알아볼 수 있다. 따라서 테스트 보고서와 로그를 보고 문제를 일으킨 코드로 바로 이동할 수 있는 장점이 있다.

엑스코드 클라우드에서 전체 워크플로우 실행 프로세스를 설명하자면, 앱은 자동으로 생성된 기본 첫 번째 워크플로우로 시작한다. 먼저 로컬 프로젝트를 검사하여 엑스코드 클라우드는 이러한 초기 워크플로우 설정을 팀의 기존 구성과 일치하도록 조정할 수 있다.
워크플로우는 다음과 같은 메뉴로 구성된다.
- Start Connection
- Environment
- Actions/Notification
- Post Actions
엑스코드 클라우드가 Start Connection을 통해 메인 브랜치(분기)에 대한 모든 푸시, 개발자 환경에 대한 최신 릴리스의 iOS 및 맥 OS 운영체제 버전 모두에 대한 아카이브 작업을 선택한 것을 볼 수 있다. 엑스코드 클라우드가 내 소스 코드에 액세스하도록 승인하고 기본 리포지토리 및 모든 하위 모듈과 비공개 스위프트 패키지를 포함하여 개발자 프로젝트를 빌드하는 데 필요한 모든 소스 리포지토리를 다루는 일회성 작업을 실행한다.
또한, 개발자 프로젝트에서 두 개의 비공개 저장소를 검색하여 소스 코드가 호스팅 되는 깃허브에 명시적 권한을 부여한다. 액세스 권한 부여를 클릭하면 다음 단계에 대한 자세한 내용이 포함된 앱스토어 커넥트로 이동하는데, 이 프로세스는 소스 제공자에 따라 다르며 어떤 이유로든 액세스 권한을 언제든지 취소할 수 있다.
참고로 공개적으로 접근할 수 있는 저장소의 경우 추가 승인이 필요하지 않다. 엑스코드 클라우드에 대한 소스 코드 액세스 권한 부여는 웹에서 시작하여 완료되며, 엑스코드 클라우드에서 개인화된 경험을 활성화하는 데 사용되는 원본 계정에 Apple ID를 연결한다.
이 단계는 공급자의 기본 인증 흐름과 엑스코드 클라우드의 보안 암호화를 활용하므로 내 코드와 개인 정보가 계속 보호되고 있다. 깃허브에 엑스코드 클라우드 애플리케이션을 설치하여 개발자가 선택한 저장소에 액세스 할 수 있도록 한다. 이 단계가 완료되면 깃허브 계정이 모두 설정되고 이제 로컬에서 엑스코드에서 사용할 수 있게끔 완료된다. 또한 저장소가 준비되었으므로 엑스코드 클라우드는 개발자의 애플리케이션과 번들 ID를 앱스토어 커넥트에 등록하면 된다.
앱스토어 커넥트와 엑스코드 클라우드의 관계
엑스코드 클라우드의 워크플로우는 엑스코드에서 사용할 수 있을 뿐만 아니라 앱스토어 커넥트에서도 사용할 수 있다. 빌드 시작 및 보기, 워크플로우 관리, 아티팩트(artifact) 보기 및 다운로드, 팀과 결과 공유, 알림 설정 관리가 포함하고 있다. 그리고 이미 테스트 플라이트에서 작업하고 있다면 엑스코드 클라우드는 빠른 액세스를 위해 앱스토어 커넥트에서 개인 알림 설정을 지정할 수도 있다.
빌드 실패에 대한 슬랙 알림을 설정하면 코드를 푸시 한 후에도 계속 작업할 수 있다. 또한, 소스 코드에 수정할 사항이 있으면 개발자들이 빠르게 알림을 받을 수 있다. 참고로 팀의 모든 사람이 자신에게 가장 적합한 알림을 설정할 수 있다.

이동 중이거나 엑스코드에서 설정하지 않은 프로젝트 빌드에 대한 가시성을 원하거나, 프로젝트에 코드를 커밋하지 않는 팀 구성원인 경우, 앱 스토어의 앱스토어 커넥트는 모든 기능을 갖춘 웹 기반 경험을 제공한다. 엑스코드 클라우드에서 앱을 빌드할 때 개발자의 개발 프로세스 및 팀과의 협업을 위해 설계했지만, 개인 정보 보호를 핵심으로 고려한다.
소스 코드는 프로젝트의 핵심이므로 엑스코드 클라우드의 모든 측면은 데이터가 보호되도록 설계되었다. 그러므로 빌드 환경은 임시적이며 워크로드는 완전히 격리되어 있다. 빌드 환경은 소스 코드가 포함된 프로젝트들의 빌드 간에 처음부터 해체되고 생성된다.
다시 말해, 소스 코드는 저장되지 않으며 엑스코드 클라우드는 임시 빌드 환경 내에서만 코드를 가져온다. 빌드 데이터는 암호화되어 전용 클라우드킷(CloudKit) 데이터베이스에 저장되어 개인이 스스로 데이터를 통제할 수 있다. 따라서 개인의 통제권 아래에서 데이터는 언제든지 삭제할 수 있으며 시스템에서 완전히 제거된다.
엑스코드 클라우드에서 깃허브를 통한 깃옵스(GitOps)
깃옵스는 버전 관리, 협업, 규정 준수, 지속적 통합 및 배포 등 애플리케이션 개발에 사용되는 데브옵스 모범 사례를 가져와 인프라 자동화에 적용하는 운영 프레임워크이다. 오늘날 소프트웨어 개발 수명 주기는 자동화되었지만, 인프라는 전문 팀이 필요한 대부분 수동적 프로세스로 남아 있다.
최근 인프라에 대한 요구로 인해 인프라 자동화를 구현하는 것이 점점 더 중요해지고 있는데, 최신 인프라는 지속적 배포에 필요한 클라우드 리소스를 효과적으로 관리할 수 있도록 탄력적이어야 한다. 최신 애플리케이션은 속도와 규모를 염두에 두고 개발한다. 성숙한 데브옵스 문화를 가진 조직은 하루에 수백 번 프로덕션에 코드를 배포할 수 있다. 데브옵스 팀은 테스트 및 배포를 자동화하는 버전 제어, 코드 검토 및 통합·배포(CI/CD) 파이프라인과 같은 개발 모범 사례를 통해 이를 달성할 수 있다.

따라서 깃옵스는 인프라 프로비저닝 프로세스를 자동화하는 데 사용한다. 팀이 애플리케이션 소스 코드를 사용하는 것과 유사하게 깃옵스를 채택한 운영팀은 코드로 저장한 구성 파일을 사용한다. 애플리케이션 소스 코드가 빌드될 때마다 동일한 애플리케이션 바이너리를 생성하는 것처럼 깃옵스 환경 설정 파일은 배포될 때마다 동일한 인프라 환경을 생성하는 것이 관리에 편리하기 때문이다.
엑스코드 클라우드는 이러한 깃옵스의 표준적인 모범 사례를 이어받아 깃(Git)을 기반으로 하며 깃허브, 깃랩(GitLab) 또는 비트버킷(BitBucket)에 코드가 있어야 사용할 수 있다. 엑스코드13은 풀 리퀘스트를 사용한 협업을 수용하며 개발자가 풀 리퀘스트를 생성, 확인 및 주석 처리할 수 있을 뿐만 아니라 변경 사항을 코드베이스에 병합할 수 있다. 따라서 엑스코드 클라우드는 새로운 풀 리퀘스트를 감지하고 임시 분기를 만들고 빌드 환경을 설정하여 프로젝트를 빌드하고 테스트를 실행할 수 있다.
또한, 엑스코드 클라우드는 종속성을 관리할 수 있으며 지정된 시간에 특정 작업을 수행하기 위한 커스텀 빌드 스크립트를 지원한다. 엑스코드 클라우드는 전체 인프라를 설정할 필요 없이 iOS 앱용 지속적 통합·배포(CI/CD)를 사용하는 것과 같이 사용하기 쉬운 도구를 제공한다. 그러나 ‘코드형 인프라(Infrastructure as Code)’, 쉐프(Chef), 퍼펫(Puppet), 테라폼(Terraform)과 같은 타 업체의 데브옵스 플랫폼은 현재 엑스코드13에서 지원하지 않고 있다.
엑스코드 클라우드는 소스 제어를 위해 깃을 사용하는 지속적 통합 시스템이며 코드베이스의 품질과 안정성을 보장하는 통합 시스템을 제공한다. 따라서 앱을 효율적으로 게시하는 데 도움이 된다. 이번에 새롭게 업그레이드된 엑스코드13은 다양한 소스 형상 관리 시스템으로 향상된 깃 통합, 깃허브, 비트버킷 및 깃랩 협업 기능 지원과 소스 코드 호스팅 플랫폼에서 제공하는 고급 협업 기능을 원활하게 통합했다.
특히, 통합 개발 환경 내에서 쉽게 풀 리퀘스트을 생성하고 변경 사항 검토를 요청할 수 있다. 소스 코드 검토자가 제공한 모든 주석은 검토자의 이름 및 아바타와 함께 편집기 내부의 코드와 함께 인라인으로 표시되며 엑스코드를 벗어나지 않고 통합 개발 환경 안에서 댓글에 답글을 달 수도 있다. 또한 엑스코드13은 깃 리포지토리 작업 및 두 가지 버전의 파일 비교, 프로젝트의 모든 변경 사항들을 리스트 형태로 나열하고, 탐색과 같은 일반적인 작업 수행과 모든 분기와 커밋(Commit)을 쉽게 검사할 수 있다.
테스트 플라이트와 엑스코드 클라우드를 결합한 테스트옵스
엑스코드 클라우드를 사용하면 여러 iOS 시뮬레이터에서 자동으로 쉽게 빌드하고 테스트할 수 있다. 오류가 발생하면 개발자가 즉시 수정할 수 있도록 엑스코드 클라우드에서 알림을 보낸다. 선택적으로 빌드가 성공하면 테스트 플라이트를 통해 팀 구성원에게 자동으로 배포하거나 앱스토어에 게시하기 전에 검토를 위해 제출할 수 있다.
코드가 변경되면 지속적 배포가 자동으로 트리거할 수 있으며 애플은 테스트플라이트 충돌 보고서와의 통합을 개선하고 인증서 관리를 단순화하기 위해 새로운 클라우드 서명 서비스를 도입했다. 이번 새 클라우드 서명은 기존의 클라이언트 서명과 달리 클라이언트의 해시값을 클라우드에 보내고 클라우드에서 다시 인증서를 내려받는 새로운 방식으로 바뀌었다.
참고로 테스트옵스(TestOps)는 소프트웨어 제공 수명 주기 내에서 테스트의 운영 측면을 관리하는 분야를 나타낸다. 소프트웨어 테스팅은 기능 테스팅과 비기능 테스팅을 모두 포함하는 방향으로 진화하고 있다. 특히, 애자일 개발 프로세스에서의 소프트웨어 테스트는 소프트웨어 개발자, 품질 엔지니어, 수동 테스터, 제품 소유자 등이 품질 프로세스에 참여하는 지속적인 테스트 프로세스로 점점 더 많이 변하고 있는 추세다.

더 많은 사람이 테스트 프로세스에 참여하고 테스트 프로젝트가 성장함에 따라 소프트웨어 품질 프로세스, 인력, 시스템 및 테스트를 관리하기 위한 규율을 만들어야 할 필요성도 커졌다. 애플은 이번 엑스코드 클라우드와 테스트 플라이트를 통해 테스트옵스 표준 절차를 iOS 또는 맥 OS 앱들을 테스트하는 데 끌어들여 쉽게 사용할 수 있도록 지원한다.
엑스코드 클라우드의 의미
이번 엑스코드 클라우드는 애플이 그동안 패스트레인(Fastlane)과 같은 타 업체의 지속적 통합과 배포를 사용하던 경험을 본격적으로 애플이 직접 엑스코드와 통합함으로써 다양한 도구 체인을 앱의 클라이언트와 클라우드 인프라 및 서비스로 사용하는 첫 사례이다.
그러므로 수동적인 개발 인프라 관리를 이제 자동화된 테스트 및 배포를 통해 지속적으로 개발자들에게 편리하게 사용할 수 있도록 제공한다. 이로써 데브옵스의 철학과 문화는 스위프트 언어를 사용하는 모바일 앱 개발자들에게도 계승된다.
[divide style=”2″]
[box type=”note”]
이 글의 필자는 인공지능 산업전문가인 서진호 하이테크 칼럼니스트입니다. 본 글은 한국정보화진흥원의 지원을 받아 작성되었으며, 클라우드스토어 씨앗 이슈리포트에 동시 게재합니다.
[/box]