DynamoDB ๋์ ๊ธฐ (๋ถ์ : ์ฌ์ฉ์ค์ธ ์คํ์์ค์ ๋ฒ๊ทธ ์์ ํ๊ธฐ 2ํ)
- #wonderwall
- #fromm
- #DynamoDB
- #Dynamoose
- #NoSQL
- #ORM
- #opensource
๋ค์ด๊ฐ๋ฉฐ
์๋ ํ์ธ์. ๋ ธ๋จธ์ค์์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๊ณ ์๋ ์ ์๊ธฐ์ ๋๋ค.
ํ์ฌ์ ์ฑ์ฅ๊ณผ ๋๋ถ์ด, ํธ๋ํฝ ์ฆ๊ฐ๋ก ๋๋ฉ์ธ์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ(DB) ๋ถ๋ฆฌ๋ฅผ ๊ณ ๋ฏผํ๋ ์ํฉ์ด ๋๋ํ์ต๋๋ค. ๋ ธ๋จธ์ค ์ฃผ์์๋น์ค์ธ fromm ๋ฉ์์ง ์๋น์ค์ ํฅํ ๊ธฐ๋ฐ ๊ธฐ์ ํ๋ณด๋ ๊ฐ์ด ๊ณ ๋ คํ์ฌ, ์ธ์ฆ์๋ฒ๋ฅผ ๋ถ๋ฆฌํ๋ฉด์ DynamoDB(NoSQL)๋ฅผ ๋์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์์ต๋๋ค.
๊ฐ๋ฐ
์ค๋น
- ์์ฃผ ์ ์ฉํ๋ ์๋ฃ
- https://www.youtube.com/watch?v=1nE609C6-SI : Amazon DynamoDB๋ก ๊ตฌํํด๋ณด๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- https://www.youtube.com/watch?v=I7zcRxHbo98 : Amazon DynamoDB ํค ๋์์ธ ํจํด
MongoDB์ ๋ํด ์ฝ๊ฐ์ ๊ฒฝํ์ด ์์์ง๋ง, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก paradigm ๋ณํ๋ DB์์๋ ํ์๊ฐ์ ์ ๋ฆฌ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํนํ, ์ฑ๊ธ ํ
์ด๋ธ ๋์์ธ์ด๋ผ๊ณ ํ๋ ๊ฒ์ ์ฌ์ ์๋ฃ ์์ด RDB์ ์ฌ๊ณ ์์๋ ์ ๊ฐ๋๊ธฐ ์ด๋ ค์ ์ ๊ฐ๋
๊ฐ์ต๋๋ค.
(๊ทธ๋์ ์ ๋ ์์์ ๊ผญ ๋ณด์ธ์.)
์ง๋์ ๋ฌผ๊ผฌ๋ฅผ ํ์ด ๊ฒ์ด ํค ๋์์ธ ํ์ฌ์ดํด ์ค์ ๋ชจ๋ ๋ฐ์ดํฐ ์ก์ธ์ค ํจํด ์ ๋ฆฌํ๊ธฐ ์์ต๋๋ค.
AWS Solutions Architect ๊ป์๋ ์ธ๊ธํ์ง๋ง, ์ฐฝ์
์ด๊ธฐ ๋น์ฆ๋์ค์ ์๊ตฌ์ฌํญ์ด ์์ฃผ ๋ณํ ๋์๋ RDB์ ์ฌ์ฉ์ ๊ถํ๊ณ ,
๋ฐ์ดํฐ ์ก์ธ์ค ํจํด์ด ์ ํด์ง๊ณ ํธ๋ํฝ์ด ์ฆ๊ฐํ ๋, DynamoDB ๊ฐ์ NoSQL์ ๊ฒํ ๊ฐ ์ ์ฉํ ๊ฒ ๊ฐ์ต๋๋ค.
์ค๊ณ
AWS์ ๊ถ๊ณ ์ ๋ฐ๋ผ, partition key๋ pk
, sort key๋ sk
๋ก ์ ํ์๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก Secondary Index๋ ์ฌ์ฉํ์ง ์๋ ๋ฐฉํฅ์ผ๋ก ์ค๊ณํ์ต๋๋ค.
๋ฐฑ์๋ํ์๋ค ๋ชจ๋๊ฐ DynamoDB์ Partition ์ ์ฝ์กฐ๊ฑด ๋ฐ Capability, ๋น์ฉ, ๋ณตํฉํค ๋ฑ์ ๊ณต๋ถํ๊ณ , ๊ฐ์๊ฐ ์ธ์ฆ์๋ฒ์ DynamoDB ํ
์ด๋ธ์ ์ค๊ณํด ์์, ๋
ผ์ ํ๋ ์๋ฆฌ๋ฅผ ๋ง๋ จํ์์ต๋๋ค.
์ด ํ์์์ ์ข
ํฉ๋ ๊ตฌ์กฐ๋ก DynamoDB์ ํ
์ด๋ธ์ ์ ํ์์ต๋๋ค.
(์ด ๊ณผ์ ์์ AWS ์ ๊ณตํ๋ DynamoDB์ฉ NoSQL Workbench๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.)
๊ตฌํ
์ค๊ณ ๊ณผ์ ์์๋ถํฐ ์ง์ Data type, ์ง์ Command, ์ง์ ์ฐ์ฐ์ ๋ฑ์ ์กฐ์ฌํด ๋ณด์๊ณ , ํนํ ๋ณตํฉํค์ BEGINS_WITH
, BETWEEN
์ฐ์ฐ์ ํ์ฉ์ด ํฅ๋ฏธ๋ก์์ต๋๋ค.
์ ๋ ฌ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๋ ๋ชจ๋ฒ ์ฌ๋ก
DynamoDB ORM์ ๋ํด ์๊ฒ ๊ฒ์ํด ๋ณด๊ณ , ๋์ค์ ์ธ๊ฒ ์๋ค๋ ์๊ฐ์ ์ฒ์์๋ AWS SDK๋ก Service Layer๋ฅผ ๋ง๋ค์๋ค๊ฐ,
์๋ก ์
์ฌํ์ ์ ํ๋๊ป์ Dynamoose ์กด์ฌ๋ฅผ ์๋ ค์ฃผ์
์ ORM์ ์ ์ฉํ์๋๋ฐ, ๊ธฐ์กด RDB์์ TypeORM์ ์ฌ์ฉํ๊ณ ์๋ฏ์ด, ์น์ํ๊ณ ์ฝ๋๋ ๊น๋ํด ์ก์ต๋๋ค.
๊ทธ๋ฐ๋ฐ, ์ด ๊ณผ์ ์์ Dynamoose ORM์ ๋ฒ๊ทธ๊ฐ ๋ฐ๊ฒฌ๋์์ต๋๋ค.
์ ํฌ๋ ๊ฐ stage์ ๋ฐ๋ผ WAS & DB ์๋ฒ๊ฐ ๋ถ๋ฆฌ๋์ด ์๊ณ , DynamoDB๋ AWS ๋์ผ ๊ณ์ ์์ ํ
์ด๋ธ๋ช
์ผ๋ก stage๋ฅผ ๊ตฌ๋ถํ๋๊ฒ ์ ์ ํ๋ค๋ ํ๋จ์
https://dynamoosejs.com/guide/Table ์์ ์ ๊ณตํ๋ prefix ํน์ suffix ์ต์
์ ์ฌ์ฉํ์๋๋ฐ,
transaction ์์์๋ tableName
์ prefix
ํน์ suffix
๊ฐ ์ ์ฉ๋์ง ์๋ ํ์์ด ๋ฐ๊ฒฌ๋์์ต๋๋ค.
๊ทธ๋์ ์ฐ์ ์ prefix
ํน์ suffix
์ต์
์ ์ฌ์ฉํ์ง ์๊ณ , tableName
์์ฒด๋ฅผ stage์ ๋ฐ๋ผ ์ค์ ํ์์ต๋๋ค.
์ดํ, ์ ์ด์ ๋ธ๋ก๊ทธ ๊ธ(์ฌ์ฉ์ค์ธ ์คํ์์ค์ ๋ฒ๊ทธ ์์ ํ๊ธฐ)์ ์ถ์ฒ ์ฒ๋ผ ์คํ ์์ค repository์ ๋ฐฉ๋ฌธํ์ฌ, PR ์ ๋ฐํํ์์ต๋๋ค.
๊ฐ์ ์ฌํญ์ v3.3.0 ์ ๋ฆด๋ฆฌ์ฆ ๋์๊ณ , ํ์ฌ ์ ํฌ๋ ์ด ๊ฐ์ ์ด ํฌํจ๋ v4.0.0 ์ผ๋ก prefix
ํน์ suffix
์ต์
์ ์ค์ ํ์ฌ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ง์น๋ฉฐ
DynamoDB ์ด์ ๋ถํฐ NoSQL์ ์ ์ง์ ์ผ๋ก ์ ํด ์์ง๋ง, ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ๋๋ ๋ถ๋ถ์ ๊ทธ๋ฆผ์ผ๋ก ํํํด ๋ณด์์ต๋๋ค.
ETL(Extract, Transform, Load) ๊ด์ ์ผ๋ก ๋ณผ๋, ๋ฐ์ดํฐ ์ ์ฅ ์์ ์ ๋ฐ๋ผ ์ ์ ํ DB๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ ๋๋จ์ ์๊ฒ ๋์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.