최근 몇 년 동안, ‘코드로서의 모든 것'(EaC, Everything as Code)이라는 새로운 개념이 여러 상호 연관된 요소들의 융합으로 인해 상당한 성장을 이루었습니다.
‘코드형 인프라(infrastructure-as-code)’와 데브옵스(DevOps) 운동의 부상은 ‘코드로서(As code)’라는 개념을 핵심 화두로 만들었습니다. 이는 IT 운영 및 시스템 관리자들이 재사용 가능한 코드를 활용하여 IT 환경의 변경을 자동화하기 위해 협력하기 시작한 시점이었습니다. 이후 개발자들은 수십 년 동안 애플리케이션 코드의 변경 사항을 관리해 온 방식과 유사하게 동일한 코드를 버전 관리하기 시작했습니다.
왜 모든 것이 코드여야 할까요?
대부분의 조직은 점점 더 복잡해지는 시스템에 의존하고 있습니다. 하나의 서버만으로는 모든 것을 처리할 수 없으며, 법률, 세계화, 공유 하드웨어와 같은 다양한 요소를 고려해야 합니다.
IT 스택의 많은 부분이 ‘서비스형’ 회사에 아웃소싱되고 있으며, 마이크로서비스는 다양한 시스템을 연결하는 API와 함께 점차 인기를 얻고 있습니다.
여러 국가의 다양한 요구사항을 충족하고 규정 준수를 보장하기 위해서는 인프라 관리가 필수적입니다. 모든 것이 원활하게 작동하도록 하는 것은 중요하지만, 이러한 복잡성으로 인해 수동적인 IT 관리는 점점 더 어려워지고 있습니다.
증가하는 기술 스택을 관리하고 조직 운영을 지속 가능하게 유지하기 위한 효과적인 방법이 필요합니다. 여기서 우리는 개발 분야에서 사용되는 방법론을 차용하게 되었는데, 여기에는 프로그래밍, 도구, 자동화가 포함되며, 이 모든 것을 코드라고 부릅니다.
코드로서의 모든 것이란 무엇일까요?
시스템의 모든 구성 요소를 코드로 취급하는 것을 ‘코드로서의 모든 것’이라고 합니다. 이는 소스 코드 및 구성을 Git 또는 SVN과 같은 저장소에 저장할 수 있음을 의미합니다.
또한, 구성 요소를 위에서 아래로 (통신 스위치, 베어 메탈 서버, 운영 체제, 빌드 구성, 앱 속성, 배포 구성을 코드화) 저장하여 모든 것을 추적하고 쉽게 재현할 수 있도록 합니다.
EaC(Everything as Code)에는 코드로 저장되는 시스템 설계도 포함됩니다. 과거 IT 환경에서는 인프라 구축에 특별한 기술과 물리적 하드웨어, 케이블 연결이 필요했습니다. 시스템은 매우 중요하거나 책임자에 의해서만 업데이트되는 경우가 많았습니다.
클라우드 컴퓨팅 및 클라우드 네이티브 앱의 등장으로 가상 인프라를 쉽고 저렴하게 구축할 수 있게 되었습니다. 가상 환경을 구성하는 코드는 코드 형태로 저장되어 필요할 때마다 재사용할 수 있습니다.
EaC는 개발자와 IT 엔지니어 모두에게 매우 유용한 도구입니다. EaC를 통해 애플리케이션 배포 관리나 인프라 프로비저닝과 같이 반복적이고 수동적인 작업에 대해 반복 가능하고 확장 가능한 접근 방식을 적용할 수 있습니다.
EaC는 개발자와 IT 엔지니어의 업무 효율성을 향상시키는 데 크게 기여합니다. 또한 동일한 도구와 구성 파일을 사용하여 여러 환경에서 작업을 확장할 수 있습니다. ‘코드로서의 모든 것’ 접근 방식을 통해 인적 오류의 위험을 줄일 수 있다는 점 또한 큰 장점입니다.
워크플로가 코드에 정의되어 있으면 엔지니어는 더 이상 실수를 하거나 잘못된 버튼을 클릭하는 것에 대해 걱정할 필요가 없습니다. 또한 EaC 구성을 통해 시스템에 수행된 작업을 확인할 수 있어 감사 프로세스도 훨씬 간편해집니다.
‘코드로서의 모든 것’은 어떻게 시장에서 인기를 얻고 있을까요?
EaC(Everything as Code)는 여러 상호 관련된 요소의 통합으로 인해 최근 몇 년 동안 빠르게 성장하고 있습니다. 그 이유 중 하나는 도구 공급업체들이 모든 코드를 수용하는 데 더욱 적극적으로 나서고 있기 때문입니다.
결과적으로, 개발자나 IT 엔지니어가 코드 파일을 통해 모든 것을 관리하는 것을 선호한다는 전제 하에, 도구 구성 및 배포에 대해 EaC 우선 접근 방식이라고 부를 수 있는 방식을 채택했습니다. 쿠버네티스가 대표적인 예입니다.
쿠버네티스는 웹 인터페이스를 통해 관리할 수도 있지만, 기본적으로 코드 파일을 통해 관리하도록 설계되었습니다. 대부분의 퍼블릭 클라우드 서비스와 CI 서버도 마찬가지입니다. 선택적으로 그래픽 인터페이스를 제공할 수 있지만, 코드를 통해 관리할 때 가장 효과적으로 작동합니다.
EaC의 성장은 많은 관리 및 개발 도구들이 공통 구성 형식에 동의했다는 점에 기인하기도 합니다. 거의 모든 EaC 호환 도구는 YAML 및 JSON을 구성 언어로 사용합니다.
이러한 형식의 표준화 덕분에 실무자들은 동일한 구성 파일 형식과 방법을 사용하여 다양한 도구를 관리할 수 있습니다. 전체 애플리케이션 전달 네트워크를 관리하고 구축하는 EaC의 능력은 그 인기를 더욱 높이는 데 기여합니다.
과거에는 CI/CD 워크플로에서 일부 도구만 처리할 수 있었지만, EaC는 이제 코드를 통해 모든 도구를 관리할 수 있게 되면서 그 유용성이 크게 증가했습니다. 단일 접근 방식을 사용하여 다른 도구나 프로세스를 제거하고 모든 작업을 중앙 집중화할 수 있습니다.
사실 EaC는 완전히 새로운 개념은 아닙니다. 과거에도 고립된 형태로 존재해 왔지만, 지금은 특정 데브옵스 워크플로의 솔루션으로 널리 사용되고 있습니다.
코드로서의 모든 것의 이점
기술 팀이 IT 운영에서 ‘코드로서의 모든 것’ 접근 방식을 채택하는 데에는 여러 가지 이유가 있습니다.
일관성
관리자는 다양한 환경에서 균일한 구성을 적용할 수 있습니다. 엔지니어는 인프라, CI/CD 도구, 클라우드 접근 제어 정책 등 모든 것을 코드로 구성하여 일관성 없는 설정을 방지할 수 있습니다.
버전 관리
관리자는 시간에 따라 구성이 어떻게 변경되는지 모니터링하고 버전 관리를 통해 변경 이력을 추적할 수 있습니다. 이는 소스 코드 관리와 유사하게, 문제가 발생하기 전에 어떤 변경 사항이 있었는지 확인하거나 필요하다면 이전 버전으로 되돌릴 수 있도록 합니다.
확장성
관리자는 필요한 만큼 많은 프로세스나 리소스에 구성을 적용할 수 있습니다. 이는 시간이 지남에 따라 규모가 커지는 작업에 매우 유리합니다. IT 팀은 각 리소스를 재구성하지 않고도 특정 리소스 또는 프로세스의 인스턴스를 추가할 수 있는 코드를 사용하여 구성을 생성할 수 있습니다.
감사 가능성
관리자는 코드 파일을 감사하여 구성된 리소스를 자동으로 검사할 수 있습니다. 이는 각 리소스를 수동으로 확인하는 것보다 훨씬 효율적입니다.
이식성
‘코드로서의 모든 것’을 사용하는 IT 팀은 특정 공급업체의 구성 도구에 종속되지 않고, 공급업체 중립적인 코드를 사용하여 구성을 정의하는 것이 더 쉽다는 것을 알게 될 것입니다.
예를 들어, 오픈 소스 테스트 자동화 프레임워크인 셀레늄(Selenium)을 사용하여 소프트웨어 테스트 스크립트를 생성할 수 있습니다. 이를 통해 관리자는 새로운 도구를 업데이트하거나 배우는 과정 없이 테스트 환경을 온프레미스에서 클라우드로 빠르게 이동할 수 있습니다.
‘코드로서의 모든 것’을 적용하는 방법
다음은 ‘코드로서의 모든 것’을 적용하는 다양한 방법입니다.
코드형 인프라
코드형 인프라(Infrastructure as Code)는 운영 및 개발자가 코드를 사용하여 인프라에 대해 원하는 상태를 정의하는 방식입니다. 즉, 프로비저닝해야 할 인프라를 정의하고, 필요에 따라 인프라를 수정할 수 있습니다.
코드형 보안
코드형 보안은 보다 안전한 시스템을 구축하는 데 도움이 됩니다. 이는 보안 결함에 대한 자동 검색 및 필요 시 자동 업데이트를 통해 확인할 수 있으며, IT 부서의 보안 관리에 효과적으로 활용될 수 있습니다.
또한, 이는 다양한 규제 준수 요건을 관리하는 데에도 적용될 수 있습니다. 예를 들어, 유럽 사용자에게는 미국 사용자와 다른 콘텐츠를 보여주어야 할 수 있는데, 이러한 작업은 ‘코드’ 접근 방식을 통해 자동으로 처리할 수 있습니다.
코드형 아키텍처
코드형 아키텍처(Architecture as Code)를 사용하면 비즈니스 애플리케이션을 실행하는 데 필요한 모든 구성 요소를 정의할 수 있습니다. 또한, 개발, 테스트, 프로덕션 등 다양한 환경에 배포할 수 있으며, 버전 관리, 검토, 수정 및 개선을 가능하게 하는 명령형 코드 접근 방식입니다.
코드형 테스트
코드형 테스트는 테스트 자동화의 완벽한 예입니다. 테스트 스크립트를 사용하여 비즈니스 로직 작업 및 UI 상호 작용을 자동화할 수 있습니다.
코드형 배포
최신 배포 파이프라인이 그 대표적인 예입니다. 현대적인 파이프라인은 코드로 확인 가능하며, 소프트웨어 구성 요소로 관리, 업데이트 및 유지 관리됩니다. 코드는 기본 및 고급 CI/CD 파이프라인을 구축하는 데 모두 사용될 수 있습니다.
‘코드로서의 모든 것’을 구현할 때 기억해야 할 사항
- IT 엔지니어와 소프트웨어 개발자 모두 업무 효율성을 향상시킬 수 있습니다.
- 회사가 ‘코드로서의 모든 것’을 성공적으로 적용하기 위해서는 사고방식의 변화가 필요합니다.
- 팀의 노력은 성공적인 구현에 매우 중요합니다.
- 가장 매력적인 기능 중 하나는 고품질 절차와 게이트를 따를 수 있다는 점입니다.
- 인프라 코드를 테스트하는 것은 어려운 과제이며 자동화된 테스트가 필요합니다.
- 단일 파일에 개발, 스테이징, 프로덕션 등 모든 환경의 모든 인프라를 정의할 수는 없습니다.
결론
소프트웨어 개발 및 데브옵스 방법론인 EaC(Everything as Code)는 코드를 사용하여 IT 리소스를 관리하는 방식입니다. EaC는 코드형 인프라(Infrastructure as Code)와 코드형 구성(Config as Code)을 비롯한 다양한 IT 영역에서 폭넓게 활용되고 있습니다.
‘코드로서의 모든 것’은 많은 조직에서 이상적인 최종 목표가 될 수 있지만, 플랫폼의 일부를 EaC로 전환하는 데에는 기회비용이 따릅니다. 따라서 리소스를 어디에 투자할지 신중하게 결정해야 합니다. 플랫폼에는 EaC 접근 방식의 이점을 얻을 수 있는 영역이 존재하며, 핵심은 이러한 영역을 식별하는 데 있습니다.