๊ด€๋ฆฌ ๋ฉ”๋‰ด

Hey Tech

AWS Lambda๋ฅผ ํ™œ์šฉํ•œ DyanamoDB ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์กฐํšŒ ๋ฐฉ๋ฒ• ๋ณธ๋ฌธ

SW ๊ฐœ๋ฐœ/Amazon Web Service

AWS Lambda๋ฅผ ํ™œ์šฉํ•œ DyanamoDB ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์กฐํšŒ ๋ฐฉ๋ฒ•

Tony Park (ํ† ๋‹ˆ) 2022. 6. 24. 16:44
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ‘จ‍๐Ÿ’ป ๋“ค์–ด๊ฐ€๋ฉฐ

๋ณธ ํŠœํ† ๋ฆฌ์–ผ์„ ์ž˜ ๋”ฐ๋ผ์˜ค์‹œ๋ฉด AWS Lambda์—์„œ DynamoDB ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๊ฐ€์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

  • AWS DynamoDB
  • AWS Lambda (Runtime: Python 3.6)
  • AWS IAM

๐Ÿ“š ๋ชฉ์ฐจ

1. AWS DynamoDB ์„ธํŒ…
    1.1. DynamoDB ๊ฐœ๋…
    1.2. DynamoDB ํ…Œ์ด๋ธ” ์ƒ์„ฑ
2. AWS IAM ์„ธํŒ…
    2.1. IAM ๊ฐœ๋…
    2.2. IAM Role ๊ฐœ๋…
    2.2. IAM Role ์ƒ์„ฑ
3. AWS IAM ์„ธํŒ…
    3.1. Lambda ๊ฐœ๋…
    3.2. Lambda ํ•จ์ˆ˜ ์ƒ์„ฑ
    3.3. Lambda ์ฝ”๋“œ
4. ํ…Œ์ŠคํŠธ
    4.1. ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋กœ์ง ํ…Œ์ŠคํŠธ
    4.2. ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋กœ์ง ํ…Œ์ŠคํŠธ

1. AWS DynamoDB ์„ธํŒ…

1.1. DynamoDB ๊ฐœ๋…

AWS DynamoDB๋Š” Key-Value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” AWS์˜ NoSQL ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. DynamoDB๋Š” ๊ทœ๋ชจ์™€ ์ƒ๊ด€์—†์ด ๋Œ€๋ถ€๋ถ„ 10ms ๋‚ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์ฒ˜๋ฆฌํ•  ๋งŒํผ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค๋ผ๋Š” ํฐ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, DB์˜ ์šฉ๋Ÿ‰์ด๋‚˜ ํŠธ๋ž˜ํ”ฝ์ด ๋Š˜์–ด๋‚˜๋ฉด AWS์—์„œ ์•Œ์•„์„œ ์Šค์ผ€์ผ๋ง ํ•ด์ฃผ๋ฉฐ, DB ๋ฐฑ์—…๋„ ์•Œ์•„์„œ ํ•ด์ค๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉํ•œ ์šฉ๋Ÿ‰์— ๋Œ€ํ•ด์„œ๋งŒ ๊ณผ๊ธˆ์„ ๋ถ€๊ณผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„์šฉ ์ตœ์ ํ™”์—๋„ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

1.2. DynamoDB ํ…Œ์ด๋ธ” ์ƒ์„ฑ

1) DynamoDB ์ฝ˜์†” ์ ‘๊ทผ

AWS ๊ฒ€์ƒ‰์ฐฝ์— DynamoDB๋ฅผ ๊ฒ€์ƒ‰ํ•˜์…”์„œ ์ฝ˜์†”์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆผ 1).

๊ทธ๋ฆผ 1. DynamoDB ์ฝ˜์†” ์ ‘๊ทผ

2) ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฒ„ํŠผ ํด๋ฆญ

ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆผ 2).

๊ทธ๋ฆผ 2. ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฒ„ํŠผ ํด๋ฆญ

3) ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์˜ต์…˜ ์„ค์ •

