설정 파일, 이제는 코드로 작성해야 할 때
Makefiles, CloudFormation, GitHub Actions 등 설정 파일을 코드 형태로 관리하는 것이 개발 생산성을 향상시킬 수 있다는 주장이 제기됨
DSL(Domain-Specific Language)의 한계와 코드 기반 설정의 장점, 특히 타입 안전성(Type Safety), 모듈성(Modularity), 추상화(Abstraction)의 중요성을 강조함
GitHub Actions YAML과 같은 데이터 기반 DSL은 복잡해질수록 유지보수가 어려워진다는 비판이 제기됨
Buildkite와 GitLab CI와 같은 동적 파이프라인 지원 도구의 등장을 통해 코드 기반 설정의 가능성을 제시함
Makefiles의 한계와 코드 기반 빌드 시스템의 필요성
게시글에서는 Makefiles를 단순한 명령 실행 도구 이상으로 활용하는 경우, 추상화(Abstraction)의 한계에 직면한다고 지적한다. 특히, 유사한 규칙이 반복될 때 패턴 매칭(Pattern Matching)을 사용하지만, 이 또한 제한적이라고 언급한다. 저자는 Python 스크립트를 사용하여 Makefiles를 생성하는 방식을 제시하며, 코드 기반 빌드 시스템의 필요성을 강조한다. 이는 빌드 그래프(Build Graph)를 동적으로 생성하고 관리할 수 있게 해준다.
DSL(Domain-Specific Language)의 단점과 코드의 장점
커뮤니티에서는 데이터 기반 DSL의 문제점을 지적하며, DSL이 복잡해질수록 유지보수성이 떨어진다고 비판한다. GitHub Actions YAML과 같은 DSL은 기능이 추가될수록 언어 설계의 한계에 직면하며, 결국에는 제대로 설계되지 않은 프로그래밍 언어가 된다는 것이다. 반면, 코드 기반 설정은 타입 안전성(Type Safety), 모듈성(Modularity), 추상화(Abstraction) 등의 장점을 제공하며, 개발 생산성을 향상시킨다.
인프라 코드(IaC)와 CI/CD 파이프라인의 미래
게시글에서는 CloudFormation과 GitHub Actions와 같은 도구들이 코드 기반 설정을 지원해야 한다고 주장한다. CDK(Cloud Development Kit)와 같이 코드를 사용하여 인프라를 정의하는 방식은 타입 안전성과 모듈성을 제공하며, 개발자가 더 효율적으로 인프라를 관리할 수 있게 한다. 또한, Buildkite와 GitLab CI와 같은 동적 파이프라인 지원 도구의 등장은 코드 기반 CI/CD 파이프라인의 가능성을 보여준다.
코드 기반 설정의 신뢰성과 유지보수성
일부 의견에서는 코드 기반 설정이 코드 자체의 버그로 인해 신뢰성이 저하될 수 있다고 주장한다. 하지만, 잘 설계된 래퍼(Wrapper)를 통해 코드 기반 설정의 신뢰성과 유지보수성을 향상시킬 수 있다. 특히, 대규모 코드베이스에서는 코드의 가독성이 중요하며, 코드 기반 설정은 복잡한 설정을 더 쉽게 이해하고 관리할 수 있도록 돕는다. 데이터 미저장 정책(Zero-Retention Policy)을 통해 보안성을 강화할 수 있다.