안녕하십니까! 명절은 잘 보내셨나요? 2022년 새해를 맞아 인포그랩에 관심을 가지고 찾아와주신 독자님들께, 이번 포스팅에서는 GitLab의 모티브가 되는 프레임워크인 GitOps에 대한 설명과 GitOps를 지원하는 여러 가지 애플리케이션 중 GitLab이 가지는 특색을 설명해 드리고자 합니다.

GitOps는 DevOps 모범 사례를 가져와 인프라 자동화에 적용하는 운영 프레임워크입니다. 팀에서 GitOps 워크플로를 사용하면 SDLC에 전반적으로 이득이 됩니다.

GitOps는 인프라 구축 및 애플리케이션 배포에 들어가는 모든 코드에 대한 단일 저장소로 Git 리포지토리를 사용하는 것을 말합니다. Git과 같은 버전 제어 시스템을 단일 소스로 사용하여 엔지니어는 지속적 전달 형식으로 애플리케이션의 기본 소스 코드를 업데이트할 수 있습니다.

버전 제어 시스템은 문서화 및 가시성을 보장하고 audit trail은 컴플라이언스를 가능하게 합니다. GitOps를 사용하면 변경 사항을 쉽게 되돌릴 수 있으며 팀이 소프트웨어 개발 및 운영 팀의 관점에서 현재 상태를 이해할 수 있도록 최신 정보에 액세스할 수 있는 작업 공간을 제공합니다.

photo | 인포그랩 GitLab | 인포그랩 GitLab

The benefits of GitOps workflow

Git 버전 제어 시스템으로 보안 및 컴플라이언스 향상

인프라 관리를 위해 단일 플랫폼을 사용하기 때문에 단순화된 툴 체인은 공격 surface를 줄입니다. 공격이 발생하면 팀은 버전 제어 시스템을 사용하여 원하는 상태로 되돌릴 수 있습니다. 결과적으로 GitOps는 다운타임과 가동 중단을 줄이는 동시에 팀이 성능 저하 없이 개발을 계속할 수 있도록 합니다.

엄격한 컴플라이언스를 따라야 하는 팀은 종종 정책이 프로덕션 환경에 변경 사항을 제안할 수 있는 사람의 수를 제한하는 엄격하게 규제되는 상황에서 협업이 저하되는 것을 느낄 수 있습니다. 그러나 GipOps를 사용하면 누구나 merge request 를 통해 변경 사항을 제안할 수 있습니다 . 이는 production브랜치에 병합할 수 있는 사람의 수를 지정 하면서 협업 범위를 넓힙니다 .

GipOps 워크플로를 채택하면 CI/CD 툴을 사용하여 변경 사항이 자동화 되어 모든 인프라 구성 요소에 액세스 자격 증명을 제공할 필요가 없기 때문에 액세스 제어가 향상됩니다. GitOps는 모든 사람이 기여할 수 있도록 권한을 부여하지만 모든 변경 사항에 대한 실행 기록을 유지 관리해야 할 필요성이 더 커집니다. GitOps는 main 브랜치의 모든 커밋 이 audit을 위한 변경 로그 역할을 하도록 합니다.

확립된 모범 사례로 협업 및 생산성 향상

GitOps는 IaC, Git 워크플로 및 CI/CD 파이프라인에 대한 소프트웨어 개발 모범 사례를 통합합니다. 운영 팀은 이미 이러한 기존 스킬, 지식 및 툴 체인 요구 사항을 가지고 있으므로 GitOps를 채택하기로 결정한다 하더라도 학습 시간이 오래걸리지 않습니다. GitOps 워크플로는 프로세스를 단순화하여 가시성을 높이고 SSoT(Single Source of Truth)를 생성하며 린(lean) 툴 세트를 유지합니다.

팀이 Git 버전 제어 시스템을 사용하고 모든 인프라 변경에 대한 메커니즘으로 요청을 병합하기 때문에 GitOps 워크플로는 가시성을 제공하고 협업을 향상시킵니다. 모든 업데이트는 동일한 검토 및 승인 프로세스를 거치며 팀은 아이디어를 공유하고 코드를 검토하고 피드백을 제공하여 협업할 수 있습니다.

자동화는 개발자 경험을 개선하고 비용을 절감합니다.

