안녕하세요 GitHub 한국 총판 단군소프트입니다. 여러분은 엔지니어, 개발자, 디자이너들이 협력해서 개발할 때 가장 중요한 것이 무엇이라고 생각하시나요? 그것은 바로 ‘시간’과 ‘비용’을 절약하는 것입니다. 하지만 개발을 위해 협력할 엔지니어, 개발자, 디자이너들이 적절한 포지션에서 작업을 진행하고 있지 않다면 불필요한 시간과 비용이 많이 사용되는데요. 이런 필요 없는 시간과 비용을 절약하기 위해서는 ‘시스템의 자동화’가 가장 중요합니다.
시스템의 자동화하면 요즘 가장 인기 있는 DevOps가 떠오르진 않으시나요?
그렇다면 DevOps에서 자동화는 어떤 역할을 할까요? 자동화는 DevOps의 핵심 원칙 중 하나입니다. 자동화는 각각의 팀들이 문제점들을 발견하고 해결하기 쉽도록 조직내 지속성, 안정성 및 효율성을 높입니다. 저희가 많은 기업들과 작업을 진행하면서 어디서부터 시작해야 하는지 또는 어떤 프로세스를 자동화할 수 있는지, 그리고 자동화해야 하는 것이 무엇일지 처음부터 아는 사람은 많지 않았었습니다. 그래서 오늘은 DevOps가 적용된 몇 가지 모범 사례와 지침을 알아보겠습니다. 자세한 내용은 아래에서 확인하세요!
DevOps 자동화의 경로는 지속적으로 진화하고 있습니다. 최적의 DevOps 자동화의 사례를 살펴보기 전에 자동화 대상과 방법을 결정할 때 염두에 두어야 할 3 계명을 알려드리겠습니다.
1. 개방형 표준을 선택하세요. 기여자와 팀은 변경될 수 있지만 프로세스와 툴은 변경되면 안 됩니다. 패키징, 런타임, 시스템 구성, 심지어는 네트워킹과 스토리지까지 여러 항목의 커뮤니티 기반 표준을 만들어 온보딩을 단순화하고 전문 교육에 소요되는 시간을 절약하세요.
2. 동적 변수(dynamic variables)를 사용하세요. 재사용 가능한 코드의 우선순위를 지정해 놓으면 재작업 및 중복되는 양을 줄일 수 있습니다. 스크립트 전문 툴이든 간에, 외부에서 정의된 변수를 안전하게 사용하는 것은 코드 자체를 변경할 필요 없이 다양한 환경에서 쉽게 자동화를 할 수 있는 방법입니다.
3. 모든 상황에 유연한 도구를 사용하세요. 모든 상황에 맞는 도구를 항상 찾는 것은 힘든 일입니다. 그래서 기술을 변경할 수 있는 DevOps 툴을 사용하면 회사가 정책을 바꿀 때 필요한 재작업을 줄일 수 있습니다. 모든 클라우드에서 작동하면서 파트너로부터의 통합지원이 가능한 넓은 생태계가 형성된 솔루션을 선택하면 도구 변화의 제한 없이 목표를 달성할 수 있습니다.
1. CI/CD
많은 분이 "DevOps"라는 용어를 "CI/CD"와 동의어라고 생각합니다. 하지만 DevOps는 기여자가 코드를 빌드 및 실행 (또는 구성 배포) 할 수 있게 하는 것부터 개발자의 생산성 향상에 이르기까지 훨씬 더 많은 것을 포함하고 있는 용어입니다. CI/CD는 DevOps의 동의어가 아니라 핵심 구성 요소라고 할 수 있습니다.
•지속적인 통합 (CI, Continuous integration) : 모든 변경 사항에 대한 테스트를 구현하여 사용자가 자신의 변경 사항이 환경에 어떤 영향을 미치는지 확인할 수 있도록 하는 프로세스입니다.
•지속적인 전달(CD, Continuous delivery) : 성공적인 릴리스 후보를 언제든지 프로덕션에 배포할 수 있는 방식으로 소프트웨어를 구축하는 방법입니다.
•지속적인 배포(CD, Continuous deployment) : 지속적 전달(CD, Continuous delivery)을 한 단계 더 발전시킨 것입니다. 지속적 배포(CD, Continuous deployment)를 통하면,모든 성공적인 변경 사항이 자동으로 프로덕션에 배포됩니다. 산업 및 기술에 따라 고객에게 새로운 변경 사항을 출시하지 못할 수도 있기 때문에 지속적인 배포(CD, Continuous deployment)를 도입하는 방법은 조직과 제품에 따라 다릅니다.
CI/CD는 함께 프로젝트를 진행하는 사람들이 협업할 수 있는 프로세스를 만듭니다. 동시에 팀들은 자동화를 통해 품질 관리를 유지하고 지속적인 배포(CD, Continuous deployment)를 통해 사용자에게 새로운 기능을 제공할 수 있습니다.
2. 변경 관리
변경 관리는 자주 비즈니스 프로세스에 중요한 부분을 차지합니다. 자동화 3계명과 마찬가지로 개발 및 운영의 일관성을 만드는 데 사용할 수 있는 몇 가지 공통 원칙과 툴이 있습니다.
•버전 관리 : 버전 관리는 변경 사항을 되돌리고 과거에 왜 이러한 결정을 했는지 알기 위해 매우 오래전부터 사용했습니다. RCS에서 SVN, CVS에서 Perforce, ClearCase에서 Git까지 버전 제어는 함께 작업할 수 있는 공유 워크 플로우 및 코드 기반을 제공하여 협업할 수 있도록 하는 필수 요소입니다.
•변경 제어 : 코드의 버전 기록을 유지하는 것과 함께 변경을 용이하게 조정하는 시스템을 갖추면 제품 방향을 유지하고 코드에 대한 유해한 변경 가능성을 줄여 협업 프로세스를 장려하는 데 도움이 됩니다.
•구성 관리 : 구성 관리를 통하여 모든 사람이 템플릿을 통해 복잡한 배포를 쉽게 관리하고 적절한 제어 및 승인을 통해 대규모 변경 사항을 관리할 수 있습니다.
3. ’~의 코드화’(‘~as code’)
laC(infrastructure as code), CAC(configuration as code), policy as code, 이외의 “as code” 모델에 대해 들어 보셨나요? 이러한 모델은 높은 수준의 추상화(abstraction)를 통해 운영 환경의 다양한 측면을 관리하기 위한 선언적 프레임 워크를 제공합니다. DevOps는 이 “as code” 모델을 신뢰할 수 있는 리소스 배포 방법, 신규 사용자에 대한 학습 곡선을 낮추는 방법 등 다양한 목적으로 사용합니다. 이러한 “as code”의 몇 가지 예시를 살펴보겠습니다.
•IaC (Infrastructure as Code) : 개발자가 소스 코드에 사용하는 것과 동일한 버전 관리 및 워크플로우를 사용합니다. 그리고 변경 불가능한 인프라를 만들기 위한 선언적 모델을 제공합니다. 인프라 요구 사항이 변경되면 자동화된 선언적 파이프라인을 통해 새로운 구성으로 인프라가 정의, 테스트 및 배포됩니다.
•PaC (Platform as code) : 코드 형 인프라가 동일한 인프라를 재생성하기 위한 프레임 워크를 제공하는 방식과 유사한 서비스에 대한 선언적 모델을 제공합니다.높은 수준의 추상화를 통해 기존 인프라에 서비스를 빠르게 배포할 수 있습니다.
•CAC (Configuration as Code) : 애플리케이션의 구성을 버전이 지정된 리소스로 정의하여 다음 수준의 선언적 파이프라인을 제공합니다.
•Policy as code : 보안 및 정책 관리를 위해 버전 관리 및 DevOps 워크 플로우를 제공합니다.
지속적인 모니터링
소프트웨어 수명 주기 동안 애플리케이션과 인프라의 성능의 안정성을 지속적으로 모니터링하는 것은 운영팀에게 문제 해결에 도움이 되는 데이터를 제공하고 개발팀에게는 디버그 및 패치에 필요한 정보를 제공합니다. 이렇게 소프트웨어에 대한 다양한 정보를 얻게 되면 개발 환경에서 매우 중요한 운영 통찰력도 얻을 수 있습니다. 모니터링에 사용되는 도구는 매우 다양한데요. 하지만 어떤 모니터링 도구를 선택하는지에 따라 약간의 서비스 방해인가 아니면 주요 서비스 정지인가의 차이를 낼 수 있습니다. 그럼 모니터링에 고려되어야 하는 몇 가지 주요 항목에 대해 살펴보겠습니다.
•로깅(Logging) : 비즈니스의 핵심 구성 요소에 대한 지속적인 데이터 스트림을 제공합니다. 애플리케이션 로그, 인프라 로그 및 감사 로그 모두 팀이 제품을 배우고 개선하는 데 도움이 되는 중요한 데이터를 제공합니다.
•모니터링(Monitoring) : 로그 및 측정 항목에 제공된 원시 데이터에 대한 지능 및 해석 수준을 제공합니다. 고급 도구를 사용하면 모니터링을 통해 원시 데이터가 제공하는 것 이상의 상호 관련된 통찰력을 팀에 제공할 수 있습니다.
•알림(Alerting) : 각 팀에 사전 알림을 제공하여 주요 문제를 미리 파악할 수 있도록 도와줍니다. 효과적으로 구현되면 문제가 발생했을 때 알려줄 뿐만 아니라 문제를 신속하게 해결하는 데 도움이 되는 중요한 디버깅 정보를 팀에 제공할 수도 있습니다.
•추적(Tracing) : 로깅을 한 단계 더 발전시켜 개발 환경에서 애플리케이션의 안정성과 확장성에 큰 영향을 미칠 수 있는 더 깊은 수준의 애플리케이션 성능과 동작 통찰력을 제공합니다.
위에서 DevOps와 자동화에 대한 많은 이야기를 나누었습니다. 그렇다면 DevOps는 모두 자동화에 관한 것일까요? 아닙니다! 자동화는 팀 간에 작업을 효율적으로 수행하기 위한 중요한 수단일 뿐입니다.
DevOps를 사용할 때는 새로운 도구를 사용해보는 것도 좋은데요. 소규모 프로젝트나 새로운 프로젝트에서 새로운 도구를 사용해보는 것은 실험하는 조직 전체규모의 자동화를 확장하고 표준화하기 위한 최초 기반을 마련할 수 있게 합니다. 그리고 현재 팀의 워크플로우와 작업에 필요한 정보를 스스로 평가해보면, 성공을 위한 단계의 설정과 이를 위한 툴, 플랫폼을 선택하는 데 도움을 줄 것입니다. 이에 도움이 되는 몇 가지 내용을 추가했으니 아래에서 살펴보세요.
· DevOps 도구의 주기율표 · DevOps 도구 용어집 · 최고의 DevOps 도구 목록
여기까지 DevOps가 적용된 몇 가지 모범 사례와 몇 가지 지침에 관한 소개였습니다. 긴 글 읽어주셔서 감사합니다.
이 글은 GitHub의 Getting started with DevOps automation를 번역한 글입니다.
|