서버 이론 - 불변 인프라(Immutable Infrastructure)와 Snowflake, Phoenix서버
불변 인프라(Immutable Infrastructure)란?
불변 인프라는 서버를 배포한 후 수정하지 않는(Immutable) 방식의 패러다임입니다.
만약 서버에 변경이 필요할 경우 수정을 하는 것이 아니라 아예 새로운 서버를 구성하여 그 서버를 배포하고 기존 서버는 폐기해버립니다.
즉 Mutable한 인프라에서는 수정사항이 생겼을때 서버를 수정하여 다시 배포하는 과정을 거쳤다면
불변 인프라에서는 수정사항이 생겼을때 수정사항이 적용된 서버를 구성한 후 테스트를 거쳐 오류가 없다면 그 서버를 새로 배포하는 방식을 따릅니다.
눈송이(Snowflake) 서버와 피닉스(Phoenix) 서버
눈송이 서버와 피닉스 서버는 각각 서버 패턴의 한 종류입니다.
불변 인프라는 피닉스 서버에, Mutable한 인프라는 눈송이 서버에 속하므로 잠시 특징들을 살펴보고 넘어가겠습니다.
눈송이 서버
- 한 번 설치한 서버를 계속해서 운용함
- 지속적으로 서버를 업데이트 하고 설정을 변경하면서 운용
- 단일 서버만을 이용한다면 모르겠지만 서버가 하나 둘 늘어갈 수록, 그리고 시간이 지날 수록 문제가 많이 발생할 수 밖에 없는 구조
- 모든 서버에 완벽히 똑같은 수정 사항을 적용할 수 있을 것이란 보장이 없기 때문에(사람이 관리하는 특성상 필연적으로 누락이 발생할 수밖에 없음 - 관리자의 교체, 단순 실수 등) 시간이 지날 수록 각각의 서버는 다른 모습이 되어버림
피닉스 서버
- 한 번 생성된 서버는 수정하지 않음
- 수정이 필요할 경우 OS, 애플리케이션 인스톨, 서버 설정 등을 처음부터 반복하여 새로운 서버를 생성
- 매번 서버를 새로 생성하는 과정이 오래 걸리기 때문에 보통 기본 이미지(Base Image)를 생성해 놓고 변경 사항만 따로 설정하는 방법을 사용
불변 인프라의 특징
1. 서버의 증/감이 쉬움
- 기존 서버를 수정할 필요 없이 새롭게 배포만 하면 되니까 수정에 비해 과정이 훨씬 간편합니다. 당장 클라우드 서비스를 이용해보신 분들은 알겠지만 수정보단 새로 배포하는게 훨씬 쉽습니다.
2. 버전관리 가능
- 각각 수정 사항이나 변경 사항을 이미지로 만들어서 관리할 수 있으므로 서버의 실행 환경 자체를 버전으로서 관리할 수 있습니다.
3. 멱등성 보장
- 수정 사항이 적용될 경우 기존 서버를 폐기하고 새로운 서버를 배포하는데 이 때 모든 서버에 대해 일괄적으로 같은 이미지를 사용해서 배포하게 되므로 멱등성이 보장됩니다.
결론
우리 모두 docker를 사용합시다.