Amazon Web Services 한국 블로그

[AWS Hero 특집] 서버리스 시대에 GitOps를 통한 모던 CI/CD 파이프라인 구축

Datree.io의 CTO 겸 창립자인 AWS 커뮤니티 히어로 Shimon Tolts 의  기고글입니다. Shimon Tolts는 100% 서버리스 회사를 실행하는 데 필요한 개발자 도구 및 인프라를 전문적으로 다루고 있습니다.

최근 수 년 동안 소프트웨어를 제작하고 전송하는 방식에 있어 중요한 변화가 있었습니다. 이러한 변화는 주로 마이크로서비스, 즉 코드를 작은 구성 요소로 분할하고, 인프라를 코드 형태로 사용하고, Git를 통해 모든 요소를 신뢰 가능한 단일 소스로 결합하는 방식을 통해 구현되었습니다.

이 게시물에서는 이러한 변화에 대해 설명하고 모던 소프트웨어 개발의 다양한 단계를 소개함으로써 서버리스 세상에서 사용 가능한 솔루션을 보여 드립니다. 또한, 서버리스 시대를 위해 설계된 유용한 도구들을 소개하겠습니다.

서버리스란 무엇입니까?

서버리스 개발 및 도구의 놀라운 세계로 들어가기 전에 서버리스가 무엇을 의미하는지 설명해 드리겠습니다. AWS 웹 사이트에서는 네 가지 주요 이점을 언급하고 있습니다.

  • 서버 관리 불필요
  • 유연한 크기 조정
  • 가치 기반 비용 지불
  • 자동화된 고가용성

제 관점에서 서버리스란 직접 관리하고 크기를 조정할 필요가 없는 모든 인프라를 의미합니다.
저희 회사인 Datree.io에서는 워크로드 중 95%를 AWS Fargate에서 실행하고 5%를 AWS Lambda에서 실행합니다. 당사는 서버리스 기업입니다. AWS 계정에는 Amazon EC2 인스턴스가 전혀 없습니다. 자세한 내용은 다음을 참조하십시오.

GitOps란 무엇입니까?

Git는 소형 프로젝트에서 초대형 프로젝트에 이르는 모든 프로젝트를 빠르고 효율적으로 처리하도록 설계된 오픈 소스 배포 형태의 버전 제어 시스템입니다.
GitOps의 CI/CD 컨설턴트인 Luis Faceira에 따르면 GitOps는 작업을 수행하는 한 방식입니다. 여러분은 GitOps를 모든 것이 Git에서 시작하여 Git에서 끝나는 접근 방식으로 볼 수 있습니다. 다음을 일부 주요 개념입니다.

  • Git는 시스템에 대한 신뢰 가능한 단일 소스입니다.
  • Git는 모든 환경이 운영(생성, 변경 및 파괴)되는 단일 위치입니다.
  • 모든 변경 사항은 관찰 및 검증 가능합니다.

클라우드 이전의 소프트웨어 구축 방식

클라우드 이전 시대에는 개발, 테스트, 보안, 운영, 모니터링 등을 위해 별도의 팀을 운영했습니다.

오늘날, 대부분의 조직에서는 전체 개발자 자율 환경 및 개발자가 전체 프로덕션 경로를 소유하는 방식으로의 이전이 이루어지고 있습니다. 이제는 개발자가 왕(또는 여왕)인 것입니다 :)

과거의 팀(운영/보안/IT 등)은 개발자가 변경하는 모든 내용을 검증 및 제어하는 문지기 역할을 수행했습니다. 이제는 이러한 팀이 정책을 적용하고 모범 사례 및 표준을 설정하는 일종의 위성 부서가 되었습니다. 이 팀들은 더 이상 프로덕션 과정의 병목이 되지 않으므로 전사적 플랫폼과 권한 부여 솔루션을 제공합니다.

모든 요소의 코드화

전체 파이프라인을 개발자가 완전히 소유하는 방식으로 전환되면서 개발자는 모든 요소를 자동화했습니다. 이제는 그 어느 때보다 코드가 많아졌으며 수작업으로 수행되던 프로세스도 이제는 코드 형태로 설명됩니다.

