종단 간 서버리스 플랫폼을 구축할 수 있는 5가지 기본 AWS 서비스

서버리스 아키텍처: 클라우드 기반 시스템 구축의 새로운 패러다임

과거에는 자동화된 소프트웨어 시스템을 구축하기 위해 전용 CPU, 메모리, 저장 공간 등 다양한 리소스를 갖춘 여러 서버를 직접 설정해야 했습니다. 이후 시스템 관리를 위한 별도의 관리 팀이 구성되었고, 개발 팀은 이러한 인프라를 연결하고 운영하는 프로세스를 개발해야 했습니다.

이러한 방식은 여러 팀이 협력하여 공동의 목표를 달성해야 하므로 복잡할 수 있으며, 팀 간의 이해 상충은 종종 문제가 되었습니다.

또한 비용 부담도 컸습니다. 관리자 급여는 물론, 실제 사용 여부와 관계없이 항상 작동하는 서버로 인해 리소스가 낭비되었습니다. 시간이 지남에 따라 최적의 성능을 유지하려면 서버 자원을 자동으로 확장하는 오토스케일링 솔루션이 필수적이었습니다.

클라우드 플랫폼의 등장으로 상황이 바뀌었습니다. 이제는 서버 클러스터를 직접 설정할 필요 없이 엔드 투 엔드 아키텍처를 구축할 수 있게 되었습니다. 특히 관리 측면에서 유지 관리 부담이 크게 줄었습니다.

이는 스타트업이나 프로젝트의 최소 실행 가능 제품(MVP) 단계를 위한 매우 경제적인 선택입니다. 미래의 사용자 활동과 트래픽 부하를 예측하기 어려운 상황에서 클러스터 서버 구성을 결정하기 어려울 때 특히 유용합니다. 이럴 때 서버리스 클라우드 서비스는 탁월한 대안이 될 수 있습니다.

서버리스 클라우드 서비스를 활용한 프로세스 자동화는 서버리스 아키텍처의 장점을 극대화합니다. 마치 기존 클러스터 서버와 같은 결과를 만들면서도, 서비스를 연결하여 간편하게 시스템을 구축할 수 있습니다.

다음은 AWS의 네이티브 서비스만을 사용하여 이러한 서버리스 아키텍처를 구축한 예시입니다.

서버리스 서비스 흐름 구성

제조 시설이나 유틸리티 설비와 같은 특정 자산의 데이터와 사진을 수집하는 플랫폼을 구축한다고 가정해 보겠습니다.

  • 수집된 데이터는 향후 분석을 위해 저장되어야 합니다.
  • 백엔드 프로세스는 비즈니스 규칙에 따라 데이터를 처리하고, 계산된 결과를 정규화된 형태로 관계형 데이터베이스에 저장합니다.
  • 사용자는 애플리케이션 프런트엔드를 통해 정제된 데이터를 확인할 수 있습니다.

이제 이러한 시스템을 구성하는 다양한 요소들을 살펴보겠습니다.

AWS S3 버킷

출처: aws.amazon.com

Amazon S3 버킷은 AWS 클라우드에 파일이나 사진을 저장하는 데 매우 효과적인 방법입니다. S3 버킷은 매우 저렴한 스토리지 비용을 제공하며, S3 버킷 수명 주기 정책을 적용하면 더욱 비용을 절감할 수 있습니다.

이러한 정책은 오래된 파일을 아카이브 또는 심층 아카이브 접근과 같은 다른 S3 버킷 클래스로 자동 이동시킵니다. 클래스는 액세스 속도에 따라 다르지만, 오래된 데이터의 경우 큰 문제가 되지 않습니다. 보관된 데이터는 일반적으로 표준 운영 요구사항이 아닌 긴급 이벤트에 액세스하는 데 사용됩니다.

  • 데이터를 하위 폴더에 체계적으로 구성할 수 있습니다.
  • 적절한 접근 권한 제한을 설정해야 합니다.
  • 동적 S3 버킷 정책 내에서 쉽게 식별하고 관리할 수 있도록 버킷에 태그를 지정하십시오.
  • S3 버킷은 기본적으로 서버리스입니다. 데이터를 저장하는 공간일 뿐입니다.