ํ…Œ์ด๋ธ” ์ด๋ฆ„, ํŒŒํ‹ฐ์…˜ ํ‚ค, ์ •๋ ฌ ํ‚ค๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆผ 3). ๊ธฐ๋ณธ ํ‚ค(Primary Key)์ธ ํŒŒํ‹ฐ์…˜ ํ‚ค(Partition Key)๋Š” ๋ฐ˜๋“œ์‹œ ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ ์ •๋ ฌ ํ‚ค(Sort Key)๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 3. ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์˜ต์…˜: ํ…Œ์ด๋ธ” ์ด๋ฆ„, ํŒŒํ‹ฐ์…˜ ๋ฐ ์ •๋ ฌ ํ‚ค

  • ํŒŒํ‹ฐ์…˜ ํ‚ค(Partition Key)
    • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•œ ์žฅ์น˜๋กœ์จ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฒน์น˜๊ฑฐ๋‚˜ null, undefined ๊ฐ’ ํ• ๋‹น ๋ถˆ๊ฐ€(e.g., ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ)
    • Hash ์†์„ฑ์œผ๋กœ Hash Key๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ '๊ฐ™๋‹ค' ํ˜น์€ '๊ฐ™์ง€ ์•Š๋‹ค'์™€ ๊ฐ™์€ ์—ฐ์‚ฐ๋งŒ ๊ฐ€๋Šฅ
    • ๊ธฐ๋ณธ ํ‚ค, Primary Key๋ผ๊ณ ๋„ ๋ถ€๋ฆ„
  • ์ •๋ ฌ ํ‚ค(Sort Key)
    • Range ์†์„ฑ์œผ๋กœ Sort Key๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ ๋น„๊ต๋Œ€์†Œ ํ˜น์€ '~๋กœ ์‹œ์ž‘ํ•˜๋Š”'๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ๋งŒ ๊ฐ€๋Šฅ
    • DynamoDB์—์„œ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ

๋‚˜๋จธ์ง€๋Š” ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ๋‘๊ณ  ๋งจ ์•„๋ž˜์— ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ์ง€๋‚˜๋ฉด ์•„๋ž˜์˜ ๊ทธ๋ฆผ 4์™€ ๊ฐ™์ด Table์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 4. ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์™„๋ฃŒ

2. AWS IAM ์„ธํŒ…

2.1. IAM ๊ฐœ๋…

IAM์€ Identity and Access Management์˜ ์•ฝ์ž๋กœ, ํŠน์ • ์‚ฌ์šฉ์ž๋‚˜ ๊ทธ๋ฃน์˜ ์„œ๋น„์Šค ํ˜น์€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. IAM ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์•„๋ž˜์˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด ์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
https://heytech.tistory.com/391?category=559266

 

AWS IAM ์‚ฌ์šฉ์ž ๋ฐ ๋ฃจํŠธ ์‚ฌ์šฉ์ž ๊ฐœ๋… ์ •๋ฆฌ

๐Ÿ“š ๋ชฉ์ฐจ 1. ๋ฃจํŠธ ์‚ฌ์šฉ์ž์˜ ๊ฐœ๋… 2. IAM ์‚ฌ์šฉ์ž์˜ ๊ฐœ๋… ๐Ÿ‘จ‍๐Ÿ’ป ๋“ค์–ด๊ฐ€๋ฉฐ ์•„๋งˆ์กด์›น์„œ๋น„์Šค(AWS)์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด 2๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ๊ณ„์ •์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆผ 1 ์ฐธ๊ณ ). ๋ฃจํŠธ ๊ณ„์ • IAM ๊ณ„์ • ๋ณธ ํฌ์ŠคํŒ…์—์„œ๋Š” 2

heytech.tistory.com

2.2.  IAM Role ๊ฐœ๋…

IAM Role(์—ญํ• )์€ ํŠน์ • AWS ์„œ๋น„์Šค์˜ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ณด์•ˆ ์ฆ๋ช…์„œ์ž…๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, AWS ๋‚ด ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๊ฒฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

