HCL 파일을 범용 언어로 갈아타자는 주장은 보통 반복문과 함수를 내세운다. 일리가 있을 때도 있다. 그런데 그 주장에 늘 따라붙는 불만이 드리프트이고, 드리프트는 언어 문제가 아니다.
HCL은 구조화된 설정 문법이다. 블록, 속성, 표현식이 있고, 같은 구조로 옮겨지는 JSON 형식도 있다. 블록이 무엇을 뜻하는지는 그것을 읽는 도구가 정한다. 파일은 원하는 상태를 적을 뿐이다. 드리프트는 파일 모르게 실제 리소스가 바뀌는 일이다. 웹 콘솔에서 누가 손으로 늘린 디스크, 아무도 기억 못 하는 스크립트가 고친 태그 같은 것. 같은 목표 상태를 내보내는 Python 프로그램도 똑같이 드리프트를 겪는다.
범용 언어가 실제로 바꾸는 것은 리뷰하는 사람이 머릿속으로 실행해야 하는 양이다. 평범한 블록이면 diff만 읽어도 어느 리소스가 움직이는지 안다. 헬퍼가 만든 맵을 도는 반복문이면 먼저 돌려 봐야 한다.
대부분 리소스를 나열하는 파일이라면 지루한 문법을 유지하고, 그 노력을 드리프트 잡는 데 쓰는 게 낫다. 실제와 파일이 어긋나면 요란하게 실패하는 정기 plan이 어떤 재작성보다 많은 일을 한다.