제 생각에 이러한 전환은 좋은 현상입니다. 이러한 전환에 따르는 일부 이점은 다음과 같습니다.

  • 자동화: 모든 요소를 코드 형태로 저장하면 모든 요소를 자동화하고, 재사용하고, 즉시 재생성할 수 있습니다.
  • 변경 불가: 문제가 발생하면 저장된 구성에서 다시 생성할 수 있습니다.
  • 버전 관리: 변경 내용을 적용하거나 되돌릴 수 있으며 변경을 수행한 단일 사용자를 추적할 수 있습니다.

GitOps: Git는 신뢰 가능한 단일 소스가 되었습니다.

두 번째 주요 변화는 이제 모든 요소가 한 장소에 있다는 것입니다! Git는 모든 코드가 저장되고 모든 작업이 시작되는 장소입니다. 테스트, 제작, 패키징 또는 출시 등 오늘날에는 모든 과정이 풀 요청을 통해 트리거됩니다.

이러한 추세는 모든 요소의 코드화에 의해 증폭됩니다.

GitOps Graphic

서버리스 시대의 유용한 도구

시장에는 유용한 도구가 많이 출시되어 있습니다. 다음은 그 중 서버리스용으로 설계된 도구의 목록입니다.

로고

코드

코드는 항상 소스 제어 시스템에 저장해야 합니다. 최근 수 년 동안, BI, 운영, 보안 및 AI와 같이 더욱 많은 함수가 코드화되고 있습니다. 새 개발자에게는 일부 기능에 대해 소스 제어를 사용해야 됨이 명백하지 않은 경우도 있습니다.

빌드 및 테스트

제가 목격하는 가장 일반적인 실수는 빌드 작업을 GUI에서 수동으로 구성하는 것입니다. 이 방식은 작은 POC의 경우 좋을 수 있으나 크기 조정이 되지 않습니다. 작업은 코드화하고 Git 리포지토리 내에 유지해야 합니다. 다음은 빌드 및 테스트에 도움이 되는 일부 도구입니다.

보안 및 거버넌스

서버리스 방식으로 작업할 때에는 많은 Git 리포지토리를 사용하게 됩니다. 코드 패키지의 수도 부담이 될 수 있습니다. 통합 코드 표준에 대한 수요는 이전과 같지만, 이제는 R&D 조직 위에 이러한 표준을 강제로 적용하는 것이 매우 어려워졌습니다. 다음은 이러한 도전 과제의 해결에 도움이 되는 일부 도구입니다.

번들 및 릴리스

서버리스 애플리케이션을 구축하는 것은 여러 마이크로서비스를 하나의 단위로 연결하는 것입니다. 예를 들어, Amazon API Gateway, AWS LambdaAmazon DynamoDB를 사용하는 중일 수 있습니다. 각 서비스를 개별적으로 구성하는 대신 번들기를 사용하여 구성을 한 위치에 유지해야 합니다. 이렇게 하면 여러 환경에 대해 앱을 쉽게 복제하고 버전 관리할 수 있습니다. 다음은 일부 번들기의 예입니다.

패키지

수많은 서버리스 구성 요소와 작업할 때에는 서로 다른 Lambda 함수에 걸쳐 가져오기를 수행할 수 있는 작은 도구 패키지를 생성해야 합니다. npm 또는 RubyGems와 같은 언어 특정 스토어를 사용하거나, 보다 포괄적인 솔루션을 사용할 수 있습니다. 다음은 여러 프로그래밍 언어를 위한 호스팅을 허용하는 일부 패키지 아티팩트 스토어입니다.

모니터링

서버리스 애플리케이션으로 작업할 때에는 모든 요소가 작은 조각으로 분할되므로 이 부분이 조금 까다로울 수 있습니다. 따라서 이러한 작업 모드를 지원하는 모니터링 도구를 사용하는 것이 중요합니다. 다음은 서버리스를 지원하는 일부 도구입니다.

요약

서버리스 시대는 전체 파이프라인의 코드화 및 신뢰 가능한 단일 소스로 Git를 사용하는 등 많은 변화를 가져옵니다. 그렇다고 해서 보안, 로깅 등 과거에 있었던 문제가 사라지는 것은 아닙니다. 따라서 이러한 문제를 계속 해결하고 비즈니스에 집중할 수 있도록 지원하는 도구를 활용해야 합니다.

– Shimon Tolts;