# NGINX๋
NGINX
ํธ๋ํฝ์ด ๋ง์ ์น์ฌ์ดํธ๋ฅผ ์ํด ํ์ฅ์ฑ์ ๊ณ ๋ คํด ์ค๊ณํ ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ์ ์น์๋ฒ
# โ๏ธNGINX๋?
์น์๋ฒ ์ํํธ์จ์ด๋ก, ๊ฐ๋ฒผ์๊ณผ ๋์ ์ฑ๋ฅ์ ๋ชฉํ๋ก ํ๋ค. ์น ์๋ฒ, ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋ฐ ๋ฉ์ผ ํ๋ก์ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ค.
Nginx
๋ ์์ฒญ์ ์๋ตํ๊ธฐ ์ํด ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค. ์ด๊ฒ์ Apache
HTTP ์๋ฒ์ ์ค๋ ๋/ํ๋ก์ธ์ค ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ ๊ฒ๊ณผ๋ ๋์กฐ์ ์ด๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ ์๋ฒ์ ๋ง์ ๋ถํ๊ฐ ์๊ธธ ๊ฒฝ์ฐ์ ์ฑ๋ฅ์ ์์ธกํ๊ธฐ ์ฝ๊ฒ ํด์ค๋ค.
Apache
๋ณด๋ค ๋์์ด ๋จ์ํ๊ณ ๋์์ ์ ์ฒ๋ฆฌ์ ํนํ ๋์๋ค๊ณ ํ๋ค.
Request ์ฒ๋ฆฌ ๋ฐฉ์์์ Apache
์๋ฒ์๋ ๋ค๋ฅด๋ค๋ ๊ฒ์ด ํต์ฌ์ ์ธ ์ฐจ์ด์ด๋ค.
Event-Driven ๋ฐฉ์์ ์ฑํํ์ฌ ๋์ ์ฑ๋ฅ์ ๋ฐํํ๋ค.
ํ ๋ง๋๋ก
๋ ์ ์ ์์์ผ๋ก ๋ ๋น ๋ฅด๊ฒ ์๋น์ค
์ํ์น์ Nginx์ ํน์ง์ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
# Apache
- ์ฐ๋ ๋ / ํ๋ก์ธ์ค ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ก ์์ฒญ ํ๋ ๋น ์ฐ๋ ๋ ํ๋๊ฐ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ
- ์ฌ์ฉ์๊ฐ ๋ง์ผ๋ฉด ๋ง์ ์ฐ๋ ๋ ์์ฑ, ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ๋ญ๋น
- 1 ์ฐ๋ ๋ : 1 ํด๋ผ์ด์ธํธ
# Nginx
- ๋น๋๊ธฐ Event-Driven ๊ตฌ์กฐ
- ๋ค์์ ์ฐ๊ฒฐ์ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์ฝ์ด ๋ชจ๋์ด Apache๋ณด๋ค ์ ์ ๋ฆฌ์์ค๋ก ๋น ๋ฅด๊ฒ ๋์ ๊ฐ๋ฅ
์ฐ๋ ๋ ๊ธฐ๋ฐ์ ํ๋์ ์ปค๋ฅ์ - ํ๋์ ์ฐ๋ ๋๋ฅผ ๋จน์ง๋ง, Event-driven ๊ตฌ์กฐ๋ ์ฌ๋ฌ ์ปค๋ฅ์ ์ Event Handler์์ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํด์ ๋จผ์ ์ฒ๋ฆฌ๋๋ ๊ฒ๋ถํฐ ๋ก์ง์ด ์งํ๋๋๋ก ํ๋ค.
๋๊ธฐ์ ๋น๋๊ธฐ
์ ์ฐจ์ด์ ์ ๊ฐ๋จํ ์ค๋ช
ํ๋ฉด
๋๊ธฐ(Synchronous) : A๊ฐ B์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ ๋, ์ด ์์ฒญ์ ๋ฐ๋ฅธ ์๋ต์ ์ฃผ์ด์ผ๋ง A๊ฐ ๋ค์ ์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅ (ํ๋์ ์์ฒญ, ํ๋์ ์์ ์ ์ถฉ์ค)
๋น๋๊ธฐ(Asynchronous) : A์ ์์ฒญ์ B๊ฐ ์ฆ์ ์ฃผ์ง ์์๋, A์ ์ ํด์๊ฐ์ผ๋ก ๋ ๋ค๋ฅธ ์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๋ฐฉ์
์์ธํ ๋น๋๊ธฐ ๋ฐฉ์๊ณผ Event-driven ๋ฐฉ์ ์ ๋ฆฌ๋ ์๋ ๊ธ์ ์ฐธ๊ณ ํ์
- ๋น๋๊ธฐVS๋๊ธฐ(https://blog.naver.com/jhc9639/221108496101)
Event-Driven์ด๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๊ณ ์ด๋ฒคํธ๊ฐ ๊ฐ์ง๋์์ ๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์
๋ง์ฐฌ๊ฐ์ง๋ก Nginx๋ ์ฃผ๊ธฐ์ ์ผ๋ก ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๊ณ ์ด๋ฒคํธ๊ฐ ๊ฐ์ง๋์์ ๋ ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ก ์ด๋ฒคํธ๊ฐ ์์์ ์๋ฆผ
์ด๋ ์ด๋ฒคํธ ๊ฐ์ง์ ์ด๋ฒคํธ๋ฅผ ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์๊ฒ ์๋ ค์ฃผ๋ ๊ฒ์ ์ปค๋์ด ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์
Nginx
๋ ์ ์ ๋น์ฉ์ผ๋ก ๋น๋๊ธฐ์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌ
# ์ต๊ทผ ๋ํฅ
์์ ์๋ Apache httpd๊ฐ ์ ์ ์จ์ด ๋์์ง๋ง ์ด์ ๋ Nginx๊ฐ ๊ฐ์ฅ ๋์ค์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
AWS์์ WAS ์ ํ์ผ๋ก NGINX ์ฌ์ฉ๋์ด ๊ณ์ ๋์ด๋๊ณ ์๋ ์ถ์ธ์ด๋ค.
# โ๏ธNginx์ ์ญํ
- HTTP server
- Reverse proxy server
- Mail proxy server
- Generic TCP/UDP proxy server
(โฒ์ถ์ฒ : https://whatisthenext.tistory.com/123)
# HTTP server
๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ํ์ผ์ ์ฒ๋ฆฌํ๋ web server
์ ์ญํ ์ ํ ์ ์๋ค.
์์ธํ ์ค๋ช ํ๋ฉด HTML, CSS, JavaScript, ์ด๋ฏธ์ง์ ๊ฐ์ ์ ๋ณด๋ฅผ ์น ๋ธ๋ผ์ฐ์ (Chrome, Iexplore, Opera, Firefox ๋ฑ)์ ์ ์กํ๋ ์ญํ ์ ํ๋ค. (HTTP ํ๋กํ ์ฝ์ ์ค์)
# Reverse proxy server
(โฒ์ถ์ฒ : https://whatisthenext.tistory.com/123)
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๊ฐ Application server์ ๋ฐฐ๋ถํด์ค๋ค.
ํด๋ผ์ด์ธํธ์์๋ 80ํฌํธ๋ก๋ง ์์ฒญ์ด ๋ค์ด์ค๋๋ฐ, ์ด ๋ค์ด์ค๋ ์์ฒญ์ 8080, 8081 ๋ฑ ์ฌ๋ฌ Application server๋ก ๋ณด๋ด์ค๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฆฌ๋ฒ์ค ํ๋ก์๋ ๊ฐ application server์ ์์ฒญ์ ๋ฐฐ๋ถํด์ ๋ถํ๋ฅผ ๋ถ์ฐํ๊ณ (load balancing) ์บ์ ์๋ฒ๋ก์์ ์ญํ ์ ํ์ง๋ง WAS์ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ๋๋ ์ด์ ๋ ์ฃผ๋ก ์์ฒญ์ ๋ํ ๋ฒํผ๋ง์ด๋ค.
๋จ์ผ ํ๋ก์ธ์ค๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ์์ฒญ์๋ฅผ ์ ํํ๋ ์๋ฒ์์๋ ํต์ ์๋๊ฐ ๋๋ฆฐ ํด๋ผ์ด์ธํธ(A)๊ฐ ์์ผ๋ฉด nginx๊ฐ ์๋ ๊ฒฝ์ฐ A ๋๋ฌธ์ 1๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์๋ต ๋๊ธฐ ์ํ๊ฐ ๋๋ค. ๋ฆฌ๋ฒ์ค ํ๋ก์๋ ์๋ต์ ๋ฒํผ๋ง ํด Server๊ฐ ๊ฐ ํด๋ผ์ด์ธํธ์ ํต์ ์ ์ ๊ฒฝ์ฐ์ง ์๊ณ ์ง์ฐ ์์ด ์ฒ๋ฆฌํ ์ ์๊ฒ ํ๋ค.
ํด๋ผ์ด์ธํธ๋ ๊ฐ์ง ์๋ฒ์ ์์ฒญ(request)ํ๋ฉด, ํ๋ก์ ์๋ฒ๊ฐ ๋ฐฐํ ์๋ฒ(reverse server)๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ญํ ์ ํ๋ค. ์ฌ๊ธฐ์ ํ๋ก์ ์๋ฒ๊ฐ
Nginx
, ๋ฆฌ๋ฒ์ค ์๋ฒ๊ฐ์์ฉํ๋ก๊ทธ๋จ ์๋ฒ
๋ฅผ ์๋ฏธํ๋ค.
์น ์์ฉํ๋ก๊ทธ๋จ ์๋ฒ์ ๋ฆฌ๋ฒ์ค ํ๋ก์(Nginx)๋ฅผ ๋๋ ์ด์ ๋ ์์ฒญ(request)์ ๋ํ ๋ฒํผ๋ง์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ง์ App ์๋ฒ์ ์ง์ ์์ฒญํ๋ ๊ฒฝ์ฐ, ํ๋ก์ธ์ค 1๊ฐ๊ฐ ์๋ต ๋๊ธฐ ์ํ๊ฐ ๋์ด์ผ๋ง ํ๋ค. ๋ฐ๋ผ์ ํ๋ก์ ์๋ฒ๋ฅผ ๋ ์ผ๋ก์จ ์์ฒญ์ ๋ฐฐ๋ถํ๋ ์ญํ ์ ํ๋ค.
nginx.conf ํ์ผ์์
location
์ง์์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ ๋ฐฐ๋ถํ๋ค.
# Nginx์ ์ฌ์ฉ ์์
Nginx์ ํฌ๊ฒ ์ธ ๊ฐ์ง ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
- ํธ๋ํฝ์ด ๋ง์ ์น์๋ฒ
- ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์์ผ์ ๊ฐ๋ฆฌ๊ธฐ ์ํ ํ๋ก์ ์๋ฒ
- ํด๋ฌ์คํฐ๋ง๋ ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ๋ก๋๋ฐธ๋ฐ์
์ ์ธ ๊ฐ์ง ์ฉ๋๋ก ์ฌ์ฉํ ์ ์๊ณ , ์ค์ ์ ํตํด์ ์ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
# โ๏ธReference
- nginx-๊ณต์ํ์ด์ง(http://nginx.org/en/)
- ๋ธ๋ก๊ทธ(https://hygjob.wordpress.com/2017/05/27/nginx-%EC%97%AD%ED%95%A0/)
- ๋ธ๋ก๊ทธ(https://smjeon.dev/etc/nginx/)
- https://eggrollfactory.tistory.com/18
- https://whatisthenext.tistory.com/123
- https://wiserloner.tistory.com/284
- https://hojak99.tistory.com/464
- https://blog.naver.com/jhc9639/221108496101