서버를 직접적으로 관리하지 않는 컴퓨팅 방식
클라우드 제공 업체가 서버 인프라를 관리하고, 개발자는 함수 단위로 애플리케이션을 작성해 애플리케이션을 개발, 배포하는 방식
소프트웨어 아키텍처 디자인 패턴 중 하나
큰 애플리케이션을 작은 단위의 독립적인 서비스로 분할하여 개발, 배포한다
각 서비스는 독립적인 DB와 서버를 갖고, 서로 간의 통신은 API를 통한다 >> 개별 서비스의 장애가 전체 시스템에 큰 영향X
각 서비스가 특정 프로그래밍 언어나 DB에 의존하지 않기 때문에 혼합해서 사용 가능하다
컴포넌트란? 독립적으로 대체하거나 업그레이드할 수 있는 소프트웨어 단위
컴포넌트화란? 시스템을 컴포넌트로 나누고 이를 연결하여 구축하는 것
| 라이브러리 | 서비스 | |
|---|---|---|
| 특징 | 프로그램 안에서 링크되어 메모리 상에서 함수 호출을 한다 | 개별적인 프로세스로, 각 프로세스가 HTTP 혹은 RPC로 통신한다 |
| 배포 편의성 | 전체 응용 프로그램을 재배포 해야한다 | 서비스 단위로만 재배포 가능하다 |
| 컴포넌트간 결합 | 강하다. 프로그램을 작성할 때에는 라이브러리의 코딩 규칙을 따라야하므로 강한 결합이 생긴다. | 약하다. 원격 호출 메커니즘을 사용하므로 종속 및 결합을 방지한다 |
| 호출 비용 | 적다. 프로그램 내에서 링크되어 있고, 메모리 상에서 호출한다. | 높다. 원격 호출, 종종 네트워크를 통해 호출하므로 비용이 높다 |
항상 마이크로 아키텍쳐가 필요한 건 아니다
| Level 0 | Level 1 | Level 2 | Level 3 | |
|---|---|---|---|---|
| 애플리케이션 아키텍처 | 모놀리식 | 서비스 지향 통합 | 서비스 지향 애플리케이션 | API 중심 |
| 데이터베이스 | 엔터프라이즈 DB | 엔터프라이즈DB + NoSQL, 경량 DB | 다중언어를 지원하는 폴리글랏, 서비스로서의 DB | Data Lake, 준실 시간 분석 |
| 인트라스트럭처 | 물리 서버 | 가상화 | 클라우드 | 컨테이너 |
| 모니터링 | 인트라스트럭처 | 애플리케이션 + 인트라스트럭처 | 애플리케이션 퍼포먼스(APM) | APM + 중앙화된 로그 관리 시스템 |
| 개발 프로세스 | 워터폴 | 애자일 & CI | CI &* CD | DevOps |
경로와 엔드포인트로 구성되어 정의된 HTTP 서버
각 API 요청의 관문 역할을 한다
각 경로는 해당 경로를 처리하는 리소스와 연결된다
API Gateway의 요청 수신 > 요청과 일치하는 라우터 구성 탐색 > 관련된 FaaS 호출
마이크로 서비스 아키텍처를 연결하는 중간 다리 역할을 담당
MSA의 핵심 기능
MSA는 개발, 배포, 유지관리를 쉽게 할 수 있게 만들지만 클라이언트의 빠르고 안전한 액세스를 어렵게 만들 수 있다.
API Gateway는 빠르고 안전한 액세스를 돕는다
AWS가 제공하는 서버리스 FaaS 솔루션
함수의 인스턴스를 실행하여 이벤트를 처리한다
자체 서버 시스템이나 수명이 긴 서버 애플리케이션을 관리하지 않고 백엔드 코드를 실행하는 것
런타임에 대한 사전 준비가 필요하지 않다
수평적 확장이 완전 자동 & 탄력적 & 공급자가 관리
상태 및 실행 기간과 관련하여 상당한 아키텍처 제한이 있다
서버를 프로비저닝하거나 관리할 필요 없이 작성한 코드를 백엔드 서비스로써 배포할 수 있게 한다
이벤트 트리거만 정의해주면 된다
높은 가용성을 제공한다
람다에서 실행하는 코드
각 함수에는 이름, 설명, 진입점, 리소스 요구 등 구성 정보가 포함된다
Stateless 스타일로 작성되어야 함
람다 함수를 호출하는 리소스 혹은 구성