S3 버킷은 기본적으로 서버리스입니다. 데이터를 저장하는 공간일 뿐입니다.

AWS Athena 데이터베이스

출처: aws.amazon.com

AWS Athena를 사용하면 AWS 기본 데이터 레이크를 쉽게 만들 수 있습니다. S3 버킷을 이용하여 데이터를 저장하는 서버리스 데이터베이스입니다. 데이터는 쉼표로 구분된 값(CSV) 파일과 같이 구조화된 파일 형태로 저장됩니다. Athena는 실제 데이터가 저장된 S3 버킷을 참조하여 데이터를 가져옵니다.

Athena는 일반적으로 사용되는 업데이트문과 같은 일부 기능은 지원하지 않습니다. 이러한 이유로 Athena는 간단한 옵션으로 간주해야 합니다.

하지만 인덱싱 및 파티셔닝을 지원하며, 인프라에 새 버킷을 추가하는 것만큼 간단하게 수평 확장을 할 수 있습니다. 간단하고 기능적인 데이터 레이크를 생성하는 데 필요한 대부분의 기능을 제공합니다.

최적의 성능을 위해서는 향후 사용에 적합한 데이터 구조를 선택하는 것이 중요합니다. 데이터를 어떤 방식으로 가져올지 명확히 하는 것이 필요합니다. 이미 데이터로 채워진 테이블을 나중에 재구성하는 것은 어려운 작업입니다.

Athena DB는 시간이 지남에 따라 쉽게 확장 가능한 변경 불가능한 데이터 풀을 만들고자 할 때 좋은 선택입니다.

AWS Aurora 데이터베이스

출처: aws.amazon.com

Athena DB는 가공되지 않은 데이터를 저장하는 데 적합하며, 원본 데이터를 재사용하기 위해 저장할 때 매우 유용합니다. 그러나 프런트 엔드 애플리케이션에 필요한 데이터를 제공하는 속도는 느립니다.

이러한 문제를 해결하기 위해 서버리스 모드로 실행되는 Aurora 데이터베이스가 좋은 대안이 될 수 있습니다. 설정 및 사용이 매우 간편합니다.

Aurora는 단순한 데이터베이스가 아닙니다. AWS에서 가장 발전된 관계형 데이터베이스 솔루션 중 하나이며, 지속적으로 개선되고 있는 복잡한 기능을 제공합니다.

Aurora는 서버리스 모드로 실행할 수 있다는 점에서 다른 관계형 데이터베이스 서비스와 차별화됩니다. 서버리스 모드의 작동 방식은 다음과 같습니다.

  • AWS 콘솔을 사용하여 Aurora 클러스터를 구성합니다. 표준 CPU 및 RAM 수준과 자동 크기 조정 기능의 최대 간격을 지정해야 합니다. 클러스터는 사용량에 따라 자동으로 확장되거나 축소됩니다.
  • 사용자 또는 프로세스가 데이터베이스에 실제 요청을 보내기 전까지는 Aurora 클러스터가 시작되지 않습니다. 예를 들어, 예약된 일괄 처리 작업이 시작되거나 애플리케이션이 백엔드 API 호출을 통해 데이터베이스에서 데이터를 검색할 때 시작됩니다. 데이터베이스는 요청 처리가 완료되면 미리 설정된 시간 동안 활성 상태를 유지합니다.
  • 데이터베이스 작업이 더 이상 없으면 Aurora 클러스터가 자동으로 종료됩니다.

서버리스 Aurora DB는 실제 작업이 필요한 경우에만 실행됩니다. 자동으로 시작된 클러스터는 작업이 없으면 다시 종료됩니다. 따라서 유휴 시간이 아닌 실제 사용량에 대해서만 비용을 지불합니다.

서버리스 Aurora는 AWS에서 완벽하게 관리하므로 관리자가 필요하지 않습니다.

AWS Amplify

