12.1 과거의 인프라 구축 방법과 제약 사항
12.1.1 기존 시스템의 생명 주기
- 온프레미스 환경에서는 시스템의 생명 주기가 그 시스템을 구성하는 하드웨어나 소프트웨어의 유지보수 기간과 상관이 있다.
- 같은 시스템을 오랫동안 사용하는 것은 사실상 불가능하다.
- 예시) 10년 동안 사용할 기업 시스템을 만들자
- 6개월 정도 기획
- 1년 6개월 안에 시스템 완성
- 그 후 운영하면서 10년 동안 사용함
- 총 12 년 사용 필요
- 하드웨어는 5년 정도 지나면 감가상각된다 가정
- 즉, 같은 하드웨어를 12년 동안 사용하는건 어려움이 많음
- 소프트웨어 관점에서도 OS 는 12년동안 3~5 번 메이저 업그레이드가 발생
- 그 외에도 애플리케이션 아키텍처, 개발 방법론, 패러다임 변화 등도 고려해야 한다.
- 코볼로 만들어진 시스템을 5~10년 뒤 개발자가 와서 유지보수하기 어렵다.
- 인프라 환경의 생명 주기는 업무 서비스나 프로세스 본연의 비즈니스 생명 주기를 따르는 것이 아니라 하드웨어나 소프트웨어의 생명 주기에 좌우된다.
- 또한 시스템 구성 정보를 문서 형태로 관리하다보니 형행 시스템 정보 관리가 어려워 진다.
- 요구사항이 변경, 소프트웨어 버전 업그레이드 등에 의해 시스템은 변화할 수 있다.
- 데이터베이스 분산, 보안 취약점 등등
12.2 이뮤터블 인프라스트럭처의 개념
- 클라우드 환경에서는 가상 서버를 생성하거나 추가 및 삭제 작업을 할 때 API 를 통해 쉽게 제어할 수 있다.
- 이뮤터블 인프라스트럭처란 ?
- 변하지 않는 서버 기반
- 시스템을 변경해야 할 때는 이미 구축된 환경을 수정하는 대신, 구축된 환경을 파괴하고 수정된 환경으로 다시 구축한다.
- 함수형 프로그래밍에서의 개념과 비슷
- 생명주기 관점
- 필요한 시점에 리소스를 확보할 수 있기 때문에 감가 상각을 고려할 필요 없다.
- 비즈니스 변화 → 애플리케이션 변화 → 인프라 변화가 일어나도 한번에 변경할 수 있다.
- 소프트웨어의 업그레이드나 보안 패치 등도 릴리즈 시점에 함께 실시할 수 있다.
12.3 이뮤터블 인프라스트럭처와 코드를 기반한 인프라스트럭처
- 이뮤터블 인프라스트럭처를 유지보수 하려면 인프라 환경의 구성 정보를 코드 형태로 정의한 후, 시스템 구축을 자동화하여 언제든 인프라 환경을 재구성할 수 있게 해야 한다.
- 이런 개념을 Infrastructure as Code (IaC) 라고 부른다.
- Chef, Puppet, Ansible 등
- Cloudformation, Terraform 등
- Elastic Beanstalk
- Cloudformation 과 Elastic Beanstalk 의 차이
- Cloudformation 의 범위는 가상 머신 레이어, 소프트웨어 부분, 애플리케이션 환경 등 리소스를 직접 지정해서 관리해서 사용해야 함
- Beanstalk 는 IaaS 레이어를 의식하지 않고 인프라 환경을 구축하고 관리 가능
- 즉, Beanstalk 는 어플리케이션에서 설정값만 지정하면 용량에 대한 프로비저닝, 부하분산, 오토스케일링, 모니터링 모두 관리 가능
12.4 BLUE-GREEN 디플로이먼트
- 이뮤터블 인프라스트럭처는 환경이 변경하면 기존 환경을 파괴하고 수정된 환경으로 새로 만드는 접근 방식을 사용
- 새로운 어플리케이션으로 교체 방안은 두 가지