가변적 인프라를 설명할 때 서버를 생성한다고 가정하고, 이 서버가 Apache로 동작하는 웹 서버라고 하면
여기서 NginX로 전환하고 싶으면 다른 인프라로 이동하지 않고 이미 구축된 인프라에서 변경만 하면 된다.
하지만, apt-get install을 하면서 실패할 수 있고, 설치에 성공해서 서버를 구동하면서 네트워크가 불안정하고 DNS가 다운되거나 apt 저장소가 응답하지 않았을 수도 있다.
따라서 NginX가 설치되지 않는 상황에서 여러개의 서버들이 각가지의 실패 상황에 놓여 있을 것이다.
이것은 매우 복잡한 시나리오이며 비현실적이라고 할 수 있다.
실제로는 99%의 경우 이 방벙이 작동한다. 하지만 현실적으로 수많은 서버들중 몇몇개의 서버는 오류가 발생하거나 예상보다 느릴수 있다.
발생한 오류는 디버그하기가 엄청나게 어렵다.
그래서, 불변적 인프라를 이것에 대한 대안적 방식으로 제공할 수 있다.
차이점은 이전 서버에서 새로운 서버로 업그레이드 하지 않는다는 것.
즉, V1 서버가 있고 V2로 업그레이드할 때 완전히 새로운 서버를 만드는 것입니다.
따라서, V1과 V2의 서버는 별개의 시스템으로 기존 인프라를 업그레이드하려고 하지 않습니다.
오류가 있으면 중단하고 완전히 새로운 서버를 생성합니다.
새로운 서버가 성공적으로 만들어지고 오류가 없다면 이전 서버의 버전은 프로덕션에서 제외 또는 폐기하거나, 재활용하여 다른 목적으로 사용됩니다.
따라서, 이 시스템을 제자리에서 수정하려고 하지 않는다는 것입니다.
불변적 인프라에서 절충안이 없는것은 아닙니다.
예를 들면, 데이터베이스에 중요한 데이터가 있는데 새로운 서버로 인프라를 옮기려면 중요한 데이터도 마이그레이션 해야합니다.
하지만, 용량이 많으면 마이그레이션에 시간과 위험 부담이 클 것입니다.
따라서, 데이터베이스를 외부화하여 새로운 인프라에서도 이전 인프라와 똑같이 연결되도록 해야 합니다.
불변적 인프라에서도 여러가지 방법의 접근 방식으로 불변성을 적용합니다.
이러한 데이터베이스 외부화와 같이 일부 변경 가능한 접근 방식을 사용해야할 수도 있습니다.
기존 인프라를 가져와서 업그레이드하는 가변적 인프라, 기존 인프라를 가져와서 새 인프라를 만들고 기존 인프라를 제외 또는 폐기하는 불변적 인프라.
- 이것이 변경 가능한 인프라와 변경할 수 없는 인프라 간의 핵심적인 차이라고 할 수 있습니다.