command가 멱등성을 깨뜨리는 이유
원시 셸의 함정과 이를 피하는 방법을 알아봅니다.
command가 멱등성을 깨뜨리는 이유은(는) CoddyKit의 무료 Ansible Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ansible Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ansible Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
command는 항상 실행됩니다
command 모듈은 호스트에서 지정한 내용을 그대로 실행합니다. '완료'가 어떤 상태인지 알 수 없으므로 매번 실행됩니다.
ansible.builtin.command: useradd deploy항상 changed입니다
command는 상태를 확인할 수 없으므로 실제로 새로운 작업을 하지 않았더라도 Ansible은 매번 changed로 보고합니다.
changed: [web1]다시 실행하면 문제가 생길 수 있습니다
더 나쁜 경우에는 반복 실행할 때 일부 명령이 실패하거나 작업이 중복됩니다. 예를 들어 사용자가 이미 존재하면 useradd에서 오류가 발생합니다.
상태 기반 모듈을 우선 사용하세요
사용자 계정에는 대신 user 모듈을 사용하세요. 계정이 존재하는지 확인하고 없을 때만 생성하므로 멱등성을 유지합니다.
ansible.builtin.user:
name: deploy
state: present대부분 전용 모듈이 있습니다
대부분의 일반적인 셸 작업에는 전용 모듈이 있습니다. file, copy, lineinfile, git이 그 예입니다. 이를 사용하면 Ansible이 상태를 비교하고 이미 올바를 때 건너뛸 수 있습니다.
creates로 command를 보호하세요
command를 반드시 사용해야 한다면 creates를 추가하세요. 해당 경로가 이미 존재할 때 Ansible이 작업을 건너뛰므로 멱등성이 회복됩니다.
ansible.builtin.command: ./build.sh
args:
creates: /opt/app/built또는 removes로 보호하세요
creates의 반대는 removes입니다. 지정한 경로가 아직 존재할 때만 명령이 실행되므로 정리 작업에 유용합니다.
ansible.builtin.command: rm /tmp/lock
args:
removes: /tmp/lockwhen으로 command를 조건부 실행하세요
등록한 확인 결과로 판단하는 when 조건으로 command를 감쌀 수도 있습니다. 그러면 실제로 필요할 때만 실행됩니다.
아무 작업도 하지 않았다고 Ansible에 알리세요
읽기 전용 command에 changed_when: false를 설정하면 Ansible이 매번 이를 changed로 보고하지 않습니다.
ansible.builtin.command: cat /etc/hostname
changed_when: falseshell에도 같은 문제가 있습니다
shell 모듈에도 같은 결함이 있습니다. 셸을 통해 실행되므로 같은 방식으로 보호하지 않으면 역시 비멱등적입니다.
원시 명령은 최후의 수단으로 사용하세요
원시 command는 기본 선택지가 아니라 빠져나갈 방법입니다. command를 사용할 때마다 멱등성이 조용히 깨질 가능성이 있으므로 적합한 모듈이 없을 때만 사용하세요.
빠른 확인
command로 빌드 스크립트를 실행했더니 매번 changed로 표시됩니다.
복습
command와 shell 모듈은 항상 실행되고 항상 changed를 보고합니다. 실제 모듈을 우선 사용하거나 creates, removes 또는 changed_when으로 보호하세요. 🛡️
자주 묻는 질문
“command가 멱등성을 깨뜨리는 이유” 강의는 무료인가요?
네 — “command가 멱등성을 깨뜨리는 이유” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ansible Academy 강의 전체를 잠금 해제할 수 있습니다. Ansible Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“command가 멱등성을 깨뜨리는 이유”에서 뭘 배우나요?
원시 셸의 함정과 이를 피하는 방법을 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 Ansible Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Ansible Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Ansible Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“command가 멱등성을 깨뜨리는 이유” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Ansible Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Ansible Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 단계별 스크립트가 아닌 원하는 상태
- 출력에서 changed와 ok 읽기
- command가 멱등성을 깨뜨리는 이유
- Check 모드: --check로 시험 실행하기