AWS Amplify는 JavaScript 및 React 라이브러리를 사용하여 구축된 프런트엔드 애플리케이션을 빠르게 배포할 수 있는 서버리스 플랫폼을 제공합니다. 별도의 클러스터 서버를 설정할 필요 없이 AWS 콘솔에서 코드를 직접 배포하거나 자동화된 DevOps 파이프라인을 사용할 수 있습니다.

백엔드 API를 호출하여 데이터베이스에 저장된 데이터에 접근할 수 있습니다. 이러한 호출을 통해 프런트엔드 애플리케이션에서 실제 데이터를 사용할 수 있습니다. 백엔드 성능 최적화는 개발팀에서 해결해야 하는 중요한 과제입니다. API 호출 내에서 효율적인 선택문을 설계하면 UI의 응답 속도를 향상시킬 수 있습니다.

AWS Step Functions

출처: aws.amazon.com

시스템의 모든 구성 요소가 서버리스라고 해서 전체 아키텍처가 서버리스인 것은 아닙니다. 서버리스 아키텍처는 각 구성 요소 간의 배치 프로세스가 서버리스로 구현되어야 완성됩니다.

AWS Step Functions는 AWS 클라우드에서 이 문제를 해결하기 위한 최적의 솔루션을 제공합니다. AWS Lambda 함수의 연결된 목록으로 구성되며, 각 함수는 명확한 시작과 종료 상태를 갖는 워크플로우를 만듭니다. 일반적으로 Python 또는 Node.js로 작성된 Lambda 함수는 필요한 모든 작업을 수행하는 작은 코드 조각입니다.

다음은 Step Functions를 실행하는 방법의 예시입니다.

  • S3 버킷에 새 파일이 들어올 때마다 AWS가 자동으로 Lambda 함수를 실행합니다. 해당 함수는 파일을 파싱한 다음, Athena에 로드합니다. 마지막으로, 결과를 CSV 형식으로 S3 버킷에 저장합니다.
  • 다음 단계에서 다른 Lambda 함수가 이 결과를 사용합니다. 이 함수는 머신러닝 모델을 호출하고, 새 데이터의 하위 집합을 정규화된 테이블로 변환할 수 있습니다. 마지막으로 정규화된 데이터를 Aurora 데이터베이스에 로드합니다.
  • Step Functions는 이러한 Lambda 함수를 연결하여 배치 흐름을 형성합니다. 필요한 경우 다른 Step Functions를 호출하여 다양한 시나리오를 처리할 수도 있습니다.

이 서버리스 흐름의 주요 단점은 각 Lambda 함수가 최대 15분 동안만 실행할 수 있다는 것입니다. 따라서 흐름을 작은 Lambda 함수로 분할하면 이 문제를 해결할 수 있습니다.

하나의 단계에서 여러 Lambda 함수를 동시에 호출할 수 있습니다. 이는 단계를 병렬화하여 여러 Lambda 함수가 동시에 실행되도록 하는 것입니다. 병렬 처리가 모두 완료될 때까지 기다린 후 다음 단계를 진행합니다.

마무리

서버리스 아키텍처는 전체 시스템 환경을 포괄하는 클라우드 플랫폼을 구축할 수 있는 좋은 기회를 제공합니다. 이 플랫폼은 수평 확장이 가능하며 운영 비용이 저렴합니다.

이러한 아키텍처는 예산이 제한된 프로젝트에 적합합니다. 특히 사용자 활동과 트래픽 부하를 예측하기 어려운 상황에서 훌륭한 대안이 될 수 있습니다. 또한, 성공적으로 모든 사용자를 온보딩한 후에도 시스템 작동 방식에 대한 전반적인 이해를 얻을 수 있습니다.

물론 모든 경우에 적합한 솔루션은 아니며, 특히 CPU를 많이 사용하는 작업에는 적합하지 않을 수 있습니다. 하지만 AWS 클라우드는 서버리스 사용 사례를 지속적으로 확장하고 있습니다. 따라서 다음 AWS 클라우드 프로젝트를 시작하기 전에 서버리스 옵션을 철저히 조사하는 것이 좋습니다.

다음 글에서는 최신 애플리케이션을 위한 최고의 서버리스 데이터베이스를 살펴보겠습니다.