๐ญ์ต์ข ํ๋ก์ ํธ ๋ฉด์ ์ค๋น
์ํคํ ์ฒ ์ค๋ช
- Jenkins
- ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ pushํ๋ฉด, ์นํ (webhook)์ ํตํด ์๋์ผ๋ก Jenkins ๋น๋๊ฐ ํธ๋ฆฌ๊ฑฐ๋๋ฉฐ, Jenkins๋ SSH๋ก EC2 ์๋ฒ์ ์ ์ํ์ฌ ์์ ์ ์ํํฉ๋๋ค. Jenkins๋ ๋น๋ ๋ฐ ๋ฐฐํฌ ์ํ๋ฅผ Slack์ผ๋ก ์๋ฆผํฉ๋๋ค.
- Jenkins๊ฐ SSH๋ก EC2์ ์ ์ํ์ฌ Docker Hub์์ ์ต์ ๋ฒ์ ์ ์ด๋ฏธ์ง๋ฅผ pull ๋ฐ์ต๋๋ค. ๊ธฐ์กด ๋ฒ์ ์ ์ปจํ ์ด๋๋ down ์ํค๊ณ , ์๋ก pullํ ์ต์ ๋ฒ์ ์ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋๋ฅผ up ์ํต๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ๋ฒ์ ์ด ์ ์ง๋๋๋ก ํฉ๋๋ค.
Redis, Spirng
Redis์ Spring์ ๊ฐ๊ฐ Docker ์ปจํ ์ด๋๋ก ๊ตฌ์ฑ๋์ด EC2 ์ธ์คํด์ค์ ๋ฐฐํฌ๋์ด์์ต๋๋ค.
๊ฐ๊ฐ์ ์ปจํ ์ด๋๋ก ๋ฐฐํฌํ ์ด์ ๋ EC2 ํ๋๊ฐ ํ๋์ ๊ฐ์์ ์ปดํจํฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. Spring ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ Redis๋ฅผ ์๋ก ๋ค๋ฅธ ์ธํ๋ผ์ ๋ฐฐํฌํจ์ผ๋ก์จ, ํ๋์ ์๋น์ค๊ฐ ์ค๋จ๋๋๋ผ๋ ๋ค๋ฅธ ์๋น์ค์ ์ํฅ์ ์ฃผ์ง ์๊ฒ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด Redis๊ฐ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ Spring ์ ํ๋ฆฌ์ผ์ด์ ์์ฒด๋ ์ฌ์ ํ ์๋ํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋์ปค๋ก EC2์ ๋ฐฐํฌํ ์ด์ ๋ Redis๋ฅผ ๋์ปค์ ์ปจํ ์ด๋ํํ๋ฉด Redis๋ฅผ ์ค์น, ๊ด๋ฆฌ, ๋ฐฐํฌํ๋ ์์ ์ด ๋จ์ํํด์ง๊ณ ๋คํธ์ํฌ์์ ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก Redis์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
Redis๋ฅผ ์ด์ฉํ์ฌ ์๊ฐ๋ณ ์กฐํ์๋ฅผ ๊ณ์ฐํ์ฌ ๋ญํน์ ์ฐ์ ํฉ๋๋ค. ์ฝ๊ธฐ์ ์ฅ์ ์ด ์๋ key-value ํ์์ธ Redis์ ์ ์ฅํ ํ ์ฌ์ฉ์๊ฐ ์ ๊ทผ ์์ Redis์์ ๋ญํน ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ ์กฐํํ๋๋ก ์ ์ฉ์์ผฐ์ต๋๋ค.
RDS, MySQL
RDS๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ ๊ด๋ฆฌ๋ฅผ ์๋ํํ์ฌ ์ด์ ๋ถ๋ด์ ์ค์ฌ์ค๋๋ค. EC2 ์ธ์คํด์ค์ DB๋ฅผ ์ค์นํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ๊ฐ์ธ ์์ ์ฐจ๋์ ์ด์ฉํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค. ๊ฐ์ธ ์์ ์ฐจ๋์ ์ด์ฉํ๋ฉด ์ ์ง ๋ณด์, ๋ณดํ์ฒ๋ฆฌ ๊ฐ์ ์ผ๋ค์ ์จ์ ํ ์ด์ ์๊ฐ ๋ถ๋ดํฉ๋๋ค. ์ฐจ๋ ์ ๋น๋ฅผ ์ํด ์ ๋น์์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐฉ๋ฌธํด์ผ ํ๊ณ ๊ธฐํ ์ฐจ๋๊ณผ ๊ด๋ จ๋ ๋ค๋ฅธ ์ผ์ด ์๊ธธ ๋ ๋ค์ฌ์ผํ๋ ์๊ฐ๊ณผ ์๊ณ ๊ฐ ํฝ๋๋ค. ์ฆ, ์ฌ์ฉ์๊ฐ ์ผ์ผ์ด ์๊ฐ์ ํฌ์ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ ์ค์น์ ๋ฒ์ ๊ด๋ฆฌ, ๋ฐ์ดํฐ ๋ฐฑ์ ๋ฑ์ ํด์ผ๋๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
ํ์ง๋ง RDS๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ํฐ์นด ํ์ฌ์์ ์ฐจ๋์ ๋์ฌํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค. ๋ ํฐ์นด ํ์ฌ์์ ์ฐจ๋์ ๋์ฌํ๋ฉด ๋์ฌ ์ฐจ๋๊ณผ ๊ด๋ จํ์ฌ ์๊ฐ์ด ๋ค์ด๊ฐ๋ ์ผ๋ค์ ๋ ํฐ์นด ํ์ฌ์์ ๋์ ์ฒ๋ฆฌํ๊ณ ์ด์ ์๋ ์ฐจ๋์ ๊ด๋ฆฌํ๋ ์ผ์ ๋ํด์ ์๊ฐ์ ๋ฐ๋ก ์์ ํ์ ์์ด ์ด์ ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค.
RDS๋ฅผ ์ด์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ง ๋ณด์์ ๊ด๋ จ๋ ์ผ๋ค์ RDS์์ ์ ์ ์ผ๋ก ์๋ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ํด์ผ ํ ์ผ์ ์ด๊ธฐ ์ค์ ์ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ผ๋ฐ์ ์๊ธฐ์ ํฐ ํธ์์ฑ์ ๋๋ ์ ์์ต๋๋ค.
MySQL
- MySQL์ ๋์ ์ฑ๋ฅ์ ๊ฐ์ง ๋น ๋ฅธ ์ฝ๊ธฐ ์์ ์ ์ง์ํ๋ฉฐ, ์๋์ ์ผ๋ก ๊ฐ๋จํ ์ฝ๊ธฐ ์์ ์ ์ํํ ๋ ํจ๊ณผ์ ์ผ๋ก ์ฝ๊ธฐ ์ค์ฌ์ ์์ ์ ์ ์ฉํ๋ฉฐ, ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๊ฐ ์์ฃผ ์ด๋ฃจ์ด์ง์ง ์๋, ํ๋กํ ํ์ ๋๋ ์์ ๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
โ ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ์ฐ๊ธฐ ์์ ์ด ๋น๋ฒํ๊ธฐ ๋ณด๋ค๋ ์ฝ๊ธฐ ์์ ์ด ํจ์ฌ ๋ง์ ๊ฒ์ผ๋ก ๋ณด์ด๊ณ ๊ท๋ชจ๋ ๊ทธ๋ ๊ฒ ํฌ์ง ์๋ค๊ณ ํ๋จํด์ mysql์ ์ ํํ์ต๋๋ค.
EC2
- EC2๋ฅผ ์ ํํ ์ด์ ๋ ECS๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Docker ๊ธฐ๋ฐ์ ์ปจํ ์ด๋ ๋ฐฉ์์ผ๋ก ๋ฐฐํฌ๋ฅผ ํด์ฃผ๊ณ EC2๋ฅผ Fargate์ ํจ๊ปํ ๊ฒฝ์ฐ ์ด์์ AWS์๊ฒ ๋งก๊ธธ ์ ์๋ Serverless ์์ง์ด๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํ๋ค๋ ์ฅ์ ์ด ์์ง๋ง ๋ฐฐํฌ๋ฅผ ์ฒ์ ํด๋ณด๋ ๊ฒ์ด๊ณ ๊ณผ์ ํ๋ํ๋๋ฅผ ์ง์ ์งํํ๋ฉฐ EC2์ ๋ํด ๋์ฑ ์์งํ ๋ค์ ECS๋ฅผ ์๋ํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ ํ๋จํ์ฌ EC2๋ก๋ง ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ์ ํํ์ต๋๋ค.
S3
์ฌ์ฉ์๊ฐ ๋ํ ์ฌ์ง์ด๋ ๋ง์ปค์ ๊ธ, ์ฌ์ง์ ๋ฑ๋กํ ๋ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ ํด์ผ๋๋ฏ๋ก ํ์ผ ์ ๋ก๋๋ฅผ ํ ์ ์๋ S3๋ฅผ ๋์ ํ์ต๋๋ค.
์ง์ ์ ๋ก๋ํ๋ฉด ๋ค๋ฅธ ์๋ฒ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ํด๋น ์๋ฒ์์๋ ํ์ผ์ ์ฌ์ฉํ ์ ์๊ณ ์๋ฒ์ ๋ถํ๊ฐ ์๊ธฐ๊ฒ ๋๋ฉฐ ์ฑ๋ฅ ์ ํ์ ์ฐ๋ ค๊ฐ ์๊ธฐ ๋๋ฌธ์ S3์ ๋ฐ๋ก ์ ์ฅํ๊ธฐ๋ก ์์ฌ๊ฒฐ์ ํ์ต๋๋ค.
Rout53
๋๋ฉ์ธ์ ์ด๋ฆ์ IP ์ฃผ์๋ก ๋ณํํ๋ DNS(Domain Name Server) ์๋น์ค๋ก ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ https://detourofficial.com/ ๊ณผ ๊ฐ์ ๋๋ฉ์ธ ์ด๋ฆ์ ์ ๋ ฅํ๋ฉด Route53์ ์ด๋ฅผ 192.0.X.X๊ณผ ๊ฐ์ IP ์ฃผ์๋ก ๋ณํํ์ฌ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์น ์๋ฒ์ ์ฐ๊ฒฐ๋๋๋ก ํฉ๋๋ค.
route 53์ ํต์ฌ: ๋๋ฉ์ธ ๋ค์ ์๋ฒ๋ฅผ ์๋ํด์ฃผ๋ ์ญํ
DNS ์๋ฒ ๊ด๋ฆฌ, Spring๋ ์๋ EC2์ ๋ค์ด๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ rout53์ ํตํด ๋๋ฉ์ธ ๋ค์์ผ๋ก ๋ค์ด๊ฐ๊ธฐ or IP ์ฃผ์๋ก ๋ค์ด๊ฐ๊ธฐ.
์ ํฌ๊ฐ ์ฐ ๋๋ฉ์ธ ์ฃผ์์ EC2 IP์ฃผ์๋ ์ฐ๊ฒฐ : ํธ์คํ
EC2๋ง๋ค IP ์ฃผ์๊ฐ ๋ค ๋ค๋ฆ ๋๋ค.(3๊ฐ๊ฐ ๋ค๋ฅธ ๊ฒ)
EC2๊ฐ ๊บผ์ง๋ฉด IP ์ฃผ์๊ฐ ๋ฐ๋๊ธฐ ๋๋ฌธ์ ํ๋ ฅ์ IP ์ฃผ์๋ฅผ ํตํด ๊ณ ์ IP๋ฅผ ๋ถ์ฌํด์ผ EC2๋ฅผ ๋๊ณ ํค๊ณ ํด๋ IP ์ฃผ์์ ๋ณ๋์ด ์์ต๋๋ค.
NGINX(์น ์๋ฒ) ์คํ๋ง๋ณด๋ค ์ ๋จ์ ๋์์๋ ์๋ฒ๋ก Spring์ ์ข ๋ ์์ ์ ์ผ๋ก ๋์์ฃผ๋ ์ญํ . EC2์ NGINX ์ค์นํ๊ณ ๊ทธ ์์ ๋์ฐ๋ ๊ฒ ๊ธฐ๋ณธ์ ์ธ๋ฐ ์ค๊ณ๊ฐ ์๋ชป๋จ. ์๋๋ ์น ์๋ฒ๋ก ๋ฐฐํฌํด์ผ ๋จ. ์น์๋ฒ๊น์ง๋ ์๋๊ณ ์์จ์ ์ญํ ์ ํด์ AWS๋ ์น์๋ฒ๋์ ๋ค๋ฆ ๋๋ค.
ec2 -> nginx -> spring
๊ทธ๋๋ ๋์๊ฐ๋ ์ด์ ๋ spring์ apache tomcat์ด ๋ด์ฅ๋์ด ์๋๋ฐ ์ด๊ฒ WAS์ ์ญํ ์ด๊ธฐ ๋๋ฌธ์ (WebServer๋ ๋ค๋ฆ ๋๋ค)
- Front
React๋ฅผ ์ฌ์ฉํ๊ณ vercel์ ํตํด ๋ฐฐํฌํ์ต๋๋ค.
vercel์ด react๋ ์ฐ๊ฒฐํ๊ณ rout53์ ํตํด ํธ์คํ ํฉ๋๋ค.