๐ ๋ฐฐ์ด ๊ฒ
๋ฐฐํฌ ์๋ํ์ ์ํคํ ์ฒ
Airbnb ํ๋ก์ ํธ 15์ผ ์ค 7์ผ ์ฐจ ์งํ ์ค์ด๋ค. ์ด์ , ์ค๋์ Github Actions์ ํ์ฉํ ๋ฐฐํฌ ์๋ํ๋ฅผ ํ์๋ค.
์ํคํ ์ฒ๋ ์๋์ ๊ฐ๋ค.
AWS๋ฅผ ํ์ฉํ์๋ค. VPC์ ์ฌ์ฉํ์ฌ public, private subnet์ ๊ตฌ๋ถํ์ฌ Web Server์ DB๋ฅผ ๊ตฌ๋ถํ์๋ค. ํน๋ณํ ์ ์ผ๋ก DB ec2 ๋คํธ์ํฌ๋ฅผ private subnet์ผ๋ก ์ค์ ํ์ฌ ์ธ๋ถ User์์ ๊ณง๋ฐ๋ก ์ ์ํ ์ ์๋๋ก ํ์๋ค. VPC NAT Gateway๋ฅผ ํ์ฉํ์ฌ ์์๋ฐ์ด๋๋ง ํ์ฉํ์๋๋ฐ VPC NAT Gateway ๋น์ฉ ๋ฌธ์ ๋ก ec2๋ฅผ ํ์ฉํด NAT์ ์ง์ ๊ตฌํํ๊ฑฐ๋ ์ ๊น ์ธ๋ถ ์ ์์ด ํ์ํ ๋ Elastic IP๋ฅผ ์ธํฐ๋ท ๊ฒ์ดํธ์จ์ด์ ์ ๊น ๋ถ์ฌ ํต์ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์๋ค.
์๋ํ ๋ฐฐํฌ ๊ตฌ์กฐ๋ ์์ ๊ฐ๋ค. Github ์ ์ฅ์์ push ํ ๋ค merge ๊ณผ์ ์ ๊ฑฐ์ณ ๋ฐฐํฌ ๋ธ๋์น๊ฐ ์ต์ ํ๋๋ฉด Github Actions์ด ์๋ํ๋ค.(์์ฑํ ์ํฌํ๋ก์ฐ) ํฌ๊ฒ ๋น๋์ ๋ฐฐํฌ๋ก ๊ตฌ๋ถํ์๋ค.
๋น๋ ๊ณผ์ ์์ ์์์ฒ๋ผ Docker Hub์ ์ต์ ์ฝ๋๊ฐ ๋น๋๋ jar๋ฅผ Docker image๋ฅผ push ํ๋ค.
๋ฐฐํฌ ๊ณผ์ ์์ Github Actions์ด ec2์ ์ ์ํ์ฌ ํด๋น Docker image๋ฅผ pull ๋ฐ์ ๋น๋ํ๊ณ ์๋ค.
๋ฌธ์ ์ : ๋น๋, ๋ฐฐํฌ ์๋ฃํ์ง๋ง Spring ์๋ฒ๊ฐ ๋ฐํ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ
gradle์์ build๊ฐ ๋ฌธ์ ์์ด ๋์๊ณ Docker image๊ฐ Docker Hub์ ์ ์์ ์ผ๋ก push ๋์๋ค.
ec2์์ docker hub image๋ฅผ pull ๋ฐ์ ๋ฐฐํฌํ์๋ค. Github Actions์์ ์์ฑํ ์ํฌํ๋ก์ฐ๋ ์ฌ๊ธฐ๊น์ง ์์ฑ๋์ด์๋ค.
ํ์ง๋ง ๋ฌธ์ ๋ docker์ ๋ฌ spring ์๋ฒ๊ฐ ์ฃฝ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๋ฌธ์ ๋ spring ์๋ฒ ๋ฐํ์ ์์ DB ์ฐ๊ฒฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์คํ๋ ์ปจํ ์ด๋๋ ๊บผ์ ธ๋ฒ๋ ธ๋ค.
์ด์ : gradle build ํ ๋ ํ ์คํธ๋ฅผ ์ด๋ป๊ฒ ํต๊ณผํ์๊น?
ํ ์คํธ, ๋น๋์ ํต๊ณผํ์ง๋ง ์ค์ ๋ฐํ์์ ์๋ํ์ง ๋ชปํ๋ค. ์๋ํ๋ฉด test ํ๊ฒฝ์ application.yml๊ณผ ์ด์์ application.yml์ด ๋ฌ๋๊ธฐ ๋๋ฌธ์ด๋ค. ํ ์คํธ ํ๊ฒฝ์ db์. sql ํ์ผ๋ค์ด ๋ฌ๋๊ธฐ ๋๋ฌธ์ด๋ค. Github Actions ์ํฌํ๋ก์ฐ๊ฐ ์ปจํ ์ด๋ ์๋ ํ์ธ๊น์ง ํ์ง ๋ชปํ๋ค.
๊ณ ๋ฏผ, ํด๊ฒฐ ๋ฐฉ๋ฒ
- ๋ฐฐํฌ ์ง์ ์ด์ ์๋ฒ๋ฅผ ์ค์ ๋ก ์๋ํด๋ณธ๋ค.?
- Github Actions์์ ๋ฐฐํฌ ๊ณผ์ ์ ํ์ธํ๋(docker์ ๋ฌ web server ํ์ธ) ์ํฌ ํ๋ก์ฐ๋ฅผ ์ถ๊ฐํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ
๋๋์ด ์ฑ ๋จ์ํ ์คํธ๋ฅผ ๋ค ์ฝ์๋ค. ์ค๋ ์ฝ์ ๋ด์ฉ ์ค ๊ฐ๋ช ๊น๊ฒ ๋ณธ ํ ์ค์ ์๋์ ๊ฐ๋ค.
ch10 ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ ์ค
ํ ์คํธ ์ฝ๋๋ฅผ ์ ์์ฑํ๋ ค๋ฉด ์ ํ ์ฝ๋๊ฐ ์ข์์ผ ํ๋ค. ๋ฐ๋๋ก ์ ํ ์ฝ๋๊ฐ ์ข์์ผ ์ข์ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋ค. ์๋ก ์ํฅ์ ๋ฏธ์น๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ ์คํธ ์ฝ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ์ข์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด ์ญ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ ์ข์์ง๋ค.
๋ชจ๋ฅด๋ ์ฌ๋ ์ฃผ๋ ๊ฐ๋ฐ
ํ์ฌ ํ์๊ณผ ํจ๊ป ๋ชจ๋ ๊ณผ์ ์ ํ์ด ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํ๊ณ ์๋ค. ์ข ์ข ํน์ ๊ธฐ์ ์ ๋ํด ์ต์ํ์ง ๋ชปํ ์ฌ๋์ด ์ฃผ๋ํ์ฌ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ ํด๋ณด๊ณ ์๋ค. ์๋ฅผ ๋ค์ด VPC private subnet ์ค์ ์ ๋ํด ๋๋ ์ ๋ชจ๋ฅด๊ณ ํ์์ ์ ์๊ณ ์๋ค. ์ด๋ private subnet ์ค์ ์ ์ํ๋ ํ์์ด ์๋ ๋ชปํ๋ ๋ด๊ฐ ๊ตฌํํ๊ณ ๋ชจ๋ฅด๋ ๊ฒ์ ๋ํด ์ํ๋ ์ฌ๋์๊ฒ ๋ฌป๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ฐ๋๋ก nginx ์ค์ ์ ๋ํด ๋ด๊ฐ ์ ์๊ณ ํ์์ด ์ ๋ชจ๋ฅธ๋ค๋ฉด ํ์์ด ํด๋ณด๋ ๊ฒ์ด๋ค. ๊ฐ๋ฐ ํจ์จ์ ์ผ๋ก ๋จ์ด์ง ์ ์์ง๋ง ํ์ต๊ณผ ํ์ํฌ์์ ์ข์ ๋ฐฉ๋ฒ์ด์์ต๋๋ค. ํ์ฌ ํ๋ก์ ํธ๋ ์๊ฐ์ ์ซ๊ธฐ์ง ์๊ธฐ ๋๋ฌธ์ ์ข์ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฐ๋๋ค. ํ๊ณ ๋ก ๋๋์๋ณด๋ ์, ์ด๊ฒ ํ์ด ํ๋ก๊ทธ๋๋ฐ์ด์ง ์ฐธ.. ํ๋ ์๊ฐ๋ ๋ ๋ค.
๋๊ธ0