Lua
1993년에 만들어진 경량 스크립팅 언어. 게임 업계에서 많이 쓰인다. (World of Warcraft 애드온, Roblox 등)
왜 애플리케이션에 내장해서 쓸까?
어떤 프로그램의 동작을 외부에서 확장하고 싶을 때가 있다. 예를 들어 ArgoCD는 리소스 타입마다 “이 리소스가 healthy한가?”를 판단해야 한다. Deployment, ExternalSecret, CronJob… 리소스 타입이 계속 늘어나는데, 새 타입이 생길 때마다 Go 코드를 수정하고 재배포하면 번거롭다.
Lua를 내장하면 이 문제가 해결된다. 스크립트 파일만 추가하면 새 리소스 타입을 지원할 수 있다. 재컴파일, 재배포가 필요 없다.
샌드박스가 가능하다는 것도 이유다. 외부에서 가져온 스크립트가 파일을 지우거나 네트워크를 마음대로 쓰지 못하도록 제한할 수 있다. ArgoCD가 사용자가 정의한 Lua 스크립트를 안전하게 실행할 수 있는 이유다.
ArgoCD에서의 실제 예시
ExternalSecret의 health check는 이렇게 생겼다.
if condition.type == "Ready" and condition.status == "False" then
hs.status = "Degraded"
hs.message = condition.message
return hs
end
if condition.type == "Ready" and condition.status == "True" then
hs.status = "Healthy"
return hs
end
hs.status = "Progressing"
hs.message = "Waiting for ExternalSecret"
return hsReady=False면 Degraded, Ready=True면 Healthy, 그 외엔 Progressing. 로직 자체는 단순하다. Lua를 몰라도 읽힌다.
ArgoCD는 이런 스크립트를 리소스 타입별로 모아서 관리한다. → resource_customizations