14C. DynamoDB ํ ์ด๋ธ ์์ฑํ๊ธฐ
14C. DynamoDB ํ ์ด๋ธ ์์ฑํ๊ธฐ ๊ด๋ จ
์์์ ์ค๊ณํ DB ๊ตฌ์กฐ๋๋ก ํ ์ด๋ธ์ ์์ฑํ๊ณ , ์ธ๋ฑ์ค๋ฅผ ์ค์ ํด๋ณด๊ฒ ์ต๋๋ค.
์ค๋ฅธ์ชฝ ์์์ DynamoDB์ ๋ฆฌ์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ ์ฒด ์ ์ ์ ์ ์๋ฅผ ์ ์ฅํ ํ ์ด๋ธ ์ด๋ฆ๊ณผ ๊ธฐ๋ณธ ํค๋ฅผ ์ค์ ํฉ๋๋ค
- Table Name: DynamoDB์ ํ ์ด๋ธ ์ด๋ฆ์ ๋๋ค. ๋ฆฌ์ ์์์ ์ค๋ณต๋ ์ ์์ต๋๋ค. ์์ ์ค๊ณํ ๋๋ก UsersLeaderboard๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Primary Key Type: ํด์ ๊ธฐ๋ณธ ํค์ ๋ฒ์ ๊ธฐ๋ณธ ํค ๋๋ ํด์ ๊ธฐ๋ณธ ํค๋ง ์ฌ์ฉํ๋ ์ต์ ์ ๋๋ค. Hash and Range๋ฅผ ์ ํํฉ๋๋ค.
- Hash Attribute Name: ํด์ ๊ธฐ๋ณธ ํค์ ์์ฑ(Attribute) ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ํ์์ ๋๋ค. Number๋ฅผ ์ ํํ๊ณ Id๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Range Attribute Name: ๋ฒ์ ๊ธฐ๋ณธ ํค์ ์์ฑ ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ํ์์ ๋๋ค. String์ ์ ํํ๊ณ Week๋ฅผ ์ ๋ ฅํฉ๋๋ค.
์ฃผ๊ฐ ์ ์ฒด์์๋ฅผ ์ฐ์ถํ ๊ธ๋ก๋ฒ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- Index Type: ๋ณด์กฐ ์ธ๋ฑ์ค ํ์ ์ ๋๋ค. Global Secondary Index๋ฅผ ์ ํํฉ๋๋ค.
- Index Hash Key: ์ธ๋ฑ์ค ํด์ ํค์ ์์ฑ ์ด๋ฆ์ ๋๋ค. String์ ์ ํํ๊ณ Week๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Index Range Key: ์ธ๋ฑ์ค ๋ฒ์ ํค์ ์์ฑ ์ด๋ฆ์ ๋๋ค. Number๋ฅผ ์ ํํ๊ณ TopScore๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Index Name: ์์ฑ๋ ์ธ๋ฑ์ค์ ์ด๋ฆ์ ๋๋ค. ํด์ ํค์ ๋ฒ์ ํค์ ์์ฑ ์ด๋ฆ์ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Projected Attributes: ์ฟผ๋ฆฌ๋ฅผ ํ์ ๋ ๊ฐ์ ธ์ฌ ์์ฑ์
๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.<!-
- All Attributes: ์์ดํ ์ ๋ชจ๋ ์์ฑ์ ๊ฐ์ ธ์ต๋๋ค.
- Table and Index Keys: ํ ์ด๋ธ ์ธ๋ฑ์ค์ ๋ณด์กฐ ์ธ๋ฑ์ค์ ํค๋ก ์ค์ ํ ์์ฑ๋ง ๊ฐ์ ธ์ต๋๋ค.
- Specify Attributes: ํน์ ์์ฑ๋ง ๊ฐ์ ธ์ต๋๋ค. ๊ฐ์ ธ์ฌ ์์ฑ ์ด๋ฆ์ ์ถ๊ฐํ ์ ์๊ณ , ๋ณด์กฐ ์ธ๋ฑ์ค์ ํค๋ก ์ค์ ํ ์์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค.
๊ฐ์ธ ์ต๊ณ ๊ธฐ๋ก์ ์กฐํํ ๋ก์ปฌ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- Index Type: ๋ณด์กฐ ์ธ๋ฑ์ค ํ์ ์ ๋๋ค. Local Secondary Index๋ฅผ ์ ํํฉ๋๋ค.
- Index Hash Key: ๋ก์ปฌ ๋ณด์กฐ ์ธ๋ฑ์ค๋ ํ ์ด๋ธ ์ธ๋ฑ์ค์ ํด์ ๊ธฐ๋ณธ ํค์ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- Index Range Key: ์ธ๋ฑ์ค ๋ฒ์ ํค์ ์์ฑ ์ด๋ฆ์ ๋๋ค. Number๋ฅผ ์ ํํ๊ณ TopScore๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Index Name: ์์ฑ๋ ์ธ๋ฑ์ค์ ์ด๋ฆ์ ๋๋ค. ๋ฒ์ ํค์ ์์ฑ ์ด๋ฆ์ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Projected Attributes: ์ฟผ๋ฆฌ๋ฅผ ํ์ ๋ ๊ฐ์ ธ์ฌ ์์ฑ์
๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- All Attributes: ์์ดํ ์ ๋ชจ๋ ์์ฑ์ ๊ฐ์ ธ์ต๋๋ค.
- Table and Index Keys: ํ ์ด๋ธ ์ธ๋ฑ์ค์ ๋ณด์กฐ ์ธ๋ฑ์ค์ ํค๋ก ์ค์ ํ ์์ฑ๋ง ๊ฐ์ ธ์ต๋๋ค.
- Specify Attributes: ํน์ ์์ฑ๋ง ๊ฐ์ ธ์ต๋๋ค. ๊ฐ์ ธ์ฌ ์์ฑ ์ด๋ฆ์ ์ถ๊ฐํ ์ ์๊ณ , ๋ณด์กฐ ์ธ๋ฑ์ค์ ํค๋ก ์ค์ ํ ์์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค.
DynamoDB ์ฒ๋ฆฌ๋ ๋จ์์ธ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋ ์ ๋์ ์ค์ ํฉ๋๋ค.
- Help me calculate how much throughput capacity I need to provision: ์ด ๋ถ๋ถ์ ์ฒดํฌํ๋ฉด ํ๊ท ๋ฐ์ดํฐ ํฌ๊ธฐ์ ์ด๋น ์ฝ๊ณ ์ด ์์ดํ ์๋ฅผ ์ ๋ ฅํ์ฌ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋ ์ ๋์ ๊ณ์ฐํ ์ ์์ต๋๋ค.
- Read Capacity Units: ์ฝ๊ธฐ ์ฉ๋ ์ ๋์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Write Capacity Units: ์ฐ๊ธฐ ์ฉ๋ ์ ๋์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Throughput Capacity Allocation: ์์ฑ๋ ๋ณด์กฐ ์ธ๋ฑ์ค์๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋ ์ ๋์ ์ค์ ํ ์ ์์ต๋๋ค(๊ฐ ์ซ์๋ฅผ ํด๋ฆญํ๋ฉด ๊ฐ์ ์์ ํ ์ ์์ต๋๋ค). ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
DynamoDB๋ฅผ ์ฌ์ฉํ๋ค๊ฐ ์ค์ ํ ์ ์ฒด ์ฒ๋ฆฌ๋์์ ์ผ์ ๋น์จ ์ด์์ ๋์ด์๋ฉด ์๋์ ๋ฐ์์ํฌ ์ ์์ต๋๋ค(๊ทธ๋ฆผ 14-13).
- Use Basic Alarms: ๊ธฐ๋ณธ ์๋ ์ฌ์ฉ ์ต์ ์ ๋๋ค. ์ด๋ฒ ์ค์ต์์๋ ์ฒดํฌ๋ฅผ ํด์ ํ์ฌ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- 60๋ถ ๋์ ์ ์ฒด ์ฒ๋ฆฌ๋์์ ์ด๋ ์ ๋ ๋น์จ์ ๋์ด์๋ฉด ์๋์ ๋ฐ์์ํฌ์ง ์ค์ ํ๋ ์ต์ ์ ๋๋ค. 95%, 90%, 85%, 80%, 75%๋ฅผ ์ ํํ ์ ์์ผ๋ฉฐ 80%๊ฐ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
- Send notification to: ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ ๋ ฅํ์ฌ ์๋์ ๋ด์ฉ์ ๋ฐ์ ์ ์์ต๋๋ค. ์ด ๋ถ๋ถ์ SNS(Simple Notification Service)์ ์ฐ๊ณ๋ฉ๋๋ค.
์์ธํ ์กฐ๊ฑด์ ์๋์ CloudWatch์์ ์ค์ ํ ์ ์์ต๋๋ค.
์ง๊ธ๊น์ง ์ค์ ํ ๋ด์ฉ์ ์ด์์ด ์๋์ง ํ์ธํฉ๋๋ค.
DynamoDB ํ
์ด๋ธ ๋ชฉ๋ก์ UsersLeaderboard
ํ
์ด๋ธ์ด ์์ฑ๋์์ต๋๋ค. ์ฒ์์๋ Status๊ฐ CREATING์ผ๋ก ๋์ค๋ฉฐ ์์ ํ ์์ฑ๋๊ธฐ๊น์ง ์ฝ 10์ด ์ ๋ ์์๋ฉ๋๋ค.
์ด์ ์ฃผ๊ฐ ์น๊ตฌ ์์ ์ฐ์ถ์ ์ํด FriendsLeaderboard
ํ
์ด๋ธ์ ์์ฑํฉ๋๋ค.
์ ์ ์ ์น๊ตฌ์ ์ ์๋ฅผ ์ ์ฅํ ํ ์ด๋ธ ์ด๋ฆ๊ณผ ๊ธฐ๋ณธ ํค๋ฅผ ์ค์ ํฉ๋๋ค.
- Table Name: DynamoDB์ ํ ์ด๋ธ ์ด๋ฆ์ ๋๋ค. ๋ฆฌ์ ์์์ ์ค๋ณต๋ ์ ์์ต๋๋ค. ์์ ์ค๊ณํ ๋๋ก FriendsLeaderboard๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Primary Key Type: ํด์ ๊ธฐ๋ณธ ํค์ ๋ฒ์ ๊ธฐ๋ณธ ํค ๋๋ ํด์ ๊ธฐ๋ณธ ํค๋ง ์ฌ์ฉํ๋ ์ต์ ์ ๋๋ค. Hash and Range๋ฅผ ์ ํํฉ๋๋ค.
- Hash Attribute Name: ํด์ ๊ธฐ๋ณธ ํค์ ์์ฑ(Attribute) ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ํ์์ ๋๋ค. Number๋ฅผ ์ ํํ๊ณ Id๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Range Attribute Name: ๋ฒ์ ๊ธฐ๋ณธ ํค์ ์์ฑ ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ํ์์ ๋๋ค. String์ ์ ํํ๊ณ FriendIdAndWeek๋ฅผ ์ ๋ ฅํฉ๋๋ค.
์ฃผ๊ฐ ์น๊ตฌ ์์๋ฅผ ์ฐ์ถํ ๊ธ๋ก๋ฒ ๋ณด์กฐ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- Index Type: ๋ณด์กฐ ์ธ๋ฑ์ค ํ์ ์ ๋๋ค. Global Secondary Index๋ฅผ ์ ํํฉ๋๋ค.
- Index Hash Key: ์ธ๋ฑ์ค ํด์ ํค์ ์์ฑ ์ด๋ฆ์ ๋๋ค. String์ ์ ํํ๊ณ FriendIdAndWeek๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Index Range Key: ์ธ๋ฑ์ค ๋ฒ์ ํค์ ์์ฑ ์ด๋ฆ์ ๋๋ค. Number๋ฅผ ์ ํํ๊ณ Score๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- Index Name: ์์ฑ๋ ์ธ๋ฑ์ค์ ์ด๋ฆ์ ๋๋ค. ํด์ ํค์ ๋ฒ์ ํค์ ์์ฑ ์ด๋ฆ์ ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Projected Attributes: ์ฟผ๋ฆฌ๋ฅผ ํ์ ๋ ๊ฐ์ ธ์ฌ ์์ฑ์
๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.<!-
- All Attributes: ์์ดํ ์ ๋ชจ๋ ์์ฑ์ ๊ฐ์ ธ์ต๋๋ค.
- Table and Index Keys: ํ ์ด๋ธ ์ธ๋ฑ์ค์ ๋ณด์กฐ ์ธ๋ฑ์ค์ ํค๋ก ์ค์ ํ ์์ฑ๋ง ๊ฐ์ ธ์ต๋๋ค.
- Specify Attributes: ํน์ ์์ฑ๋ง ๊ฐ์ ธ์ต๋๋ค. ๊ฐ์ ธ์ฌ ์์ฑ ์ด๋ฆ์ ์ถ๊ฐํ ์ ์๊ณ , ๋ณด์กฐ ์ธ๋ฑ์ค์ ํค๋ก ์ค์ ํ ์์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค.
DynamoDB ์ฒ๋ฆฌ๋ ๋จ์์ธ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋ ์ ๋์ ์ค์ ํฉ๋๋ค.
- Help me calculate how much throughput capacity I need to provision: ์ด ๋ถ๋ถ์ ์ฒดํฌํ๋ฉด ํ๊ท ๋ฐ์ดํฐ ํฌ๊ธฐ์ ์ด๋น ์ฝ๊ณ ์ด ์์ดํ ์๋ฅผ ์ ๋ ฅํ์ฌ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋ ์ ๋์ ๊ณ์ฐํ ์ ์์ต๋๋ค.
- Read Capacity Units: ์ฝ๊ธฐ ์ฉ๋ ์ ๋์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Write Capacity Units: ์ฐ๊ธฐ ์ฉ๋ ์ ๋์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
- Throughput Capacity Allocation: ์์ฑ๋ ๋ณด์กฐ ์ธ๋ฑ์ค์๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฉ๋ ์ ๋์ ์ค์ ํ ์ ์์ต๋๋ค(๊ฐ ์ซ์๋ฅผ ํด๋ฆญํ๋ฉด ๊ฐ์ ์์ ํ ์ ์์ต๋๋ค). ๊ธฐ๋ณธ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํฉ๋๋ค.
DynamoDB๋ฅผ ์ฌ์ฉํ๋ค๊ฐ ์ค์ ํ ์ ์ฒด ์ฒ๋ฆฌ๋์์ ์ผ์ ๋น์จ ์ด์์ ๋์ด์๋ฉด ์๋์ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
- Use Basic Alarms: ๊ธฐ๋ณธ ์๋ ์ฌ์ฉ ์ต์ ์ ๋๋ค. ์ด๋ฒ ์ค์ต์์๋ ์ฒดํฌ๋ฅผ ํด์ ํ์ฌ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- 60๋ถ ๋์ ์ ์ฒด ์ฒ๋ฆฌ๋์์ ์ด๋ ์ ๋ ๋น์จ์ ๋์ด์๋ฉด ์๋์ ๋ฐ์์ํฌ์ง ์ค์ ํ๋ ์ต์ ์ ๋๋ค. 95%, 90%, 85%, 80%, 75%๋ฅผ ์ ํํ ์ ์์ผ๋ฉฐ 80%๊ฐ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
- Send notification to: ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ ๋ ฅํ์ฌ ์๋์ ๋ด์ฉ์ ๋ฐ์ ์ ์์ต๋๋ค. ์ด ๋ถ๋ถ์ SNS(Simple Notification Service)์ ์ฐ (์์ธํ ์กฐ๊ฑด์ ์๋์ CloudWatch์์ ์ค์ ํ ์ ์์ต๋๋ค.)
์ง๊ธ๊น์ง ์ค์ ํ ๋ด์ฉ์ ์ด์์ด ์๋์ง ํ์ธํฉ๋๋ค.
DynamoDB ํ ์ด๋ธ ๋ชฉ๋ก์์ FriendsLeaderboard ํ ์ด๋ธ์ด ์์ฑ๋์์ต๋๋ค. ์ฒ์์๋ Status๊ฐ CREATING์ผ๋ก ๋์ค๋๋ฐ ์์ ํ ์์ฑ๋๊ธฐ๊น์ง ์ฝ 10์ด ์ ๋ ์์๋ฉ๋๋ค.