2.3. IAM Role ์ƒ์„ฑ

1) IAM ์ฝ˜์†” ์ ‘๊ทผ

๊ฒ€์ƒ‰์ฐฝ์— IAM์„ ๊ฒ€์ƒ‰ํ•˜์…”์„œ IAM ์ฝ˜์†”์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆผ 5).

๊ทธ๋ฆผ 5. IAM ์ฝ˜์†” ์ ‘๊ทผ

2) ์—ญํ•  ์ƒ์„ฑ

์•„๋ž˜์˜ ๊ทธ๋ฆผ 6์ฒ˜๋Ÿผ, ์ขŒ์ธก์— "์—ญํ• " ํ…์ŠคํŠธ๋ฅผ ํด๋ฆญํ•˜์‹  ํ›„, ์šฐ์ธก์— "์—ญํ•  ๋งŒ๋“ค๊ธฐ" ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”.

๊ทธ๋ฆผ 6. ์—ญํ•  ์ƒ์„ฑ

3) Lamda ์„ ํƒ

์•„๋ž˜์˜ ๊ทธ๋ฆผ 7์ฒ˜๋Ÿผ, ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” Lambda๋ฅผ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ Lambda๋ฅผ ์„ ํƒํ•œ ํ›„, ํ•˜๋‹จ์— "๋‹ค์Œ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 7. Lambda ์„ ํƒ

4) ๊ถŒํ•œ ์ถ”๊ฐ€

์•„๋ž˜์˜ ๊ทธ๋ฆผ 8์ฒ˜๋Ÿผ, ๊ฒ€์ƒ‰์ฐฝ์— dynamodb๋ฅผ ์ž…๋ ฅ ํ›„ ์—”ํ„ฐ๋ฅผ ์น˜์‹ ํ›„, ์•„๋ž˜์— AmazonDyanmoDBfullAccess ๊ถŒํ•œ์„ ์ฒดํฌํ•˜์‹œ๊ณ  ์•„๋ž˜์— "๋‹ค์Œ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 8. ๊ถˆํ•œ ์ถ”๊ฐ€

5) ์—ญํ•  ์ด๋ฆ„ ์„ค์ •

์•„๋ž˜์˜ ๊ทธ๋ฆผ 9์ฒ˜๋Ÿผ, ์—ญํ•  ์ด๋ฆ„์„ ์„ค์ •ํ•˜์‹  ํ›„์— ๋งจ ํ•˜๋‹จ์— "์—ญํ•  ์ƒ์„ฑ"์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 9. ์—ญํ•  ์ด๋ฆ„ ์„ค์ •

3. AWS Lambda ์„ธํŒ…

3.1. Lambda ๊ฐœ๋…

AWS Lambda๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฝ”๋“œ(=ํ•จ์ˆ˜)๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ปดํ“จํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Serverless ์ปดํ“จํŒ… ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋ฅผ ๋‹ค๋ฅธ ๋ง๋กœ "trigger ๋˜์—ˆ์„ ๋•Œ" ๋˜๋Š” "ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ"๋ผ๊ณ ๋„ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, 24์‹œ๊ฐ„ ์„œ๋ฒ„๊ฐ€ ๋Œ์•„๊ฐ€๋Š” AWS EC2์™€ ๋‹ฌ๋ฆฌ, AWS Lambda๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ๋งŒ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. AWS Lambda์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ฐœ๋…, ์žฅ๋‹จ์ , ์‚ฌ์šฉ๋ชฉ์ ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์œผ์‹  ๋ถ„์€ ์•„๋ž˜์˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.
https://heytech.tistory.com/397

 

AWS Lambda ๊ฐœ๋…, ์žฅ๋‹จ์ , ์‚ฌ์šฉ๋ชฉ์ 

