๋ฌด์ค๋จ ๋ฐฐํฌ ๋์ ๋ฐฐ๊ฒฝ
GitLab ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ์ฌ CI/CD๋ฅผ ๊ตฌ์ถํ์๋๋ฐ build ๋๊ณ ์๋น์ค๊ฐ ๋ฐฐํฌ๋๋๋ฐ ์ฝ 8์ด ์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค๋จ๋๋ ๋ฌธ์ ์ ์ด ๋ฐ์๋์๋ค.
์ถํ ํ๋ก์ ํธ๋ฅผ ๋ฆฌํฉํ ๋งํ๊ฑฐ๋ ๋ฒ์ ์ ์ ๊ทธ๋ ์ด๋ ํ ๋ ๋ง๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค๋จ๋๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ํ์๋ค๊ณผ ์์ ํ Nginx๋ฅผ ์ค์นํ๊ณ Blue/Green ๋ฐฐํฌ ๋ฐฉ์์ผ๋ก ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ๋์ ํ๊ธฐ๋ก ํ์๋ค.
๋, ๊ธฐ์กด์ GitLab ํ์ดํ๋ผ์ธ ์คํฌ๋ฆฝํธ์ ํ๋ก์ ํธ ๋ด์ Docker ํ์ผ์ ๋๊ณ ๋น๋๋ฅผ ํ์๋๋ฐ, ์ ํจ์ค์ GitLab์ ์ฐ๋ํ์ฌ ์ ํจ์ค๋ก Build๋ฅผ ํ๋ค. → Build ์๋๊ฐ ํจ์ฌ ๋นจ๋ผ์ง
Nginx ๋?
์์ฅ์์ ์ ์ ์จ์ด ๋์ apache์ ๊ฐ์ ์น์๋ฒ ์ค ํ๋๋ก ๊ฐ๋ฒผ์ฐ๋ฉด์ ์ฌ๋ฌ ์์ฒญ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ ์ฅ์ ์ ๊ฐ์ง๋ค. ๋ apache ๋ณด๋ค ๋์์ด ๋จ์ํ๊ณ ์ ๋ฌ์ ์ญํ ๋ง ํ๊ธฐ ๋๋ฌธ์ ๋์์ ์์ ํนํ๋์ด ์๋ค.
์๋ฅผ ๋ค์ด ๋์์ ์์๊ฐ 700๋ช ์ด์์ด๋ผ๋ฉด ์๋ฒ๋ฅผ ์ฆ์คํ๊ฑฐ๋, nginx ํ๊ฒฝ์ ๊ถ์ฅํ๋ค๊ณ ํ ์ ๋๋ก ์ฑ๋ฅ์ด ์ข๊ณ ๋ค์ค์ ์์ ํนํ๋์ด์๋ค.

