๋ชฉ์ฐจ
Lambda(๋๋ค)๋?
๋๋ค๋ ์๋ง์กด ์น์๋น์ค์์ ์ ๊ณตํ๋ ์๋ฒ๋ฆฌ์ค ์ปดํจํ ์๋น์ค์ด๋ค.
* ์๋ฒ๋ฆฌ์ค๋? ๋ณ๋์ ์๋ฒ ์ ํ ์์ด ๋ฐ๋ก ์ฝ๋๋ฅผ ์คํํ ์ ์๋ ํ๊ฒฝ์ ๋งํ๋ค.
๋ฐ๋ผ์ ์๋ฒ๋ฅผ ๊ณ์ ๋์ฐ๊ธฐ ๋ณด๋ค, API๋ฅผ ํธ์ถํ ๋๋ง ์๋ฒ๋ฅผ ๋์ํ๊ฒ ํ๊ณ ์ถ์ ๋ ๋๋ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฉํ๋ค!
๋๋ค๋ ์ด๋ป๊ฒ ๋์ํ ๊น?
- ๋๋ค๊ฐ ์คํ์ํฌ ์ ์๋ ์ฝ๋์ฉ๋์ 250MB ์ด๋ค.
- ํจ์ ์คํ์๊ฐ์ ์ต๋ 15๋ถ
- ํ๋์ ๋๋คํจ์๋ ํ๋์ ์คํํ๊ฒฝ(์ปจํ ์ด๋)์์ ์คํ๋๋ค.
- ๋๋ค๋ ํจ์๊ฐ ํธ์ถ๋ ๋ ์๋ก์ด ์ปจํ ์ด๋๋ฅผ ๋์ ์ฒ๋ฆฌํ๋ค.
-> ๊ฐ๋ณ๊ฒ ํ์ฅ์ด ๊ฐ๋ฅํ๋ค.
-> Stateless. = ๋ณ๋์ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค. = DB Connection๋ฑ์ ์ ์งํ ์ ์๋ค.
(๊ฐ๋ ์ ์ผ๋ก๋ ๊ทธ๋ ๋ค.. Warm Start๊ฒฝ์ฐ์ ์ ์งํ ์๋์๋ค..! ์๋๋ด์ฉ ์ฐธ๊ณ )
โ ์ ์ ์๊ฐํด๋ณด์.
0.1์ด๋ง๋ค ์์ฒญ์ด ๋ค์ด์ค๋ ์ํฉ์์, ๋๋ค๋ ๋งค๋ฒ ์๋ก์ด ์ปจํ ์ด๋๋ฅผ ๋์ ์ฒ๋ฆฌํ ๊น?
0.1์ด๋ง๋ค ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ฒ๋๋ฉด ๋ฆฌ์์ค ๋ญ๋น๊ฐ ์ฌํด์ง๋ AWS๋ ๋๋ค๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ์ค์ ํด๋์๋ค.
- ๋๋ค๊ฐ ๋์ํธ์ถ๋๋ฉด ๋นจ๊ฐ๋ถ๋ถ์ฒ๋ผ ๊ฐ๊ฐ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ค.
- 0.1์ด ํ์ ๋๋ค๋ฅผ ํธ์ถํ๋ฉด ์๋ก์ด ์ปจํ ์ด๋๊ฐ ์์ฑ๋๋ ๊ฒ์ด ์๋๋ผ
๋ น์๋ถ๋ถ์ฒ๋ผ ๊ธฐ์กด์ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฌ์ฉํ๊ฒ๋๋ค!
Cold Start VS Warm Start
- AWS๋ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ์ค๋ ํธ์ถ๋์ง ์์ ๋๋ค์ ๋ํ ์ปดํจํ ํ์๋ฅผ ๊บผ๋๋๋ค.
- ๋๋ค๊ฐ ์ต์ด์คํ ๋๊ฑฐ๋, ์ค๋๋ง์ ํธ์ถ๋์์ ๊ฒฝ์ฐ ์ปจํ ์ด๋, ์คํํ๊ฒฝ ๋ฑ์ ๊ตฌ์ฑํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
Cold Start๋ผ๊ณ ํ๋ฉฐ, ์ด๊ฒ์ ๊ฒ ์ค๋นํ๋ ๋งํผ ์๋ต์๋๊ฐ ์ด์ง ๋๋ฆฌ๋ค.
- ๋๋ค๊ฐ ๋น ๋ฅธ์๊ฐ ๋ด์ ๋ค์ ํธ์ถ๋์์ ๊ฒฝ์ฐ, ๊ธฐ์กด ์ปจํ ์ด๋๋ฅผ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ Warm Start๋ผ๊ณ ํ๋ค.
Warm Start์ ๊ฒฝ์ฐ์๋ ์ ์ญ๋ณ์๋ ์ด์ ์ ๋ณ๊ฒฝ๋ ๊ฐ์ ์ ์งํ ์ ์๋ค.
๋น์ฐํ Cold Start๋ณด๋ค ์๋ต์๋๊ฐ ๋น ๋ฅด๋ค
๋๋ค ํจ์ ๊ตฌ์ฑ
// โโ ํธ๋ค๋ฌ ํจ์ ๋ฐ๊นฅ์์ญ์ Cold Start์์๋ง ์คํ๋๋ค.
exports.myHandler = function(event, context, callback){
// ๋ก์ง์ถ๊ฐ
callback(Error error, Object result);
}
- myHandler : ๋๋คํจ์ ์ด๋ฆ
- event : ๋๋ค๋ฅผ ํธ๋ฆฌ๊ฑฐํ ์ด๋ฒคํธ์ ๋ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์.
= ๋๊ฐ ๋๋ค๋ฅผ ์คํ์์ผฐ๋๊ฐ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊น
EX) HTTP๋ก ๋๋ค๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ, event์๋ Http์์ฒญ์ ๋ณด๊ฐ ๋ค์ด์๋ค.
(์ฐธ๊ณ ) event.json ํ์
- context : ๋๋คํจ์๊ฐ ์คํ๋๋ ๋ฐํ์์ ๋ํ ์ ๋ณด. ๋๊ฐ ์คํ์์ผฐ๋๊ฐ์ ๊ตฌ๋ถ์๋ ์ ๋ณด
(์ฐธ๊ณ ) Node.js ํ๊ฒฝ์ context ์์ฑ
- callback : ๋๋คํจ์๊ฐ ๋ชจ๋ ์คํ๋ ํ ๊ฒฐ๊ณผ ๋๋ ์ค๋ฅ์ ํจ๊ป callbackํจ์๋ฅผ ํธ์ถํ๋ค.
๋๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
๋๋ค๊ฐ ์คํ๋ ๋๋ง๋ค DB์ ์ปค๋ฅ์ ์ ๋งบ๊ณ , ํจ์๊ฐ ์ข ๋ฃ๋์๋ค๊ณ ํ์.
DB๋ ๋๋ค๊ฐ ์คํ์ข ๋ฃ๋์๋์ง ์ ์ ์์๊น? ๋ช ์์ ์ผ๋ก ์ปค๋ฅ์ ์ ๋์ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ๋ชจ๋ฅธ๋ค!
๋๋ค ์ปจํ ์ด๋๊ฐ ์ฌ๋ผ์ง๊ธฐ๊น์ง 3๋ถ, DB TTL์ด 15๋ถ์ด๋ผํ์ ๋,
5๋ถ๋ง๋ค ๋๋ค์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋ก์ด ์ปค๋ฅ์ ์ ๊ณ์ ๋งบ์ด์ง๋๋ฐ DB์๋ ๊ธฐ์กด ์ปค๋ฅ์ ์ด ์ข ๋ฃ๋์ง ์์ ์ํ๋ก ๋จ์์๊ฒ๋๋ค.
๊ฒฐ๊ตญ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ์์ ํ๊ณ๊น์ง ๋๋ฌํ๋ฉด ๋ค๋ฅธ ์๋น์ค๋ค์์๋ DB์ ์ ๊ทผํ์ง ๋ชปํ๊ฒ๋๋ค!!
=> ํธ๋ค๋ฌ ๋ด๋ถ์์ DB์ ์ฐ๊ฒฐํ๋ค๋ฉด ์ปค๋ฅ์ ์ ๋ช ์์ ์ผ๋ก ๋์ด์ฃผ์!
๋๋ค๋ ์ํ์๊ฐ * ์์ฒญ์ ๋งํผ ๋น์ฉ์ ์ง๋ถํด์ผํ๋ค.
ํธ๋ค๋ฌ ํจ์ ๋ด๋ถ์์ ์ปค๋ฅ์
์ ๋งบ๊ณ ๋๋๋ค๋ฉด ๊ทธ๋งํผ ์ํ์๊ฐ์ด ๋์ด๋ ๋น์ฉํญํ..์ ๋ง์ ์ ์๋ค.
๊ฐ์ฅ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์
=> ์ปค๋ฅ์
์ ํธ๋ค๋ฌ ํจ์ ์ธ๋ถ์์ ๋งบ์ด Warm Start์ ๊ธฐ์กด์ ๋งบ์๋ ์ปค๋ฅ์
์ ํ์ฉํ๋ ๊ฒ์ด๋ค!
๋๋ค๊ฐ ๋์์ 100๋ฒ ํธ์ถ๋์ด 100๊ฐ์ ์ปจํ
์ด๋๊ฐ ์์ฑ๋๊ณ ๋๋ค ํจ์ ์คํ์ด ์ข
๋ฃ๋์ด๋
์ปจํ
์ด๋๋ ์ผ์ ์๊ฐ๋์ ์ ์ง๋๊ธฐ ๋๋ฌธ์ 1์ด ๋ค 100๊ฐ์ ํธ์ถ์ด ๋ค์ด์๋ ๊ธฐ์กด์ ์ปค๋ฅ์
์ ๊ทธ๋๋ก ํ์ฉํ ์ ์๊ฒ๋๋ค.
๋๋ค Invocation Type
๋๋ค๋ ๋๊ธฐ์ / ๋น๋๊ธฐ์์ผ๋ก ํจ์๋ฅผ ํธ์ถํ ์ ์๋๋ฐ, ์ด๊ฒ์ InvocationType์ผ๋ก ์ค์ ํ ์ ์๋ค.
- RequestResponse
ํจ์๋ฅผ ๋๊ธฐ์ ์ผ๋ก ํธ์ถ
API ์๋ต : ์ํ์ฝ๋ ๋ฐ ์ถ๊ฐ๋ฐ์ดํฐ
Amazon kinesis, DynamoDB Streams, SQS, ALB, API Gateway๋ ๋๋ค๋ฅผ RequestResponse ๋ฐฉ์์ผ๋ก ํธ์ถํ๋ค. - Event
ํจ์๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ํธ์ถ.
API ์๋ต : ์ํ์ฝ๋๋ง ์กด์ฌ.
๐ฅ์๋ต๊ฐ์ด ๋๋คํจ์์ ์ฑ๊ณต์ ์๋ฏธํ๋ 200์ด ์๋ ์์ฒญ ์ ๋ฐ์๋ค!์ 202๊ฐ ๋จ์ด์ง๋ค. ์ ์
๋น๋๊ธฐ ํธ์ถ์ ๊ฒฝ์ฐ, ๋๋ค๋ ์ด๋ฒคํธ๋ฅผ ๋จผ์ Queue์ ๋ฃ๊ณ ์ฌ์ ๊ฐ ์๊ฒผ์ ๋ ๊บผ๋ด์์ ์ฒ๋ฆฌํ๋ค.
์คํจํ ์ด๋ฒคํธ๋ Dead-letter Queues ๋ฅผ ํ์ฑํํด์ผ ํ์ธํ ์ ์๋ค.
Amazon S3, Amazon SNS, EventBridge ๋ฑ์ ๋๋ค๋ฅผ Event ๋ฐฉ์์ผ๋ก ํธ์ถํ๋ค. - DryRun
ํ๋ผ๋ฏธํฐ๊ฐ์ ์ ํจ์ฑ ๊ฒ์ฌ & ํจ์ ํธ์ถ๊ถํ ํ์ธ
๋๋ค์ Invocation Type์ ์๊ณ ์์ผ๋ฉด ํธ๋ฌ๋ธ์ํ ์ด ํจ์ฌ ํธํด์ง๋ค!
์๋๋ฆฌ์ค 1
SQS๊ฐ ๋๋ค๋ฅผ ํธ์ถํ์๋๋ฐ ์คํจํ์๋ค. ๋ฐ์ดํฐ๋ ์ด๋๋ก ๊ฐ์๊น? ๋๋ค๋ ๋ค์ ์คํ๋ ๊น?
-> SQS๋ ๋๋ค๋ฅผ ๋๊ธฐ์ ์ผ๋ก ํธ์ถํ๋ค. ๋ช๋ฒ Retryํ๋ค๊ฐ ์คํจ์๋ต์ ๋ณด๋ด์ค ๊ฒ์ด๋ค.
-> ๋๊ธฐ์ ์ผ๋ก ํธ์ถํ๋ค๊ฐ ์คํจํ ๊ฒ์ด๋ SQS์ชฝ์ด ๋ญ๊ฐ ์๋ชป๋ณด๋ด์ฃผ๊ณ ์๋ ๊ฒ ๊ฐ์๋ฐ?!
์๋๋ฆฌ์ค 2
S3๊ฐ ๋๋ค๋ฅผ ํธ์ถํ์๋๋ฐ ์คํจํ์๋ค. ์ด๋ฒคํธ๋ ์ด๋๋ก๊ฐ๊น? ๋๋ค๋ ๋ค์ ์คํ๋ ๊น?
-> S3๋ ๋๋ค๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ํธ์ถํ๋ค. S3๊ฐ Retryํ๋ค๊ฐ ์ด๋ฒคํธ๊ฐ ์ ์ค๋ ์๋ ์๋ค.-> ๋น๋๊ธฐ์ ์ผ๋ก ํธ์ถํ๋ค๊ฐ ์คํจํ ๊ฒ์ด๋ ๋๋ค๊ฐ ๋ญ๊ฐ ๋ฌธ์ ์๋๊ฒ ๊ฐ์๋ฐ?!
Serverless Framework
๋๋ค๋ฅผ ์คํํ๋ ค๋ฉด ๋งค๋ฒ zipํ์ผ๋ก ์์ถํด์ ์ ๋ก๋ํ๊ณ ์คํ์ํค๊ณ ํ ์คํธํ๊ณ ์คํจํ๊ณ ...๋ฅผ ๋ฐ๋ณตํด์ผํ๋ค
๊ท์ฐฎ์ผ๋ ๋ก์ปฌ์์ ๋๋ค๋ฅผ ์คํ์ํฌ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด Serverless Framework์ด๋ค
๋๋ค ์ฝ๋์ ๋ํ ํ์๊ด๋ฆฌ๋ ํ ์ ์๊ณ , ์ฝ๋์์ค์์ AWS ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ๋๋ค!
์ฐธ๊ณ
https://velog.io/@jdd04026/Lambda
https://www.youtube.com/watch?v=_wDRrFa-6Gc
#AWS #Lambda #๋๋ค #๋๋ค๋ #๋๋ค๋์๋ฐฉ๋ฒ #๋๋คํจ์๊ตฌ์ฑ #๋๋คํน์ง #๋๋ค์คํํ๊ฒฝ #๋๋ค์ปจํ ์ด๋ #coldstart #warmstart #event #context #๋๋ค์๋ฐ์ดํฐ๋ฒ ์ด์ค #๋๋ค๋ฐ์ดํฐ๋ฒ ์ด์ค์ปค๋ฅ์ #๋๋ค์ปค๋ฅ์ #invoke #invocationtype #requestresponse #event #dryrun #serverlessframework #๋๋คํ๋ ์์ํฌ #๋๋ค๋ก์ปฌ์คํ