๐Ÿ“š ๋ชฉ์ฐจ 1. ๊ฐœ๋… 2. ์žฅ๋‹จ์  3. ์‚ฌ์šฉ๋ชฉ์  ์ฐธ๊ณ ์ž๋ฃŒ 1. ๊ฐœ๋… Amazon Web Service(AWS) Lambda๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฝ”๋“œ(=ํ•จ์ˆ˜)๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ปดํ“จํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Serverless ์ปดํ“จํŒ… ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค(๊ทธ๋ฆผ 1

heytech.tistory.com

3.2. Lambda ํ•จ์ˆ˜ ์ƒ์„ฑ

1) Lambda ์ฝ˜์†” ์ ‘๊ทผ

AWS ํ™ˆํŽ˜์ด์ง€ ๊ฒ€์ƒ‰์ฐฝ์—์„œ Lambda๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ Lambda ์ฝ˜์†”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆผ 10).

๊ทธ๋ฆผ 10. Lambda ์ฝ˜์†” ์ ‘๊ทผ

2) Lambda ํ•จ์ˆ˜ ์ƒ์„ฑ

"ํ•จ์ˆ˜ ์ƒ์„ฑ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆผ 11).

๊ทธ๋ฆผ 11. ํ•จ์ˆ˜ ์ƒ์„ฑ

3) Lambda ํ•จ์ˆ˜ ์ƒ์„ฑ ์˜ต์…˜

์•„๋ž˜์˜ ๊ทธ๋ฆผ 12์ฒ˜๋Ÿผ ์•„๋ž˜์˜ ์˜ต์…˜์„ ์„ ํƒํ•˜์‹  ํ›„ ๋งจ ํ•˜๋‹จ์— "ํ•จ์ˆ˜ ์ƒ์„ฑ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜ ์ด๋ฆ„: ์ง๊ด€์ ์œผ๋กœ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑ
  • ๋Ÿฐํƒ€์ž„: Python 3.6
  • ์‹คํ–‰ ์—ญํ• : "๊ธฐ์กด ์—ญํ•  ์‚ฌ์šฉ" ์„ ํƒ ํ›„ ์•ž์„œ ์ƒ์„ฑํ•œ IAM Role์„ ์„ ํƒ(DynamoDBfullAccess)

๊ทธ๋ฆผ 12. Lambda ํ•จ์ˆ˜ ์ƒ์„ฑ

3.2. Lambda ์ฝ”๋“œ

1) ์ „์ฒด ์ฝ”๋“œ

import boto3
from datetime import datetime

class DatabaseAccess():
    def __init__(self, TABLE_NAME):
        # DynamoDB ์„ธํŒ…
        self.dynamodb = boto3.resource('dynamodb')
        self.table = self.dynamodb.Table(TABLE_NAME)
    
    def get_data(self):
        res = self.table.scan()
        items = res['Items'] # ๋ชจ๋“  item
        count = res['Count'] # item ๊ฐœ์ˆ˜
        return items, count
    
    def put_data(self, input_data):
        self.table.put_item(
            Item =  input_data
        )
        print("Putting data is completed!")

def lambda_handler(event, context):
    
    db_access = DatabaseAccess('resultTable')
    
    if event['Method'] == 'POST':
        input_data = {
        "userID" : event['userID'],
        "date"   : event['date']
        }
        db_access.put_data(input_data)
    
    elif event['Method'] == 'GET':
        items, count = db_access.get_data()
        print(f"items: {items}, count: {count}")
    
    else:
        print("Confirm the method!")
        
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('This is Hey Tech Blog!')
    }

2) ์ฝ”๋“œ ์„ค๋ช…

(1) ํŒจํ‚ค์ง€ import

import boto3
from datetime import datetime
  • boto3
    • AWS ์„œ๋น„์Šค ์•ก์„ธ์Šค์šฉ ํŒจํ‚ค์ง€
  • datetime
    • ์‹œ๊ฐ„ ์ •๋ณด ์ถœ๋ ฅ์šฉ

(2) DB Access ํด๋ž˜์Šค