nginx์ ๊ตฌ๋ ๋ฐฉ์์ Event Driven(๋น๋๊ธฐ์ฒ๋ฆฌ๋ฐฉ์)์ผ๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ด๋ค ๋์์ ํด์ผํ๋์ง๋ง ์๋ ค์ฃผ๊ณ ๋ค๋ฅธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ CPU์ ๊ด๊ณ์์ด ๋ชจ๋ ์ /์ถ๋ ฅ๋ค์ ์ ๋ถ Event Listener๋ก ์ ๋ฌํด์ ํ๋ฆ์ด ๋๊ธฐ์ง ์๊ณ ์๋ต์ด ๋น ๋ฅด๊ฒ ์งํ๋์ด 1๊ฐ์ ํ๋ก์ธ์ค๋ก ๋ณด๋ค ๋ ๋น ๋ฅธ ์์ ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
Nginx ์ญํ
HTTP ์๋ฒ ์ญํ
์น์๋ฒ์ ์ญํ ์ HTML, CSS, JavaScript, ์ด๋ฏธ์ง์ ๊ฐ์ ์ ์ ์ธ ์ ๋ณด๋ฅผ ์น ๋ธ๋ผ์ฐ์ (Chrome, Explore, Opera, FireFox ๋ฑ)์ ์ ์กํ๋ ์ญํ ์ ํ๋ค.
๋ฆฌ๋ฒ์ค ํ๋ก์(Reverse Proxy) ์ญํ
์๋ฒ ์๋จ์ ์น์๋ฒ๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ์๋ฒ์ ์ ๊ทผํ์ง ์๊ณ ์์ ์๋ ์น์๋ฒ์ ์์ฒญ์ ํ๋๋ก ํ๋ ์ญํ ์ด๋ค. ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๋ฆฌ๋ฒ์ค ํ๋ก์ ์๋ฒ(Nginx)๋ ์๋ฒ์ ํฌํธ๋ ๋๋ ํ ๋ฆฌ์ ์ฐ๊ฒฐํ์ฌ ์ค๋ค.
์ด๋ ๊ฒ ๋๋ฉด ์ฌ์ฉ์๊ฐ ์ง์ ํ๋ ์์ฒญ๊ณผ ํ๋ก์ ์๋ฒ๋ฅผ ๊ฑฐ์น ์์ฒญ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ง์ ์ ์ผ๋ก ๋ ธ์ถ๋์ง ์๋ ๋ณด์์ ์ด์ ์ด ์๊ณ , ํ๋์ ์์ฒญ์ ๋ถ๋ฐฐํ์ฌ ์ฌ๋ฌ ํํ๋ก ์ฒ๋ฆฌํ๋ ๋ถ์ฐ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋๋ค.
EC2 ์๋ฒ์ Nginx ์ค์น ( ํ๋ก์ ํธ ์๋ฒ - Ubuntu Server 20.04 LTS )
1. apt ์ ๋ฐ์ดํธ
Ubuntu์๋ ๊ธฐ๋ณธ์ ์ผ๋ก apt๊ฐ ์ค์น๋์ด์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ ์ ์ ๋ฐ์ดํธ ๋ฐ ์ ๊ทธ๋ ์ด๋ ํ๋ฉด ๋๋ค.
- ํจํค์ง ์ธ๋ฑ์ค ์ ๋ณด ์ ๋ฐ์ดํธ
sudo apt update
- ํจํค์ง ์ ๊ทธ๋ ์ด๋
sudo apt upgrade
Ubuntu APT๋?
- APT(Advanced Packaging Tool)
- ๋ฐ๋น์๊ณผ ์ฐ๋ถํฌ๋ฅผ ํฌํจํ์ฌ ๋ฐ๋น์(debian) ๊ณ์ด ๋ฆฌ๋
์ค ๋ฐฐํฌํ๋ค์ ์ฃผ ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ
- apt ๊ด๋ฆฌ ๋๊ตฌ์ธ apt-get๊ณผ apt-cache์์ ์์ฃผ ์ฌ์ฉํ๋ ๋ช
๋ น์ด๋ค์ ํตํฉํ์ฌ ๋ณด๋ค ์ฌ์ฉ์ ์นํ์ ์ผ๋ก ๊ณ ์๋ ์ apt ํจํค์ง ๊ด๋ฆฌ ๋๊ตฌ
- ๋ฆฌ๋
์ค ์์คํ
์ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์ ๊ฑฐํ๋๋ฐ์ ์ฌ์ฉ
๐ apt ์ฌ์ฉ๋ฒ ์ฐธ์กฐ ๋ธ๋ก๊ทธ
: http://taewan.kim/tip/apt-apt-get/
Ubuntu ํจํค์ง ๊ด๋ฆฌ ํด: apt ์ฌ์ฉ๋ฒ
์ฐ๋ถํฌ ํจํค์ง ๊ด๋ฆฌ ํด์ธ apt์ apt-get์ ์ฐจ์ด๋ฅผ ์์๋ณด๊ณ ์ฌ์ฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค.
taewan.kim
2. Nginx ์ค์น
# apt install [ํจํค์ง๋ช
] -> ํจํค์ง ์ค์น
sudo apt install nginx
# apt remove nginx [ํจํค์ง๋ช
] -> ํจํค์ง ์ญ์
sudo apt remove nginx
3. Nginx ์์, ์ข ๋ฃ, ์ฌ์์, ์ํ, ์คํ ํ ์คํธ
sudo service nginx start # nginx ์์
sudo service nginx stop # nginx ์ข
๋ฃ
sudo service nginx restart # nginx ์ฌ์์
sudo service nginx status # nginx ์ํ
sudo nginx -t # ์คํ ํ
์คํธ
- Nginx ์คํ, ์ข ๋ฃ ํ๋ฉด


