AWS를 사용하기 전에, 클라우드 네이티브 환경에 대해 알아봅니다. 왜 AWS를 써야 하는지에 대한 당위성을 얻을 수 있었습니다.
클라우드 네이티브 애플리케이션이란 분산된 클라우드 인프라를 활용한 애플리케이션입니다.
- Cloud Native, O'Reilly
클라우드는 기본적으로 분산 시스템으로 이루어져 있으며, 분산 시스템이란 개별 컴퓨터들이 네트워크로 연결되어서 하나의 컴퓨터로 보이는 시스템입니다. 분산 시스템에는 몇 가지 잘못된 가정이 있으며, 썬 마이크로시스템즈의 피터 도이치라는 분이 이 문제의 목록을 정의했습니다.
AWS 또한 비슷한 문제들에 직면했으며, 그 문제들은 다음과 같다고 합니다.
그 외에도 시간 동기화, 트랜젝션, 합의 알고리즘 등 분산 시스템에서 기초적이고 중요한 문제들이 쌓여 있습니다.
대충 봐도 위와 같이 분산 시스템을 처음부터 구축해야 한다면 수많은 문제를 해결해야 합니다. 다행히 이미 클라우드 벤더들은 위 문제들을 합리적인 방법으로 관리하고 있으며, 우리는 퍼블릭 클라우드를 사용하는 법만 학습하면 어플리케이션 개발에 집중할 수 있습니다.
앞에서는 인프라 레벨에서 클라우드와 분산 시스템의 문제에 대해 알아봤습니다. 이번에는 어플리케이션 레벨에서 지켜야 할 원칙(모범 사례) 에 대해 알아보겠습니다.
온프레미스에서의 확장은 주로 장비에 자원을 추가하는 방식의 수직적 확장이지만, 클라우드에서의 확장은 장비 여러 대에 로드를 분산하는 수평적 확장입니다. 따라서 애플리케이션에는 상태가 없어야 하며, 상태가 없는 어플리케이션을 만들기 위한 원칙들을 정의한 것을 12요소 앱 방법론이라고 합니다.
그 원칙들에는 다음과 같은 것들이 있습니다.
정리하면 다양한 기술 및 개발 방법론을 활용해 위 요건을 충족해 나가는 것이 클라우드 네이티브한 어플리케이션 개발이라고 할 수 있을 것 같습니다. 제 경험상 새로운 오픈소스 및 환경을 사용할 때 위 요소 중 어떤 부분을 충족하기 위해 쓰는 것인지 생각해 보면 해당 오픈소스를 이해하는 데 도움이 되었던 것 같습니다.
이번 글에서는 AWS를 사용하기 전 왜 AWS를 사용해야 하는지, 클라우드 환경이란 무엇인지에 대해 간단하게 알아보았습니다. 또한 클라우드 환경에서 어플리케이션을 개발할 때 무엇을 고려해야 하는지에 대해서 알아보았습니다. 다음 글부터는 AWS 환경 구축을 시작해 보겠습니다.
혹시 글에 잘못된 점이 있다면 댓글로 지적해 주시면 정말 감사하겠습니다!
감사합니다.