class DatabaseAccess():
    def __init__(self, TABLE_NAME):
        # DynamoDB ์„ธํŒ…
        self.dynamodb = boto3.resource('dynamodb')
        self.table = self.dynamodb.Table(TABLE_NAME)
    
    def get_data(self):
        res = self.table.scan()
        items = res['Items'] # ๋ชจ๋“  item
        count = res['Count'] # item ๊ฐœ์ˆ˜
        return items, count
    
    def put_data(self, input_data):
        self.table.put_item(
            Item =  input_data
        )
        print("Putting data is completed!")
  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜
    • ์ƒ์ˆ˜ TABLE_NAME: Access ํ•  DynamoDB ํ…Œ์ด๋ธ” ์ด๋ฆ„
  • get_data ํ•จ์ˆ˜
    • ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  item ๋ฐ item ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
  • put_data ํ•จ์ˆ˜
    • ํ…Œ์ด๋ธ”์— ์ „๋‹ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

(3) main ํ•จ์ˆ˜

def lambda_handler(event, context):
    
    db_access = DatabaseAccess('resultTable')
    
    if event['Method'] == 'POST':
        input_data = {
        "userID" : event['userID'],
        "date"   : event['date']
        }
        db_access.put_data(input_data)
    
    elif event['Method'] == 'GET':
        items, count = db_access.get_data()
        print(f"items: {items}, count: {count}")
    
    else:
        print("Confirm the method!")
        
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('This is Hey Tech Blog!')
    }
  • db_access
    • ์•ž์„œ ์„ ์–ธํ•œ DB Access ํด๋ž˜์Šค ๊ฐ์ฒด ์ƒ์„ฑ
    • Access ํ•  Table ์ด๋ฆ„ ์ „๋‹ฌ
  • Method == POST
    • ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋กœ์ง
  • Mehtod == GET
    • ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋กœ์ง
  • default (Mehtod != POST and Method != GET)
    • ์ง€์ •ํ•œ method์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

4. ํ…Œ์ŠคํŠธ

๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด Lambda ์ฝ˜์†”์—์„œ ์•„๋ž˜์˜ ๊ทธ๋ฆผ 13์ฒ˜๋Ÿผ, "ํ…Œ์ŠคํŠธ" ํƒญ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 13. ํ…Œ์ŠคํŠธ ํƒญ ์ด๋™

4.1. ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋กœ์ง ํ…Œ์ŠคํŠธ

1) ์ด๋ฒคํŠธ ์ƒ์„ฑ

๋จผ์ €, ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋กœ์ง ํ…Œ์ŠคํŠธ ์ด๋ฒคํŠธ๋ฅผ ์•„๋ž˜์˜ ๊ทธ๋ฆผ 14์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 14. ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ด๋ฒคํŠธ ์ƒ์„ฑ

POST Method์ž„์„ ๋ช…์‹œํ•˜์—ฌ, ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋กœ์ง์„ ์‹คํ–‰์‹œํ‚ค๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ ํŒŒํ‹ฐ์…˜ ํ‚ค์™€ ์ •๋ ฌ ํ‚ค ๊ฐ’์ธ userID์™€ date Key์— ์‚ฝ์ž…ํ•  value๋„ ์ž„์˜๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ์ž…๋ ฅํ•˜์…จ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

2) ๋กœ๊ทธ ํ™•์ธ

๊ทธ๋ฆผ 15. ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋กœ์ง ํ…Œ์ŠคํŠธ์˜ ๋กœ๊ทธ

๊ทธ๋ฆผ 15์™€ ๊ฐ™์ด, ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋กœ์ง์ด ์ˆ˜ํ–‰๋œ ํ›„ ์ถœ๋ ฅํ•˜๋„๋ก ์ž‘์„ฑํ•œ print๋ฌธ์ด ์ž˜ ์‹คํ–‰๋œ ๊ฒƒ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3) DB ํ…Œ์ด๋ธ” ํ™•์ธ

์•„๋ž˜ ๊ทธ๋ฆผ 16๊ณผ ๊ฐ™์ด ์‹ค์ œ๋กœ DynamoDB ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ์‚ฝ์ž…๋œ ๊ฒƒ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 16. ํ…Œ์ด๋ธ” ๋‚ด ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ํ™•์ธ

