Microservice의 등장 배경 (1)
지금 시점에서는 이미 많은 기업들이 이미 클라우드 환경으로 인프라를 옮긴 상태이고 이러한 클라우드 환경에서 서비스가 resilient(탄력성)과 Anti Fragile의 특징을 갖고 비용도 저렴하고 지속적인 확장이 가능한 구조인 Cloude Native를 지향할 수 있게 됐음.
이러한 시대에 주로 등장하는 관련 키워드가 Microservice Architecture(이하 MSA)인데 MSA의 등장 배경을 한 번 작성해 보고자함.
IT 시스템의 발전
MSA의 등장 배경을 이해하기 위해선 기존의 IT 시스템의 역사를 이해하는 것이 도움이 됨. MSA는 갑자기 생겨난 신기술 같은 것이 아님. MSA를 구축하기 위해 사용되는 많은 기술들은 이전에 이미 존재하고 있었으나 클라우드 시대가 도래하며 그 필요성이 부각되어 기존에 있던 기술들이 조합되어 등장하게 된 것임. 과거의 IT 시스템의 발전 흐름을 이해하면 MSA의 필요성을 이해하기 더 쉽다는 것임.
- 1960~1980 ; 메인 프레임 시기라고 불림, 하드웨어 중심적. 소프트웨어보다 하드웨어 사양이나 성격에 맞춰 서비스를 구축해야 했던 시기. 하드웨어 자체가 고가여서 서비스의 변경이나 발전이 어려웠음. 깨지기 쉬운 시스템 성격이 강함(Fragile)
- 1990 ~ 2000 ; 분산이라는 키워드가 주가된 시기, 분산 환경이 발전되던 시기, Robust야 Distributed 구조를 통해 좀 더 안정적인 시스템을 가져갈 수 있었음. 시스템의 불확실성을 가져간다 하더라도 안정적일 수 있게 되었음.
- 2010s ~ ; resilient(탄력성), Anti Fragile을 지향하며, 클라우드 서비스의 확장으로 인해 비용도 저렴하고 지속적인 확장이 가능한 구조(Cloud Native)를 지향할 수 있게 되었음
- 로컬 환경에서 클라우드로 전환되었고 안정성과 확장성 올라감
- 지속적인 개선 및 변경사항이 생기더라도 시스템은 탄력적으로 운영할 수 있도록 구축됨.
- 다른 시스템에 비해 안정성이 높고, 비용 또한 적게 가져갈 수 있음.
현 시대에서 AWS, Azure, GCP 등 다양한 클라우드 서비스들이 등장하며 기존의 IT 기업들은 클라우드 서비스에 자신들의 시스템을 올리게 되면서 이러한 Anti Fragile을 지향한 Cloude Native Architecture을 구성할 수 있게 됨.
Anti Fragile의 대표적인 네 가지 특성
클라우드 서비스의 확장으로 인해 IT 생태계는 저비용으로 지속적인 확장성을 갖추고 안정성이 높은 인프라 시스템을 갖추게 되었음. 이러한 Anti Fragile을 구성하기 위해 사용되는 대표적인 네 가지 특성을 살펴봄.
Auto Scaling
- 오토 스캐일링 그룹 내에 최소한의 크기로 각 서비스의 인스턴스를 유지하며, 성수기/비성수기에 따라 인스턴스를 늘리거나 줄인다.
Microservices
- 클라우드 네이티브 아키텍처의 핵심
- 전체 서비스를 구성하고 있는 모듈들을 세분화하고 운영하는 형태
Chaos Engineering
- 시스템이 격벽하게 예측하기 힘든 상황이라도 견딜 수 있고, 신뢰성을 높이며 소프트웨어 시스템을 실행시키는 방식이나 규칙을 통해 운영하는 기술
- 시스템의 변동이나 예견/예견되지 않은 불확실성에도 안정적인 서비스를 제공해야함을 의미
Continuous Deployments
- CI/CD와 같은 지속적인 배포, 통합이 가능하여야 한다.
- 하나의 서비스를 이루는 수 많은 소프트웨어들을 배포하고 통합하는 작업을 손쉽게 이뤄내야 한다.
- 적게는 수십개, 많게는 수백개의 분리된 도메인을 가진 서비스가 존재하는 마이크로서비스 아키텍처에서 일일히 빌드하고 배포하고 다른 시스템과 연계되는 부분을 일일히 사람이하게 되면 상당한 비용이 들기 때문에 중요한 부분
기존의 온프레미스 환경에서 클라우드 환경으로 옮겨지면서 저비용으로 지속적인 확장성과 안정성을 갖출 수 있게 되었음. 하지만 기존의 온프레미스 환경의 시스템을 클라우드 환경으로 옮겨지게 되면서 위와 같이 Anti Fragile의 특성을 갖추는 것이 중요해지게 됨. 이러한 Anti Fragile을 지향한 클라우드 환경에서의 시스템 구조를 Cloud Native Architecture라고 칭하게 됨.
다음 포스팅에서는 이러한 Cloud Native Architecture에 대해 작성하겠음.
참조
- From Fragile to Antifragile Software
- Amazon EC2 Auto Scaling이란 무엇입니까?
- Learning Chaos Engineering — Exploring Fragile Software Systems
다음글