Serverless - low-hill/Knowledge GitHub Wiki

์„œ๋ฒ„๋ฆฌ์Šค๋ž€?

์„œ๋ฒ„๋ฆฌ์Šค๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์šฐ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ ์‹คํ–‰ ๋ชจ๋ธ์ด๋‹ค. ์„œ๋ฒ„๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜๋Š” ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์„œ๋ฒ„๋ฆฌ์Šค ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์œ ํœด ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋น„์šฉ ์ฒญ๊ตฌ๋Š” ์ฝ”๋“œ ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๋ฉด ์‹œ์ž‘๋˜๊ณ  ์‹คํ–‰์„ ๋ฉˆ์ถ”๋ฉด ์ข…๋ฃŒ๋˜๊ณ , ์ผ๋ฐ˜์ ์œผ๋กœ ์‹คํ–‰ ์‹œ๊ฐ„ ๋ฐ ์š”๊ตฌ๋˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ€๊ฒฉ์ด ์ฑ…์ •๋œ๋‹ค.

์„œ๋ฒ„๋ฆฌ์Šค ์„œ๋น„์Šค ์œ ํ˜•

  • functions / code execution (Lambda)
  • APIs (API Gateway)
  • Databases (Aurora DB, DynamoDB)
  • Object storage (S3)
  • orchestration (CloudWatch events, CICD with CodePipeline, CodeBuild, AI, SageMaker)

์„œ๋ฒ„๋ฆฌ์Šค ์žฅ์ 

  • ์‹ค์ œ ์‚ฌ์šฉ๋Ÿ‰์— ๋Œ€ํ•ด์„œ๋งŒ ๋น„์šฉ์ด ์ฒญ๊ตฌ๋˜๋ฏ€๋กœ ๊ฒฝ์ œ์ 
  • ์ธํ”„๋ผ ๊ด€๋ฆฌ๊ฐ€ ์•„๋‹Œ ์ฝ”๋“œ ์ž‘์„ฑ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ์ž ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
  • ๊ฐ„๋‹จํ•œ ํŒจํ‚ค์ง• ๋ฐ ๋ฐฐํฌ

์„œ๋ฒ„๋ฆฌ์Šค ๋‹จ์ 

  • ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„(Cold-Start)์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ ๋А๋ฆฌ๋‹ค. ๋น ๋ฅธ ์‘๋‹ต์ด ํ•„์š”ํ•œ ์ œํ’ˆ์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„๋ฆฌ์Šค๋Š” ์ข‹์€ ์„ ํƒ์ด ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค.

AWS Lambda

AWS Lambda๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ์ปดํ“จํŒ… ์„œ๋น„์Šค๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. Lambda ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ํ• ๋‹นํ•˜๋ฉฐ, ์‹คํ–‰ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๊ณผ๊ธˆ๋œ๋‹ค. ์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ถ€ ๋˜๋Š” ์ „์ฒด๋ฅผ ํด๋ผ์šฐ๋“œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ๊ด€๋ฆฌ ์ž‘์—…์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

Lambda Layer

Lambda Layer๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ๋ฐ ๊ตฌ์„ฑ ๊ณต์œ ๋Š” Lambda ํ•จ์ˆ˜์˜ [๋ณต์žก์„ฑ์„ ์ค„์ด๋Š”] ๋ฐ ์ค‘์š”ํ•œ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
AWS Lambda๋Š” ์ธํ”„๋ผ ๊ตฌ์ถ• ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Lambda ํ•จ์ˆ˜๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์€ ์ฝ”๋“œ ํŒŒ์ผ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋งŽ์€ ๋ฆฌ์†Œ์Šค์™€ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ํŠนํžˆ ๋ณต์žก์„ฑ์„ ๊ฐ€์ง„ ์„œ๋ฒ„๋ฆฌ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์—…ํ•  ๋•Œ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AWS Lambda Layer๋Š” ๊ณตํ†ต ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Lambda ํ•จ์ˆ˜์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ณต์žก์„ฑ์„ ์ค„์ž…๋‹ˆ๋‹ค.

Lambda Step Function

