온프레미스 환경에서 가동시키던 서버들을 클라우드로 이동하면서 분산 환경을 사용하게 되었다. 분산 환경에서는 인프라 엔지니어가 수동으로 운용(operation)을 하지 않고 자동화된 툴을 사용하여 오케스트레이션(orchestration)을 한다. 따라서 인프라 엔지니어는 인프라 기술 + 코드 작성 기술이 필요하다.
애플리케이션을 가동시키기 위한 인프라
하드웨어, 네트워크, OS, 미들웨어
미들웨어: 운영 체제에서 제공하지 않는 일반적인 서비스와 기능을 애플리케이션에 제공하는 소프트웨어
시스템이나 소프트웨어에서 무엇을 할 수 있는지.
시스템의 성능이나 신뢰성, 확장성, 운영성, 보안 등 기능 요구사항 이외의 모든 요구 사항.
자사에서 데이터센터를 보유하고 시스템 구축부터 운용까지를 모두 수행하는 형태.
초기 시스템 투자에 드는 비용 부담이 크며, 시스템 가동 후의 운용에 드는 비용도 시스템 이용량과 상관없이 일정 금액을 부담해야 함.
자사에서 데이터센터를 보유하지 않으므로 서버나 네트워크 등 인프라와 관련된 초기 투자가 필요 없다.
IaaS/PaaS/SaaS
특정 기업 그룹에게만 제공되는 서비스. 이용자가 한정되어 보안 확보가 쉽다.
OS와 애플리케이션 사이에 들어가는 소프트웨어
클라이언트의 브라우저가 보내온 HTTP 요청을 받아, 웹 콘텐츠를 응답으로 반환하거나 다른 서버사이드 프로그램을 호출하는 기능
ex. Apache HTTP Server, Internet Information Services, Nginx
ex. MySQL, PostgreSQL, Oracle Database
RDBMS와는 다른 새로운 방식.병렬분산처리나 유연한 스키마 설정. 대량 데이터 축적이나 병렬처리에 뛰어남.
ex. Redis, MongoDB, Apache Cassandra
시스템을 안정적으로 가동시키기 위함
ex. Zabbix, Datadog, Mackerel
인프라 구성을 코드로 관리하면 소스코드 관리와 같이 버전 관리를 할 수 있고 가시화할 수 있어 인적 실수를 배제할 수 있다. (Infrastructure as Code)
애플리케이션의 코드를 추가 및 수정할 때마다 테스트를 실행하고 확실하게 작동하는 코드를 유지. 테스트를 자동으로 반복함으로써 품질 확보.
짧은 사이클의 개발과 릴리스를 반복할 수 있게 함. 절차를 코드로 관리하여 인프라 환경도 포함한 테스트가 끝난 애플리케이션 실행 환경을 그대로 제품 환경에 전개할 수 있다.
도서 - 완벽한 IT 인프라 구축을 위한 Docker