๋๊ธฐ์ A๋ ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์์ ์ค์น ๋ฐ ์ด์๋๊ณ ์๋ ์ฌ๋ด ์ ๋ณด ์์คํ ์ ํด๋ผ์ฐ๋๋ก ์ด๊ดํ๊ณ ์ ํฉ๋๋ค.
์ฌ๋ด ์ ๋ณด ์์คํ ์ ๊ฐ์ฅ ํฐ ๊ธฐ๋ฅ ์ค ํ๋๋ ๋ฐ๋ก "JWT๋ฅผ ์ด์ฉํ ํตํฉ ์ธ์ฆ ์ ๊ณต"์ ๋๋ค.
ํํธ ๋๊ธฐ์ ์ ํน์ฑ ์, ๊ฐ ๋ถ์๋ง๋ค ๋ณ๋๋ก ์ด์๋๋ ์์คํ ์ด ์กด์ฌํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ๊ณ ๊ด๋ฆฌ ํ์ ์ ํ์ ์ฌ๊ณ ๋ฅผ ์กฐํ/์์ ํ๋ API ์๋ฒ๊ฐ ์กด์ฌํฉ๋๋ค.
์ง๊ธ์ ์ฌ๋ด ์ ๋ณด ์์คํ ์์ ์ฌ๊ณ ๊ด๋ฆฌํ์ ๊ธฐ๋ฅ์ด ๋ชจ๋๋ฆฌํฑ์ผ๋ก ํจ๊ป ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ์กฐ์ง์ ํ์ฅ์ผ๋ก ์์คํ ์ ์ ์ง๋ณด์๊ฐ ๊ฐ์๋ก ํ๋ค์ด์ง์ ๋ฐ๋ผ ๋๋ฉ์ธ ๋ณ๋ก ๋ถ๋ฆฌ๊ฐ ํ์ํ ์ํฉ์ ๋๋ค.
๋ค๋ง, ์ธ์ฆ์ ์ฌ๋ด ์ ๋ณด ์์คํ ์ ํตํฉ ์ธ์ฆ ๊ณผ์ ์ ๋ฐ๋์ ๊ฑฐ์ณ์ผ๋ง ํฉ๋๋ค.
-
๋ณ๋์ VPC ๋ฐ Private Subnet ๋ฐฐ์น
-
Private EC2์์ ์ธ๋ถ ์ธํฐ๋ท๊ณผ ํต์ ์ด ๊ฐ๋ฅํด์ผ ํ๋ฏ๋ก, NAT Gateway ์ฌ์ฉํจ.
-
ํ๊ฐ๋ ์ธ์คํด์ค๋ฅผ ํตํด Private EC2๋ฅผ ์ ์ดํ ์ ์์ด์ผ ํจ.
aws_CodeDeploy๋ฅผ ์ด์ฉํ์ฌ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถ
- Github main branch์ ์ฌ๋ด ์ ๋ณด ์์คํ
Push
๋๋pull request
- AWS CodePipeline ํธ๋ฆฌ๊ฑฐ ๋๋ฉฐ ํ์ดํ๋ผ์ธ ์คํ
stop.sh
์คํฌ๋ฆฝํธ์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฅผ ์ํด์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋จ- aws_CodeDeploy ์ค์ ์ ๋ฐ๋ผ ์์ค ์ฝ๋๊ฐ ๋ฐฐํฌ ๋๊ณ
initialize.sh
์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ด ์์กด์ฑ ํจํค์ง๋ฅผ ์ค์นํจ. - ๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด
start.sh
์ ๋ฐ๋ผ pm2 ๋งค๋์ ๊ฐ ์คํ๋์ด ์๋ฒ๊ฐ ์ ์์ ์ผ๋ก ๋์ํจ.
-
์ ํ ๊ด๋ฆฌ API ์ปจํ ์ด๋ ๊ตฌ์ถ
-
์ด๊ธฐ ๊ตฌ์ถ์ ECS Fargate๋ก ์งํํ๋ฉฐ, ์ถํ EKS ๊ณ ๋ ค
-
์ฐ๊ด๋์ด ์๋ ์ธ์คํด์ค๋ค์ ๋ชจ๋ Private Subnet ๋ฐฐ์น
-
Private ํ๊ฒฝ์์ AWS ์๋น์ค์ ์ ๊ทผํ๊ธฐ ์ํด VPC ์๋ํฌ์ธํธ๋ฅผ ์ด์ฉํจ
Github Action์ ์ด์ฉํ์ฌ CI/CD ๊ตฌ์ถ
- Github
Release
- Github Action์ด ํธ๋ฆฌ๊ฑฐ ๋๋ฉฐ AWS ECS์ ๋ฐฐํฌ ์์
- Dockerfile์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ AWS ECR์ ์ด๋ฏธ์ง๋ฅผ
push
- TaskDefinition์ ๋ฐ๋ผ ์๋ก์ด ์ด๋ฏธ์ง๊ฐ ์ ์ฉ๋ ์ปจํ ์ด๋๊ฐ ์ ์ฉ๋ ECS ์๋น์ค ์ ๋ฐ์ดํธ
- ๋ฐฐํฌ ์ ๋ต์ ๋ฐ๋ผ์ ๋ฐฐํฌ๊ฐ ์์๋จ
- ๋ฐฐํฌ๊ฐ ์๋ฃ๋๋ฉด ์๋ฒ๊ฐ ์ ์์ ์ผ๋ก ๋์ํจ.
-
ํ ๋ผํผ์ ์ด์ฉํ์ฌ IaC๋ก ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌ
-
EC2๋ ๊ธฐ์กด EC2 ํ๊ฒฝ์์ ์ ์๋ AMI๋ฅผ ์ด์ฉํด์ ๋ณต์ํจ
-
RDS๋ ์ค๋ ์ท์ ์ด์ฉํด์ ์๋น์ค๋ฅผ ๋ณต์ํจ
Github Action์ ์ด์ฉํ์ฌ ์ธํ๋ผ ๊ด๋ฆฌ
ํ ๋ผํผ ๋ฐฑ์๋๋ฅผ S3 ๋ฐ DynamoDB๋ฅผ ์ฌ์ฉํจ.
- Github
release
- Github Action์ด ํธ๋ฆฌ๊ฑฐ ๋๋ฉฐ ์ธํ๋ผ ๊ด๋ฆฌ ์์
- AWS credentials๋ฅผ ์ด์ฉํ์ฌ ๋ฐํ๋ ์ก์ธ์ค ํค์ ๋ํด์ ์ ์ํ์ฌ ํ์ํ ์๋น์ค๋ฅผ ๊ตฌ์ถํจ.
- S3, DynamoDB๋ก ๋ถํฐ tfstate ๋ฐ lock ํ์ผ์ ์ฐธ์กฐํจ
- terraform init์ด ์คํ๋๋ฉฐ ์ธํ๋ผ ์์ฑ์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ด
- terraform plan์ด ์คํ๋๋ฉฐ ํธ์ฌ๋ ํ ๋ผํผ ํ์ผ์ ์ด์ฉํ์ฌ ์ ์์ ์ผ๋ก ์ธํ๋ผ๊ฐ ๊ตฌ์ถ๋ ๊ฒ์ธ์ง ํ์ธํจ.
- ์ด์์ด ์๋ค๋ฉด, terraform apply -auto-approve -input=false๊ฐ ์คํ๋์ด ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํจ.
์ ์ ๊ด๋ฆฌ ๋ฐ ํ ํฐ ๋ฐํ์ ๋ํ ์ ๋ฐ์ ์ธ ๋์์ ์ํํ๋ค.
๋ก๊ทธ์ธ
DB๋ก ๋ถํฐ ๋ฑ๋ก๋์ด ์๋ ์ ์ ์ ๋ณด๋ฅผ ๋ฐํํ์ฌ ํ ํฐ์ ๋ฐํํ๋ค.
jwt token ๊ฒ์ฆ
login api ์์ฒญ์ผ๋ก ๋ถํฐ ๋ฐํ๋ token ์ ๋ณด์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๊ณ , ์ ๋ณด๋ฅผ ๋ฐํํ๋ค.
ํ์๊ฐ์
์์ฒญ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก DB์ ํ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ๋ค.
ํด๋น API๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ ์ ์ ๊ด๋ฆฌ API๋ก ๋ถํฐ ๋ฐํ๋ JWT ํ ํฐ์ด ํ์ํ๋ค.
์ ํ ์ ์ฒด ๋ชฉ๋ก ์กฐํ
DynamoDB๋ก ๋ถํฐ ์ ํ ์ ๋ณด๋ฅผ ์กฐํํ์ฌ ๋ฐํํ๋ค.
์ ํ ์ผ๋ถ ๋ชฉ๋ก ์กฐํ
DynamoDB๋ก ๋ถํฐ ์ ํ ์ ๋ณด๋ฅผ ์กฐํํ์ฌ ๋ฐํํ๋ค.
์ ํ ๋ฑ๋ก
DynamoDB์ ์์ฒญ๋ ์ ํ์ ๋ฑ๋กํ๋ค.
์ ํ ์์
DynamoDB์ ๋ฑ๋ก๋์ด ์๋ ์ ํ์ ์ ๋ณด๋ฅผ ์์ ํ๋ค.
์ ํ ์ญ์
DynamoDB์ ๋ฑ๋ก๋์ด ์๋ ์ ํ์ ์ ๋ณด๋ฅผ ์ญ์ ํ๋ค.