2 min to read
Serverless / TIL
API Gateway, Lambda, DynamoDB
Serverless
서버리스는 마이크로서비스의 배포 옵션이다. 사용자가 기본 서버를 처리할 필요가 없이, FaaS(Function as a Service) 또는 BaaS(Backend as a Service)와 같은 클라우드 공급업체가 제공하는 서비스를 사용하여 서버 인프라를 추상화하고 자동으로 서버를 프로비저닝하고 관리한다.
서버리스는 확장성, 민첩성 및 복원력과 같은 마이크로서비스의 여러 특성을 반영한다. 서버리스를 사용하면 서비스가 수요에 따라 자동으로 확장되고 신속하게 배포 및 업데이트될 수 있으며 내결함성을 갖도록 설계할 수 있다.
AWS는 서버리스 컴퓨팅을 위한 AWS Lambda, 서버리스 API를 위한 Amazon API Gateway, 서버리스 데이터베이스를 위한 AWS DynamoDB를 비롯한 여러 서버리스 서비스를 제공한다.
- 이 외의 서비스 : AWS Step Functions, 서버리스 GraphQL API용 AWS AppSync
마이크로서비스는 반드시 서버리스로 구현될 필요는 없다. 기존 서버 인프라 또는 Kubernetes와 같은 컨테이너 오케스트레이션 플랫폼을 사용하여 배포할 수 있다. 서버리스 사용 결정은 애플리케이션 요구 사항, 개발 속도 및 비용과 같은 다양한 요인에 따라 달라진다.
마이크로서비스와 서버리스는 최신 애플리케이션을 구축하기 위해 함께 사용할 수 있는 두 가지 아키텍처 스타일이다.
-
마이크로서비스 서버리스 방식 애플리케이션을 독립적으로 개발, 배포 및 확장할 수 있는 독립적인 구성 요소로 나누는 방식 인프라가 추상화되고, 타사 공급자가 관리하는 애플리케이션을 구축하고 실행하는 접근 방식 코드 서버리스 기능으로 배포할 수 있으므로 개발자는 확장 및 관리를 처리하는 인프라에 의존하며 비즈니스 논리를 구축하는 데 집중할 수 있다. 일시적이고 자동으로 확장될 수 있는 상태 비저장 이벤트 트리거 함수에서 실행된다. 스타일 애플리케이션이 작고 독립적이며 느슨하게 결합된 서비스로 구성된 소프트웨어 아키텍처 스타일 기본 인프라에 대한 걱정 없이 이러한 서비스를 배포하고 관리하는 방법을 제공 -
상태 비저장 : 서버리스 아키텍처의 주요 특징 중 하나이다. 서버리스 환경에서 실행되는 기능은 요청 간에 상태 정보를 저장하지 않고, 외부 서비스나 데이터 저장소에 의존하여 필요한 상태를 관리한다.
이렇게 하면 세션 상태 또는 기타 데이터 유지에 대해 걱정할 필요 없이 사용 가능한 모든 서버에서 기능을 실행할 수 있으므로 애플리케이션을 수평으로 확장하기가 더 쉽다. 또한 여러 서버에서 상태를 관리하고 동기화할 필요가 없으므로 인프라 관리가 간소화된다.
- 서버리스 컴퓨팅의 장점 : 운영 오버헤드 감소, 확장성 향상, 소량 워크로드에 대한 비용 절감 등
- 서버리스 컴퓨팅의 단점 : 그러나 애플리케이션 설계의 복잡성 증가, 공급업체 종속, 장기 실행, 대용량 워크로드에 대한 잠재적인 성능 문제 등
마이크로서비스와 데이터베이스의 분리
마이크로서비스가 독립적이고 느슨하게 결합되도록 설계되었으며 데이터베이스를 공유하면 서비스 간에 긴밀한 결합이 생성될 수 있기 때문에, 일반적으로 마이크로서비스를 구성할 때 여러 곳에 데이터를 복제하는 것을 의미하더라도 데이터베이스를 분리하는 것이 좋다.
이로 인해 전체 애플리케이션에 영향을 주지 않고 개별 서비스를 수정하거나 교체하기 어려울 수 있습니다. 데이터베이스를 분리함으로써 각 마이크로서비스는 자체 데이터와 스키마를 관리할 수 있으므로 시간이 지남에 따라 애플리케이션을 더 쉽게 발전시키고 확장할 수 있다.