Spring Boot + Nginx ์ฌ์ฉํ์ฌ ๋ฌด์ค๋จ ๋ฐฐํฌ
๋ฌด์ค๋จ ๋ฐฐํฌ๋?
์์ ์ ๋ฐฐํฌ๋ผ๊ณ ํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ์๋ฒฝ ์๊ฐ๋์ ๋จ์ ์๋น์ค๋ฅผ ์ ์งํ๊ณ ๋ฐฐํฌ๋ฅผ ์งํํ์๋ค. ์ด ๋, ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์์นจ๊น์ง ๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํด์ผํ๋ ์๊ฐ์ด๋ผ๋ฉด ๊ธด๊ธ์ ๊ฒ์ ๊ฑธ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ด์ผ ํ๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๋กค๋ฐฑ์กฐ์ฐจ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌ์ ๋ถ๋ด์ด ๋งค์ฐ ์ปธ๋ค.
์์ฒ๋ผ ์๋น์ค๋ฅผ ์ ์งํ์ง ์๊ณ ์๋น์ค๋ฅผ ๋ฐฐํฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ฌด์ค๋จ ๋ฐฐํฌ์ด๋ค.
Blue / Green ๋ฌด์ค๋จ ๋ฐฐํฌ
Rolling ๋ฐฐํฌ, ์นด๋๋ฆฌ ๋ฐฐํฌ ๋ฑ ์ฌ๋ฌ ๋ฐฐํฌ ๋ฐฉ์์ด ์์ง๋ง ํธํ์ฑ ๋ฌธ์ ์ ์์์ ๋๋ฆฌ์ง ์๊ณ , EC2 ํ๋๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ณ ์ฝ๊ฒ ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ํ ์ ์๋ ๋ฐฉ๋ฒ์ธ Blue/Green ๋ฐฉ์์ ์ฑํ
๋ธ๋ฃจ ๊ทธ๋ฆฐ ๋ฌด์ค๋จ ๋ฐฐํฌ์์ ๋ธ๋ฃจ๋ ๊ตฌ ๋ฒ์ , ๊ทธ๋ฆฐ์ ์ ๋ฒ์ ์ ์๋ฏธํ๋ค. ์ด์์ค์ธ ๊ตฌ๋ฒ์ ๊ณผ ๋์ผํ๊ฒ ์ ๋ฒ์ ์ ์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ ํ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ํตํด ๋ชจ๋ ํธ๋ํฝ์ ํ๋ฒ์ ์ ๋ฒ์ ์ชฝ์ผ๋ก ์ ํํ๋ ๋ฐฉ์์ ๋งํ๋ค.

