💡 핵심 인사이트
선언적(Declarative) 인프라 관리는 쿠버네티스(K8s)와 테라폼(Terraform) 같은 현대 클라우드 도구들을 지배하는 가장 위대한 동작 철학입니다.
"서버 1번 켜, 그리고 웹서버 깔아, 그다음 폴더 지워!"라는 식의 멍청한 명령어(Imperative) 나열을 버리고, 그저 "나는 램 4기가짜리 켜진 서버 3대가 눈앞에 있었으면 좋겠어"라는 최종 목적지(원하는 상태, Desired State)만을 종이에 쓱 적어 던지는(선언하는) 똑똑한 자동화 기법입니다.
Ⅰ. 절차적/명령적(Imperative) 방식의 비극
과거의 리눅스 엔지니어(혹은 쉘 스크립트)는 컴퓨터에게 일일이 잔소리를 했습니다.
run server_1(서버 1대 켜!)add memory 4G(램 4기가 달아줘!)run server_2,run server_3(서버 2개 더 켜!)
치명적 단점 (멱등성의 파괴): 이 스크립트 파일을 엔지니어가 실수로 **'더블 클릭(2번 실행)'**했다고 칩시다. 컴퓨터는 명령을 고지식하게 한 번 더 따릅니다. 서버가 총 6대가 되어버리고, 회사는 다음 달 아마존에 요금 폭탄(수백만 원)을 내야 합니다. (어제와 오늘 실행한 결과가 다름).
Ⅱ. 선언적(Declarative) 방식의 마법 (원하는 상태만 적기)
선언적 도구(테라폼, K8s yaml 파일)는 과정을 묻지 않습니다. 결론만 적습니다.
# 선언적 코드 예시
서버_종류: Ubuntu
원하는_서버_개수 (Replicas): 3대
엔지니어가 이 메모장(선언문)을 시스템에 던지면, 봇(Controller)이 알아서 현재 현실 세계를 쓱 쳐다보고 혼자서 모든 찰떡같은 판단(과정)을 수행합니다.
[봇의 천재적인 내부 판단 로직]
- 상황 1 (빈 땅): "현실에 서버가 0대네. 근데 주인님이 3대를 원하네. 오케이 3대 새로 켜줄게!"
- 상황 2 (더블 클릭 실수): 엔지니어가 미쳐서 저 파일을 10번 연속 실행했습니다. 봇은 말합니다. "주인님이 3대를 원하시네? 현실을 보니 이미 3대가 예쁘게 돌아가고 있군. 오케이, 아무것도 안 하고 냅둘게!" (서버가 6대로 늘어나지 않음. 이를 '멱등성(Idempotence)' 보장이라고 합니다.)
- 상황 3 (서버 1대 장애로 터짐): 새벽 3시에 서버 1대가 펑 터져서 불탔습니다. 봇은 밤을 새우며 감시 중입니다. "어? 현실에 2대밖에 없네? 주인님은 3대를 원한다고 문서에 도장 찍어놨는데! 당장 1대 새로 켜서 3개 맞춰 놔야지!" (우주 최강의 자가 치유, Self-Healing).
Ⅲ. 왜 클라우드는 '선언적' 사상을 사랑하는가?
- 자동 복구 (Self-Healing): 인간이 알람 받고 새벽에 깰 필요가 없습니다. 시스템의 뇌(Control Loop)가 끝없이 '문서에 적힌 정답(Desired)'과 '현재 상태(Current)'를 비교하다가, 차이가 벌어지면 인간을 깨우지 않고 혼자서 좀비처럼 살려냅니다.
- IaC와 GitOps의 뼈대: 코드 파일(yaml) 자체가 곧 '최종 결과물'의 모습이기 때문에, 깃허브(Git)에 문서만 저장해 둬도 인프라의 모든 구조가 문서화되는 완벽한 시각화 효과를 얻습니다.
📢 섹션 요약 비유: 명령적 방식은 택시 기사에게 **"첫 번째 신호등에서 좌회전하고 200m 가서 우회전한 뒤 세워주세요"**라고 일일이 잔소리하는 피곤한 방식입니다. 만약 도로가 공사 중이면 기사님은 당황해서 차를 멈춥니다(에러). 반면 선언적 방식은 자율주행 택시 네비게이션에 **"강남역 4번 출구(원하는 목적지)"**라고 딱 하나만 찍어두고(선언) 잠을 자는 것입니다. 차가 막히든 공사 중이든 네비게이션 AI(컨트롤러)가 알아서 우회로를 다 찾아가며, 결국 무조건 강남역 4번 출구 앞에 나를 안착시켜 줍니다.