multi-page user workflows์—์„œ state machines์€ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ํŠน์ • ์ˆœ์„œ๋กœ ์ž‘๋™ํ•˜๊ณ  ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ถœ๋ ฅ์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. AWS๋Š” ์ด๋Ÿฌํ•œ ์š”๊ตฌ๋ฅผ ๊ณตํ†ต ํŒจํ„ด์œผ๋กœ ์ธ์‹ํ•˜๊ณ  Step Functions๋ฅผ ์†”๋ฃจ์…˜์œผ๋กœ ์ œ์‹œํ–ˆ๋‹ค.
AWS Step Functions๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ state machines์„ ํ†ตํ•ด Lambda ํ•จ์ˆ˜์˜ ๋ฐฐํฌ ๋ฐ ์‚ฌ์šฉ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ „ํ†ต์ ์ธ ๋ฌธ์ œ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. AWS ๋Œ€์‹œ๋ณด๋“œ์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•œ ํ•จ์ˆ˜ ๋””์ž์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Step Function ๊ธฐ๋ฐ˜ ์ƒํƒœ ๋จธ์‹ ์„ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜, Amazon States Language๋ฅผ ํ†ตํ•ด ์‹ฌ๋„ ์žˆ๋Š” ์„ค์ •๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
image

Event-driven solutions

AWS Lambda๋Š” ์˜จ๋””๋งจ๋“œ ์ธํ”„๋ผ๋กœ, ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋กœ ์ž‘๋™ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ด๋ฒคํŠธ๋Š” ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹œ์Šคํ…œ ํ™œ๋™ ์•Œ๋ฆผ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ด๋ฒคํŠธ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ Data-driven ์ด๋ฒคํŠธ, ์•Œ๋ฆผ ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ, ๊ทธ๋ฆฌ๊ณ  ๋ช…ํ™•ํ•œ ๋ฒ”์ฃผ์— ์†ํ•˜์ง€ ์•Š๋Š” ๊ธฐํƒ€ ์œ ํ˜•์˜ ์ด๋ฒคํŠธ๋กœ ๋‚˜๋ˆ„์–ด ๊ธฐ์ˆ ํ•œ๋‹ค.

Data-driven event source

Data-driven event๋Š” ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์šด์˜ํ•˜๋Š” ์†Œ์Šค์—์„œ ์ œ๊ณต๋˜๊ณ , ์ด ๋ฐ์ดํ„ฐ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ parameters์˜ ์บ์‹œ๋œ ์ง‘ํ•ฉ, ์—…๋ฐ์ดํŠธ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” S3์— ์ƒˆ ํŒŒ์ผ์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋“ค์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์€ AWS Lambda๋ฅผ ์œ„ํ•œ ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฐ์ดํ„ฐ ์Šคํ† ์–ด๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ํ™œ๋™์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ธฐ์— ์•„๋ž˜์—์„œ๋Š” Lambda์™€ ํ†ตํ•ฉ๋˜๋Š” ๋‹ค์„ฏ ๊ฐ€์ง€ ์ธ๊ธฐ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ์†Œ์Šค๋ฅผ ๋‹ค๋ฃฌ๋‹ค.

1. Amazon RDS

์ฒซ ๋ฒˆ์งธ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค์ธ Amazon RDS์ด๋‹ค. ์ด ์ด๋ฒคํŠธ ์†Œ์Šค๋Š” Amazon RDS์— ํ˜ธ์ŠคํŒ…๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ™œ๋™์— ๋ฐ˜์‘ํ•ฉ๋‹ˆ๋‹ค. RDS ์„œ๋น„์Šค๋Š” Simple Notification Service(SNS)์— ์•Œ๋ฆผ์„ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ • AWS Lambda ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ™œ๋™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

2. Amazon DynamoDB

Amazon DynamoDB๋Š” ๋ฐ์ดํ„ฐ ํ™œ๋™์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ AWS Lambda ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” NoSQL ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ํ™œ๋™์€ DynamoDB Streams์— ์บก์ฒ˜๋˜๋ฉฐ, ์—ฌ๊ธฐ์—๋Š” DynamoDB ํ…Œ์ด๋ธ”์˜ item-level์—์„œ ์ œ๊ณต๋˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์˜ ์‹œ๊ฐ„ ์ˆœ์„œ ์‹œํ€€์Šค๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค. ์ด ์ •๋ณด๋Š” ์ตœ๋Œ€ 24์‹œ๊ฐ„ ๋™์•ˆ ๋กœ๊ทธ์— ์ถ”๊ฐ€๋กœ ์ €์žฅ๋˜์–ด ๋ฐ์ดํ„ฐ์˜ transition state๋ฅผ ์บก์ฒ˜ํ•  ์ˆ˜ ์žˆ๋‹ค. DynamoDB Streams์™€ AWS Lambda๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ NoSQL ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ์˜ ํ™œ๋™์— ๋”ฐ๋ผ ๋™์ ์ธ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