CI/CD 툴 및 지속적인 배포를 통한 자동화에 의해 지루하고 수동적인 작업을 할 필요가 없어지게 되면서 개발에 집중할 수 있으므로 생산성이 향상됩니다. GitOps 워크플로는 팀 구성원이 Git에 업데이트를 push하기 전에 원하는 언어와 툴을 사용할 수 있으므로 개발자 경험을 개선합니다. 진입 장벽이 낮기 때문에 신입 사원부터 정규직 팀원에 이르기까지 누구나 빠르고 쉽게 생산성을 높일 수 있습니다. 인프라 자동화는 생산성을 향상하고 가동 중지 시간을 줄이는 동시에 클라우드 리소스의 더 나은 관리를 제공하여 비용을 절감할 수 있습니다. 인프라 정의 및 테스트를 자동화하면 수동 작업과 반복작업이 없어지는 동시에 내장 시스템 되돌리기 및 롤백 기능으로 인한 가동 중지 시간을 줄입니다.

지속적인 통합으로 더 빠른 개발 및 배포

GitOps를 사용하면 더 빠르고 자주 배포할 수 있으므로  실행 가능한 최소 변경 사항을 더 쉽게 push 할 수 있습니다. GitOps 모범 사례를 사용하여 하루에 여러 번 서비스를 제공하고 문제가 있는 경우 변경 사항을 되돌릴 수 있습니다. 배포 속도가 빠르면 릴리스가 빨라지기 때문에 비즈니스 및 고객 가치를 제공하는 데 도움이 됩니다. 지속적인 통합을 통해 팀은 더욱 민첩해지고 고객 요구 사항에 신속하게 대응할 수 있습니다.

Git 워크플로는 안정성을 높입니다.

인프라가 코드화되고 반복 구현이 가능함으로써 수작업으로 인한 오류가 줄어듭니다. merge request는 코드 검토 및 공동 작업을 용이하게 하고 프로덕션에 적용하기 전에 오류를 식별하고 수정하는 데 도움이 됩니다. 인프라에 대한 모든 변경 사항이 merge request를 통해 추적 되고 반복 구현이 제대로 동작하지 않는 경우 변경 사항을 이전 상태로 롤백할 수 있기 때문에 위험도 적습니다. Git 워크플로는 보다 안정적인 상태로 롤백 하고 심각한 중단이 발생할 경우 분산 백업 복사본을 제공하여 복구 시간을 줄입니다.GitOps는 팀이 불안정한 환경을 초래하지 않고 새로운 기능을 더 빠르게 반복적으로 제공할 수 있도록 지원합니다.

GitLab for GitOps

GitOps는 코드에 관한 것이 아니라 협업에 관한 것이며 GitLab을 사용하면 모든 팀이 단일 플랫폼에서 작업할 수 있습니다.

GitOps 워크플로에 GitLab을 사용하면 모든 팀원이 동일한 시스템에서 작업하고 프로젝트 상태를 이해할 수 있습니다. 인프라에서든 애플리케이션 개발에서든 모든 변경 사항은 작업 내용을 정의하고, 개인에게 할당하고, 팀원과 협업하고, 해당 코드를 배포하고 Git 리포지토리를 단일 소스로 사용하는 동일한 프로세스를 따릅니다.

GitLab은 전체 DevOps 수명 주기에 대한 단일 애플리케이션이며 이해 관계자가 코드 생산 프로세스에 대해 평가할 수 있는 권한을 부여하는 협업 플랫폼 역할을 합니다. 협업은 GitOps 프로세스의 중요한 부분입니다. 인프라 및 개발 팀에서 보안 및 비즈니스 이해 관계자에 이르기까지 전체 SDLC에 걸쳐 팀이 코드를 빠르고 효율적으로 제공하기 위해 원활한 협업 방법을 필요로 하기 때문입니다.

GitOps를 위한 GitLab을 선택해야 하는 이유

  • 디자인, 개발, 테스트, 보안, 운영 전반에 걸쳐 사일로(Silo)를 깨고 협업을 지원합니다.
  • 이슈 및 보드를 사용하여 우선순위 관리할 수 있습니다.
  • 코드 검토 간소화 및 코드 품질 테스트 자동화를 제공합니다.
  • GitLab은 단일 애플리케이션에서 버전 제어, 코드 검토 및 CI/CD를 제공합니다.
  • CI/CD 파이프라인의 일부로 단위 테스트, 보안 테스트 및 라이선스 컴플라이언스 자동화를 제공합니다.
  • 멀티 클라우드 기능과 함께 HashiCorp TerraformVault 와의 긴밀하게 통합하여 인프라 자동화를 위한 최고의 플랫폼을 제공 합니다.
  • 생산에 들어가는 항목을 규제하기 위해 릴리스 제어를 구현합니다.
  • 구성된 환경 모니터링을 제공합니다.