์ฅ์ ?
- ๊ตฌ๋ฒ์ ์ ์ธ์คํด์ค๊ฐ ๊ทธ๋๋ก ๋จ์์์ด์ ์์ฌ์ด ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๋ค.
- ๊ตฌ๋ฒ์ ์ ํ๊ฒฝ์ ๋ค์ ๋ฐฐํฌ์ ์ฌ์ฌ์ฉํ ์ ์๋ค.
- ์ด์ํ๊ฒฝ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ ๋ฒ์ ํ ์คํธ ๊ฐ๋ฅ.
๋จ์ ?
- ์์คํ ์์์ด ๋๋ฐฐ๋ก ํ์ํ๋ค.
- ์๋ก์ด ํ๊ฒฝ์ ๋ํ ํ ์คํธ๊ฐ ์ ์ ๋์ด์ผ ํ๋ค.
EC2๋ฅผ ์ฌ์ฉํ ๋ฐฐํฌ ์์
- EC2(๋ฆฌ๋
์ค ์๋ฒ)์ Nginx 1๋์ ์คํ๋ง๋ถํธ jar 2๋๋ฅผ ์ฌ์ฉํ๋ค.
- Nginx : 80(http), 443(https) ํฌํธ ์ฌ์ฉ,
- ์คํ๋ง๋ถํธ1(9001), ์คํ๋ง๋ถํธ2(9002)
- ์ฌ์ฉ์๋ ์๋น์ค ์ฃผ์๋ก ์ ์ํ๋ค (80 ๋๋ 443 ํฌํธ)
- Nginx๋ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ํ์ฌ ์ฐ๊ฒฐ๋ ์คํ๋ง๋ถํธ๋ก ์์ฒญ์ ์ ๋ฌํ๋ค.
- ๋ฐฐํฌ๊ฐ ํ์ํ๋ฉด Nginx์ ์ฐ๊ฒฐ๋์ง ์์ ์คํ๋ง๋ถํธ๋ก ๋ฐฐํฌํ๋ค.
- ๋ฐฐํฌ๊ฐ ๋๋๊ณ ์ ์์ ์ผ๋ก ๋ฐฐํฌ๋ฅผ ํ ์คํ๋ง๋ถํธ๊ฐ ๊ตฌ๋์ค์ธ์ง ํ์ธํ๋ค.
- 5์์ ํ์ธํ ์คํ๋ง๋ถํธ๊ฐ ์ ์ ๊ตฌ๋์ค์ด๋ฉด nginx reload๋ฅผ ํตํด ํด๋น ์คํ๋ง๋ถํธ์ ํฌํธ๋ฅผ nginx๊ฐ ์ฐ๊ฒฐํ๋๋ก ํ๋ค.
- ๋ง์ฝ ๋ฐฐํฌ์ ๋ฌธ์ ๊ฐ ์๊ฒจ์ rollback์ด ํ์ํ๋ฉด ngix๊ฐ ๋ฐฐํฌ์ ์ ์ฐ๊ฒฐ๋์๋ ์คํ๋ง๋ถํธ๋ฅผ ๋ค์ ์ฐ๊ฒฐํ๋ฉด ๋๋ค.
- ์ ๊ท ์ฝ๋ ๋ฐฐํฌ๊ฐ ๋ฐ์ ๋ ๋ ๋ง๋ค JAR ์คํ ํฌํธ๊ฐ 9001 → 9002 → 9001 → 9002 .. ์์ผ๋ก ์ค์์นญ
๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ์ํ Nginx ์ค์
1. default ํ์ผ ์ด๊ธฐ
sudo vim /etc/nginx/sites-enabled/default
include /etc/nginx/conf.d/service-url.inc;
proxy_pass $service_url;
์๋ ์์น์ ์ ๋์ค์ ์ถ๊ฐํ๋ค.
try-files $uri/ =404; #์ด ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌํ๊ธฐ

2. service-url.inc ํ์ผ ์ด๊ธฐ
sudo vim /etc/nginx/conf.d/service-url.inc
์ ํด๋์ ์๋์ ์ฝ๋ ์ถ๊ฐ
set $service_url http://127.0.0.1:9001;
nginx๊ฐ ์๋์ผ๋ก 9001 ํฌํธ์ ํฌ์๋ฉํ ์ ์๊ฒ ํด์ค๋ค.
๊ธฐ๋ณธํฌํธ (80)์ผ๋ก ์ ์ํ๊ฒ ๋๋ฉด ์๋์ผ๋ก 9001 ํฌํธ์ ์ฐ๊ฒฐ๋จ
3. nginx ์ฌ์์
sudo service nginx restart