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 hs

Ready=FalseDegraded, Ready=TrueHealthy, 그 외엔 Progressing. 로직 자체는 단순하다. Lua를 몰라도 읽힌다.

ArgoCD는 이런 스크립트를 리소스 타입별로 모아서 관리한다. → resource_customizations