만약 당신이 부모라면 (아닌 경우에도, 여기서 판단하지 마세요) 당신은 아마도 레고 무비를 본 적이 있을 것입니다. 한 번 이상.
저는 DevOps 도입을 고려하는 모든 기업에서 이를 주시해야 한다고 생각합니다.
진지하게.
그 이유는 (많은) 교훈 중 하나는 특정 분야의 전문가인 마스터 빌더조차도 애플리케이션을 원하는 배포 상태로 옮기기 위해서는 다른 사람과 협업해야 한다는 것입니다. 즉, 수동 프로세스라는 무서운 기술적 크래글(Kragle)로 인해 생산에 갇히지 않는 것입니다.
개별적으로 건축업자는 자신이 짓고 싶은 것뿐만 아니라, 그것을 짓는 데 필요한 모든 복합재 부품도 구체적으로 상상할 수 있습니다. 그리고 그들은 영화에서 종종, 그리고 훌륭하게 그렇게 합니다. 날 수 있고, 경주하고, 총격전을 벌이며 세상을 구할 수 있는 완성된 창조물들을 만들어 내는 것이죠. 하지만 "더 큰" 그림에 따라 행동할 때가 되자, 개별적인 창조물을 만들어내고 악당의 음모를 좌절시키기 위한 일련의 사건을 조직하는 것(제가 무슨 말을 했는지 알겠죠?)을 할 수가 없었습니다. 그들은 모두가 같은 방향으로 움직이는 데 필요한 절차를 적은 체크리스트를 가지고 다니고 지침을 참조하는 것을 좋아하는 사람이 필요했습니다.
우리의 경우 그 방향은 생산입니다.
지속적인 배포가 실제로 가능해지고 DevOps의 궁극적인 목표가 dev와 "나머지 IT" 간의 벽을 넘으면서, 각 개별 서비스 및 시스템 세트의 마스터 빌더가 진공 상태에서 작업하지 않도록 하기 위해 4가지 운영 도메인(즉, 보안, 스토리지, 컴퓨팅 및 네트워크) 전반에 걸친 조정이 매우 현실적으로 필요합니다.
"코드가 로컬하고 다른 서비스와 독립적"인 마이크로서비스를 수용하는 개발자조차도 이러한 사고방식과 접근 방식은 다른 서비스가 통신할 수 있는 명확하게 정의되고 문서화된 인터페이스(API)가 있는 경우에만 작동한다는 것을 알고 있습니다. 이러한 인터페이스는 다른 서비스에서 해당 인터페이스를 호출하는 방법을 이해하지 못한 채 진공 상태에서 개발되어서는 안 됩니다.
동일한 내용이 생산 측면에서도 적용됩니다. 즉, 4개의 운영 영역 모두가 어느 시점에서 통신을 주고받아야 지속적인 배포가 실제로 이루어질 수 있습니다. 각 개별 서비스나 서비스 세트를 어떻게 구축할지에 대한 세부 사항이 있더라도 반드시 따라야 할 일련의 지침인 총괄 계획이 있습니다. 이러한 작업은 어느 시점에서 프로덕션 파이프라인의 한쪽 끝에서 다른 쪽 끝까지 배포를 추진하는 포괄적인 프로세스로 조율되어야 합니다.
각 도메인 내의 주요 건설자들은 서로 완전히 독립적으로 일할 수 없습니다. 그들은 조정하고 협력해야 하며, 자신의 퍼즐 조각이 오늘날 사업이 기반을 두고 있는 (앱) 세계를 구하기 위한 거대한 계획에 어떻게 들어맞는지 고려해야 합니다.
이를 시작하는 방법 중 하나는 영향 세트를 그래프로 나타내는 것입니다. 저는 보안의 관점에서, 프로그램 결합의 80% 규칙이라는 코드 결합을 다룬 최근 기사를 읽으면서 이 점을 떠올렸습니다. 이 글은 코드에 초점을 맞추고, 개발에 관심이 있는 사람들을 위한 종속성 그래프를 만드는 것에 중점을 두고 있지만, 한 단계 더 나아가서(추상화해서) 함수/프로시저/메서드를 프로덕션의 시스템으로 생각하면 이것이 얼마나 유용한지 알 수 있을 것입니다. 특정 서비스에 대한 애플리케이션 배포의 종속성 수준(또는 처음에는 도메인 수준)을 이해하면 작업을 완료하기 위해 그룹 전체에서 얼마나 많은 조정이 필요한지 파악하고 해당 목표를 달성하기 위한 계획을 수립하는 데 귀중한 통찰력을 제공할 수 있습니다.
가장 좋은 예 중 하나는 거의 모든 것이 먼저 핵심 네트워크 서비스에 달려 있다는 것입니다. 이는 애플리케이션과 종속 구성 요소뿐만 아니라 앱을 제공하는 보안 및 상위(앱) 서비스에도 해당합니다. 로드 밸런싱, 웹 애플리케이션 보안, 심지어 방화벽도 네트워크 속성에 의존하여 작동합니다. IT 내부의 다양한 그룹(사일로)이 관리하는 시스템과 서비스 간의 종속성(결합 요인)을 이해하면 지속적인 배포와 유사한 수준을 달성하기 위해 통신하고 협업해야 할 필요성을 충족하는 데 큰 도움이 될 수 있습니다.
최고의 건축가조차도 자신이 만든 것이 더 큰 그림에 어떻게 들어맞는지 이해해야 합니다. IT 전반에서 점점 더 자동화되고 코드 기반의 운영 환경에 개발 기술과 도구를 적용하면 지속적인 배포라는 거대한 구축 작업에 필요한 인터페이스를 더 잘 구축하는 데 도움이 됩니다.