Terraform 성능, 이제 한계는 없다!
Terraform init 단계에서 모듈 및 프로바이더(Provider) 다운로드 속도 저하 문제를 해결하기 위한 다양한 기법 제시
Git 서브모듈(Git Submodule), 로컬 모듈, 모듈 캐싱(Module Caching) 등 모듈 다운로드 속도 개선 방안 소개
프로바이더 버전 통합(Consolidate Provider Versions), root module 분할, OverlayFS 기반의 동시 실행 가능한 프로바이더 캐시(Provider Cache) 등 프로바이더 다운로드 최적화
Plan 단계에서 state refresh 속도 개선을 위한 병렬 처리, -refresh 옵션, light planning 기능 제안
init 단계: 모듈 및 프로바이더 다운로드 최적화
Terraform init 단계는 모듈과 프로바이더를 다운로드하는 과정에서 병목 현상이 발생할 수 있다. 모듈 다운로드(Module Download) 속도 개선을 위해 git 서브모듈, 로컬 모듈, 그리고 아직 구현되지 않은 모듈 캐시(Module Cache)를 활용하는 방안을 제시한다. 특히, git 서브모듈은 CI/CD 환경에서 캐싱을 지원할 경우 효과적이며, 로컬 모듈은 모듈 버전 관리 및 CI 검증의 복잡성을 줄이는 장점이 있다. 하지만, 모듈 캐싱은 아직 Terraform에서 공식적으로 지원하지 않아, 향후 기능 추가를 기대해야 한다.
프로바이더 캐싱(Provider Caching) 전략
프로바이더(Provider)는 init 단계에서 가장 많은 시간을 소모하는 요소 중 하나이다. 이를 해결하기 위해, 저자는 프로바이더 버전 통합(Consolidate Provider Versions)을 통해 불필요한 다운로드를 줄이고, root module 분할을 통해 프로바이더의 범위를 좁히는 방법을 제안한다. 또한, OverlayFS를 활용한 동시 실행 가능한 프로바이더 캐시를 구축하여, 캐시의 속도와 동시성 문제를 동시에 해결하는 방법을 제시한다. 이는 Terraform의 기본 캐시의 동시성 문제를 해결하는 효과적인 대안으로 제시된다.
Plan 단계: State Refresh 최적화
Plan 단계에서 가장 많은 시간을 차지하는 것은 state refresh이다. 이를 개선하기 위해, 저자는 병렬 처리(Parallelism)를 통해 API 호출 속도를 높이고, -refresh 옵션을 사용하여 refresh 과정을 생략하는 방법을 제시한다. 하지만, -refresh 옵션은 외부 변경 사항을 반영하지 못하는 위험이 있으므로, scheduled full refresh를 통해 보완해야 한다. 또한, 코드 변경 사항이 있는 리소스만 refresh하는 light planning 기능은 안전성과 속도 개선을 동시에 달성할 수 있는 대안으로 제시된다.
모놀리식(Monolithic) Root Module 분할의 장단점
모놀리식 root module을 여러 개의 작은 root module로 분할하는 것은 각 작업의 범위를 줄여 성능을 향상시킬 수 있다. 하지만, 이 과정은 의존성 관리(Dependency Management), 계획 및 적용 순서 계산, 일관성 유지, 인프라 전반의 변경 사항 적용 등 복잡성을 증가시킨다. 저자는 root module 분할이 가져오는 복잡성을 인지하고, 신중하게 접근할 것을 권고한다. 특히, 롤백(Rollback)의 어려움을 고려하여, 분할 결정에 신중을 기해야 한다.