GitLab의 장점

  • SCM 및 CI/CD 를 위한 단일 앱 : 소스 코드 관리 및 CI/CD는 GitOps의 핵심입니다. 원활한 경험을 제공하는 단일 앱으로 생산성을 유지할 수 있습니다.
  • Terraform과의 긴밀한 통합 : Terraform은 환경 프로비저닝을 위한 업계 표준으로 부상했습니다. GitLab은 HashiCorp와 협력하여 연동으로 인한 툴이 최적화되어 작동하도록 합니다.
  • 세계 최대의 엔지니어링 팀의 신뢰 : Goldman Sachs 및 Verizon에서 Ticketmaster 및 Siemens에 이르기까지 세계 최대의 엔지니어링 팀이 누구보다 자신의 코드로 GitLab을 신뢰합니다.

GitLab이 GitOps를 활성화하는 방법

  • 코드로써의 환경 : SSoT(Single Source of Truth)로써의 GitLab 버전 제어에 저장합니다.
  • 팀 협업 : GitLab의 민첩한 계획 및 코드 검토를 사용하여 협업합니다.
  • 동일한 툴 : 계획, 버전 지정 및 배포하는 데 사용 된 애플리케이션 코드가 작업 코드에서도 작동합니다.
  • 인프라 자동화를 위한 CI/CD : 버전 제어에서 SSoT(Single Source of Truth)와 환경을 조정합니다.

기능

  • Git 기반 버전 제어 : 이미 가지고 있는 Git 툴을 작업을 위한 인터페이스로 사용합니다. IaC(Infrastructure as Code)의 버전을 지정하고 정책을 구성하여 재현 가능한 환경을 만드실 수 있습니다. 인시던트 중에 MTTR(평균 해결 시간)을 낮추기 위해 마지막 작업 상태로 롤백합니다.
  • 코드 검토 : 스레드를 추적 및 해결하고, 인라인 제안을 적용하고, 인라인 및 일반 스레드 주석과 비동기식으로 작업하는 merge request를 사용하여 코드 품질을 개선하고 모범 사례를 배포하고 오류를 포착한 후 실행됩니다.
  • protected 브랜치 : protected 브랜치를 설정 함으로써 특정 사용자에 대한 고유 권한으로 프로덕션에 배포할 수 있는 사람을 제한하면서 모든 사람이 공유된 코드 리포지토리에 기여할 수 있습니다.
  • CI/CD : CI/CD분야의 리더로 거듭 평가받고 있는 GitLab은 원활한 경험을 위해 애자일 계획 및 소스 코드 관리와 동일한 애플리케이션에 처음부터 구축된 강력하고 확장 가능한 CI/CD를 제공합니다.
  • Terraform 통합 : GitLab은 Terraform 파일을 저장하고 merge request에서 바로 Terraform의 계획되는 구축 리소스를 출력 합니다.
  • 어디에서나 배포 : 컨테이너 및 VM에서 베어메탈 GitLab에 이르기까지 모든 곳에 구축됩니다. AWS, Azure, Google Cloud 등으로 멀티클라우드를 즐기실 수 있습니다.

맺음말

이번 시간에는 GitLab이라는 애플리케이션이 탄생하게 된 근원이 되는 워크플로 모델인 GitOps와 GitLab이 GitOps를 지원하는 방식에 대해서 알아보았습니다. 이번 글을 포스팅하면서 GitLab의 탄생 배경과 지향하는 목표를 되새김하면서 더욱더 애착 감이 느껴지는 시간이었던 것 같습니다.

IT 워크플로의 새로운 트렌드인 GitOps, 그리고 Cloud Native 도입 계획을 세우신 분들이라면 저는 적극적으로 GitLab을 추천해 드리고 싶습니다.

이번 글을 통하여 GitLab이 국내 IT에 관심을 두고 있으시거나 종사하시는 모든 분께 더 가깝게 다가가는 시간이 되었길 바랍니다. 앞으로도 DevOps 및 GitOps를 위해 더욱더 노력하는 InfoGrab이 되겠습니다. 감사합니다.

참고

https://about.gitlab.com/topics/gitops/gitops-best-practices/ https://about.gitlab.com/topics/gitops/gitops-gitlab-collaboration/ https://about.gitlab.com/solutions/gitops/