serverless-data-1

AWS 서버리스 데이터 분석 시스템 아키텍쳐

아래 유튜브 영상을 보고 관심이 생겨 글을 작성하게 되었다.

서버리스 데이터 분석 시스템 구축 | Part 1. 개념 및 워크 플로우

  • Sungmin Kim.
  • Solutions Architect, AWS

데이터로 어떤 작업을?

  • 네트워크 분석
  • 추천
  • 머신러닝
  • 그 외…

What is Architecting

어떤 문제를 풀기위해서 다양한 방법들이 있을텐데, 다양한 장단점들을 Trade-off 해서 밸런싱하는것이 아키텍팅의 중심이라고 생각할 수 있다.

꼭 어떤 방법론이나 적용법이 가장 좋은 방법이라고 단정지을 순 없다.

데이터

데이터만 가지고 가치가 있는것이 아니라 데이터를 가지고 원하는 결과 및 인사이트를 내기위하여 과정들이 필요하다.

3+1 Vs of Big Data

과거에 비해서 분석시스템이 만들기가 더 어려워졌을까?

그것은 빅데이터의 4가지 특성

  • 어마어마게 커진 Volume
  • 생산되는 속도의 차이 Velocity
  • 데이터의 다양성 Variety
  • 원하는 가치 Value

이런 복잡성 때문에 현대에 와서는 데이터분석 시스템이 복잡해지고 구축해지기 어려운 점이 있다.

Structured, Unstructred, and Semi-Structured

데이터의 다양한 모양 및 구조

Data Structured

  • Structred Data
    • RDB에 잘 정의되있는 데이터
  • Unstructred Data
    • 동영상, 텍스트 데이터
  • Semi-Structured Data
    • CSV 데이터, JSON 데이터

Data Temperature Spectrum

Data Spectrum

  • Hot data
    • 빠른 빈도로 데이터 요청
    • 응답시간이 빨라야 함
    • 데이터의 양은 적음
    • In-Memory DB 사용

예시) 세션값 요청

  • Cold data
    • 많은 양의 데이터 요청
    • 응답시간은 좀 높아도 괜찮음

예시) 연말에 정산된 데이터

  • Warm data
    • 상시적으로 사용하는 데이터
    • 적당한 응답시간

모든 데이터를 동일한 스토리지, 분석 솔루션으로 처리하기 보다는 목적에 맞는 데이터의 온도에 따라 나누어서 적용하는게 바람직하다.

Simpilfy Big Data Processing

Data Spectrum

아주 단순한 과정을 표현하자면

  1. 데이터 수집
  2. 데이터 저장
  3. 분석 및 프로세싱
  4. 데이터 소비 및 활용

중요한 점

  • 데이터의 처리 속도
  • 데이터의 볼륨의 처리 가능량
  • 전체적인 프로세스의 비용

Business Intelligence System

Business Intelligence System

CRM & CDC

주기적으로 변경되는 데이터 저장

WEB

쇼핑몰 등에서 클릭하는 데이터등을 저장

IoT

사물 인터넷의 센서 데이터를 모아서 저장

다음에..

다음글에서 실제 AWS 서비스 아키텍쳐를 구성하는 방안들에대해 설명이 나오는데 해당 내용으로 글을 이어나가도록 하겠다.

serverless-stack

Docs SST

서버리스 스택(SST)은 서버리스 앱을 쉽게 구축할 수 있는 프레임워크라고 소개되어 있다.

2021-10-24일 기준으로 현재 SST는 JavaScript, TypeScript, Python, Golang 및 C#을 지원하고 있다.

Language CDK Lambda
JavaScript
TypeScript
Go Coming soon
Python Coming soon
C# Coming soon
F# Coming soon

SST 프레임워크를 사용하면 앱에서 필요한 인프라스트럭쳐를 코드로(AWS CDK 사용) 정의하고, AWS Lambda 함수를 보다 간편하게 구성할 수 있다.

디자인 원리

SST는 몇가지 핵심 원리를 가지고 설계된 프레임워크이다.

  • 점진적 공개
  • 구조의 설정
  • 권한 부여
  • 제로베이스 구성

점진적 공개

서버리스 앱을 구축하기 위해 SST가 제공 하는 구성은 점진적 공개 라는 아이디어를 기반으로 한다.
기본 구성이 간단하고 이해하기 쉬우며 환경파악에 용이하며, 더 복잡한 사용 사례에 대해 점진적으로 사용자가 쉽게 지정할 수 있는 장점이 있다.

구조의 설정

Api Routes에 간단한 예시

1
2
3
4
5
6
new Api(this, "Api", {
routes: {
"GET /notes": "src/list.main",
"POST /notes": "src/create.main",
},
});

이러한 형태는 정의한것을 쉽게 이해할 수 있다. 만약 커스텀한 함수 속성이 필요하다면 아래와 같이 추가할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
new Api(this, "Api", {
defaultFunctionProps: {
srcPath: "src/",
environment: { tableName: table.tableName },
},
routes: {
"GET /notes": {
function: {
handler: "list.main",
srcPath: "services/functions/",
},
},
"POST /notes": "create.main",
},
});

권한 부여

SST는 attaching function을 통해 권한을 부여한다.

아래 cronjob 설정에 대한 예를 살펴보자

1
2
3
4
const cron = new Cron(this, "Cron", {
schedule: "rate(1 minute)",
job: "src/lambda.main",
});

cronjob에 대한 접근권한을 부여에 대한 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// cronjob 함수에 모든 접근권한 부여
cron.attachPermissions(PermissionType.ALL);

// 특정 리소스에만 접근권한 부여
cron.attachPermissions(["s3"]);

import { PolicyStatement, Effect } from "@aws-cdk/aws-iam";

// IAM 정책으로 권한부여
cron.attachPermissions([
new PolicyStatement({
actions: ["execute-api:Invoke"],
effect: Effect.ALLOW,
resources: [
`arn:aws:execute-api:${region}:${account}:${api.httpApiId}/*`,
],
}),
]);

제로베이스 구성

SST를 프레임워크가 탄생한 가장 큰 이유 중 하나는 서버리스 개발 환경이 항상 부족하다고 느꼈기 때문이라고 한다.

  • 부족한 점
    • Live Lambda Development 가 해결하려고 하는 긴밀한 피드백 루프가 부족
    • 여러 플러그인, Webpack, Babel, TypeScript, 테스트 프레임워크, 린터 등을 구성해야 함
    • 설정은 종종 깨지기 쉽고 최신 상태를 유지하기 위해 별도의 프로젝트 유지 관리자에 의존

위에 부족한 점들로 인해 Serverless 환경에 많은 경험이 있는 개인 개발자라면 괜찮겠지만 더 큰 팀의 일원이거나 이제 막 서버리스를 시작하는 경우 개발 환경을 시작하고 실행하는 것이 매우 어려운 점 발생한다.

SST의 설계 원칙 중 하나는 개발 환경이 기본적으로 작동하는지 확인하는 것이며, 구성이 거의 또는 전혀 필요하지 않는것이 핵심 원칙이다.

Quick Start

Node 환경에서 아래 명령어로 빠르게 SST 프로젝트를 생성할 수 있다.

1
2
3
4
5
6
7
8
9
# Create your app
npx create-serverless-stack@latest my-sst-app
cd my-sst-app

# Start Live Lambda Development
npx sst start

# Deploy to prod
npx sst deploy --stage prod