4.2. ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋กœ์ง ํ…Œ์ŠคํŠธ

1) ์ด๋ฒคํŠธ ์ƒ์„ฑ

๋ฐ์ดํ„ฐ ์กฐํšŒ ๋กœ์ง ์ˆ˜ํ–‰์„ ์œ„ํ•ด Method Key ๊ฐ’์„ GET๋กœ ์„ค์ •ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์‹คํ–‰์‹œ์ผœ ๋ด…๋‹ˆ๋‹ค(๊ทธ๋ฆผ 17).

๊ทธ๋ฆผ 17. ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ด๋ฒคํŠธ ์ƒ์„ฑ

2) ๋กœ๊ทธ ํ™•์ธ

์•„๋ž˜์˜ ๊ทธ๋ฆผ 18์ฒ˜๋Ÿผ, ๋กœ์ง์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์˜€์œผ๋ฉฐ, ๋กœ๊ทธ์— ํ…Œ์ด๋ธ” ๋‚ด ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆผ 18. ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋กœ์ง์˜ ๋กœ๊ทธ ํ™•์ธ

๐Ÿ“Œ ์ฐธ๊ณ ํ•  ๋งŒํ•œ ํฌ์ŠคํŒ…

1. AWS ๊ธฐ๋ฐ˜ ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•
    1)  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (1) React ๊ธฐ๋ฐ˜ Frontend ๊ฐœ๋ฐœ
    2)  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (2) AWS IAM ์—ญํ•  ์ƒ์„ฑ
    3)  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (3) AWS Lambda ์ƒ์„ฑ
    4)  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (4) AWS S3 ์ƒ์„ฑ
    5)  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (5) AWS API Gateway ์ƒ์„ฑ
    6)  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (6) AWS Lambda ํ•จ์ˆ˜ ์ž‘์„ฑ
    7)  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (7) Axios ๊ธฐ๋ฐ˜ API Call
    8)  ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (8) ํŒŒ์ผ ์—…๋กœ๋“œ ํ…Œ์ŠคํŠธ
    9) ํŒŒ์ผ ์—…๋กœ๋“œ ์›น ํŽ˜์ด์ง€ ๊ตฌ์ถ•: (9) AWS S3 ๊ธฐ๋ฐ˜ ์›น ํ˜ธ์ŠคํŒ…

2. AWS ํ™œ์šฉ ํฌ์ŠคํŒ…
    1) AWS Lambda์™€ Docker๋ฅผ ํ™œ์šฉํ•œ ํŒŒ์ผ ์—…๋กœ๋“œ/์ฝ๊ธฐ ์‹œ์Šคํ…œ ๊ตฌํ˜„
    2) AWS Lambda์—์„œ AWS S3 ํŒŒ์ผ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ๋ฒ•
    3) AWS DynamoDB ๊ฐœ๋… ๋ฐ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์ ˆ์ฐจ(ํŒŒํ‹ฐ์…˜ ํ‚ค, ์ •๋ ฌ ํ‚ค ๊ฐœ๋…)
    4) AWS Lambda๋ฅผ ํ™œ์šฉํ•œ DyanamoDB ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์กฐํšŒ ๋ฐฉ๋ฒ•



์˜ค๋Š˜์€ AWS Lambda์—์„œ DynamoDB ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ์ „ ๊ณผ์ •์„ ์†Œ๊ฐœํ•ด ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค.
ํฌ์ŠคํŒ… ๋‚ด์šฉ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๋ณด์™„ํ•  ์ ์ด ์žˆ๋‹ค๋ฉด ์•„๋ž˜์— ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ ์˜ค๋Š˜๋„ ์ฆ๊ฒ๊ณ  ๊ฑด๊ฐ•ํ•œ ํ•˜๋ฃจ ๋ณด๋‚ด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค :)
๊ณ ๋ง™์Šต๋‹ˆ๋‹ค๐Ÿ˜Š

728x90
๋ฐ˜์‘ํ˜•