3. Amazon S3

Amazon Simple Storage Service๋Š” ๋ชจ๋“  ์ˆ˜์ค€์˜ ์›น ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์Šคํ† ๋ฆฌ์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ œ๊ณตํ•œ๋‹ค. Amazon S3๋Š” ํŠน์ • S3 ๋ฒ„ํ‚ท ๋‚ด์—์„œ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ ์‹œ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ AWS Lambda์™€ ๋™์ ์œผ๋กœ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋น„๋””์˜ค ํŠธ๋žœ์Šค์ฝ”๋” ๋ฐ ๋กœ๊ทธ ๋ณ€ํ™˜๊ธฐ์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ํŒŒ์ผ ๊ด€๋ฆฌ flow๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. Amazon Kinesis Data Streams

์ดˆ๋‹น ์ˆ˜์ฒœ ๊ฐœ์˜ ์†Œ์Šค์—์„œ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์ฒ˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ Amazon Kinesis Data Streams(Amazon KDS)์™€ ๊ฐ™์€ ๊ณ ์šฉ๋Ÿ‰ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. Amazon KDS์˜ ๋†’์€ ํ™•์žฅ์„ฑ์€ ์‚ฌ์šฉ์ž ํ–‰๋™ ๋ฐ ๊ธฐํƒ€ ํ™œ๋™ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ์‹ค์‹œ๊ฐ„ ๋ถ„์„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ, ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋Œ€์‹œ๋ณด๋“œ, ์‚ฌ๊ธฐ ํƒ์ง€ ์‹œ์Šคํ…œ ๋“ฑ์œผ๋กœ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AWS Lambda๋Š” ์ด flow์— ๋™๊ธฐ์‹์œผ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธํ•˜์—ฌ ๊ตฌ์„ฑ๋œ ์†Œ์Šค์˜ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์— ๋™์ ์œผ๋กœ ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด„๋กœ ์ฝ๊ณ  ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํžˆ ์ˆ˜์ง‘ํ•˜๊ณ  ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

5. Amazon ElastiCache

ElastiCache๊ฐ€ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ๊ฒ€์ƒ‰์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ์‰ฝ๊ฒŒ ์บ์‹ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. AWS Lambda๋Š” ElastiCache ์‹œ์Šคํ…œ์˜ ์ด๋ฒคํŠธ์— ์‘๋‹ตํ•˜์—ฌ ํ•„์š”ํ•  ๋•Œ ์บ์‹œ ์ด๋ฒคํŠธ์— ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

Notification-driven

Notification-driven์„ ํ†ตํ•ด ์ƒ๋‹นํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋“ค์˜ ์ฃผ์š” ๋ชฉ์ ์€ ํ•œ ์‹œ์Šคํ…œ์—์„œ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ ์ •๋ณด๋ฅผ ๋ผ์šฐํŒ…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์•Œ๋ฆผ ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ์†Œ์Šค ์ค‘ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” Amazon API Gateway, Amazon SES, Amazon SNS, Amazon SQS ๋“ฑ ๋„ค ๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ณธ๋‹ค.


Lambda Architecture

