๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ํšŒ๊ณ /๐Ÿ—“ ์ผ์ผ, ์ฃผ๊ฐ„ ํšŒ๊ณ 

[์ผ์ผํšŒ๊ณ ] 22.05.31 - "Github Actions์„ ํ™œ์šฉํ•œ ๋ฐฐํฌ ์ž๋™ํ™”, ๋นŒ๋“œ(ํ…Œ์ŠคํŠธ ํ†ต๊ณผ)์— ๋ฌธ์ œ ์—†์—ˆ์ง€๋งŒ ๋Ÿฐํƒ€์ž„์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ"

by kukim 2022. 6. 1.

๐Ÿ“š ๋ฐฐ์šด ๊ฒƒ

๋ฐฐํฌ ์ž๋™ํ™”์™€ ์•„ํ‚คํ…์ฒ˜

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 Actions์„ ํ™œ์šฉํ•œ ์ž๋™ํ™” ๋ฐฐํฌ

์ž๋™ํ™” ๋ฐฐํฌ ๊ตฌ์กฐ๋Š” ์œ„์™€ ๊ฐ™๋‹ค. 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