image Lambda์˜ ๋‚ด๋ถ€ ์ž‘๋™ ๋ฐฉ์‹์— ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  • Frontend Service: Lambda ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ, rontend Service๊ฐ€ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์„ ์ ์ ˆํ•œ data plane services๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ  ํ˜ธ์ถœ ํ”„๋กœ์„ธ์Šค์˜ ์ดˆ๊ธฐ ๋‹จ๊ณ„๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค
  • Worker Hosts and MicroVMs: Lambda๋Š” Firecracker์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ˆ˜๋งŽ์€ MicroVM์„ ๊ด€๋ฆฌํ•˜๋Š” worker hosts๋กœ ์šด์˜๋ฉ๋‹ˆ๋‹ค. ๊ฐ MicroVM์€ ๋‹จ์ผ ํ•จ์ˆ˜ ํ˜ธ์ถœ์— ์ „์šฉ์œผ๋กœ ํ• ๋‹น๋˜์–ด ๊ฒฉ๋ฆฌ๋˜๊ณ  ์•ˆ์ „ํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์—ฌ๋Ÿฌ worker hosts๊ฐ€ ๋™์ผํ•œ Lambda ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค์ •์€ ๊ณ ๊ฐ€์šฉ์„ฑ๊ณผ ๊ฐ•๋ ฅํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ œ๊ณตํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€์šฉ ์˜์—ญ์— ๊ฑธ์ณ ์„œ๋น„์Šค์˜ ํ™•์žฅ์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค
  • Firecracker: Firecracker๋Š” Lambda ์•„ํ‚คํ…์ฒ˜์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ์— ๋Œ€ํ•ด ๊ฒฝ๋Ÿ‰ํ™”๋˜๊ณ  ์•ˆ์ „ํ•œ MicroVMs์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ Lambda ํ•จ์ˆ˜์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ ๋ฆฌ์†Œ์Šค๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ํ• ๋‹น๋˜๊ณ  ํ™•์žฅ๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค
  • Internal Queueing in Lambda: ๋น„๋™๊ธฐ ํ˜ธ์ถœ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ, AWS Lambda๋Š” ๋‚ด๋ถ€ ํ์ž‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ Lambda ํ•จ์ˆ˜๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ๋•Œ, ์ด๋“ค์€ ๋จผ์ € ์ด ๋‚ด๋ถ€ ํ์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ์€ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋งˆ์ดํฌ๋กœVM์— ํšจ์œจ์ ์œผ๋กœ ๋ถ„๋ฐฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ํ๋Š” ํŠนํžˆ ์ˆ˜์š” ๊ธ‰์ฆ์ด๋‚˜ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ Lambda ํ•จ์ˆ˜์˜ ์›ํ™œํ•œ ์šด์˜์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Lambda ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๊ณ ๋„ ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜์˜ ๋ฒ„์ „๋ณ„ ๊ตฌ์„ฑ์— ์ €์žฅ๋˜๋Š” ๋ฌธ์ž์—ด ์Œ์ด๋‹ค. Lambda ๋Ÿฐํƒ€์ž„์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ , ํ•จ์ˆ˜ ๋ฐ ํ˜ธ์ถœ ์š”์ฒญ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ์ถ”๊ฐ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•œ๋‹ค.
image

์ฐธ๊ณ : ๋ณด์•ˆ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ API ํ‚ค ๋˜๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ํ† ํฐ๊ณผ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด AWS Secrets Manager๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. (์ž์„ธํ•œ ๋‚ด์šฉ์€ AWS Secrets Manager๋กœ ์‹œํฌ๋ฆฟ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐ)

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „์— ํ‰๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค. ์ •์˜ํ•œ ๋ชจ๋“  ๊ฐ’์€ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ์ทจ๊ธ‰๋˜๋ฉฐ ํ™•์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.


Scaling

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๋‚ ์˜ ๋ถ€ํ•˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŠธ๋ž˜ํ”ฝ์ด ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ์— ๋Œ€๋น„ํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  • ์ˆ˜์ง์  ํ™•์žฅ์œผ๋กœ ํ•ด๊ฒฐ [Scale Up]

๊ธฐ์กด ์„œ๋ฒ„์— ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” ๋” ๋น ๋ฅธ CPU๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ˆ˜์ง์ ์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์šดํƒ€์ž„ ์—†์ด ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ๋Š” ์‰ฝ์ง€ ์•Š๋‹ค.

  • ์ˆ˜ํ‰์  ํ™•์žฅ์œผ๋กœ ํ•ด๊ฒฐ [Scale Out]

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋” ๋งŽ์ด ๋ฐฐํฌํ•˜๊ณ  ์ธ์Šคํ„ด์Šค ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜์—ฌ ์ˆ˜ํ‰์ ์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ธ์Šคํ„ด์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์˜ค์ž‘๋™ํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋กœ ์›Œํฌ๋กœ๋“œ๋ฅผ ์†์‰ฝ๊ฒŒ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋‹ค์šดํƒ€์ž„ ์—†์ด ๋” ์‰ฝ๊ฒŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํŠธ๋ž˜ํ”ฝ์— ๋”ฐ๋ฅธ ๋ฆฌ์†Œ์Šค ์ž๋™ ํ™•์žฅ [Auto Scaling]

๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋น„์šฉ์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์š”๊ธˆ์ด ์ฆ๊ฐ€ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค. ๋‹คํ–‰ํžˆ๋„ ํŠธ๋ž˜ํ”ฝ์— ๋”ฐ๋ผ ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฉ”ํŠธ๋ฆญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•œ๊ณ„์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ์˜ˆ์ธกํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Auto Scaling

Amazon AWS ECS์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์ž๋™ ํ™•์žฅ ์œ ํ˜•์ด ์žˆ๋‹ค.

  • Cluster Auto Scaling

Amazon ECS๋Š” Application Auto Scaling ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ Auto Scaling๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • Service auto scaling

Reference