์ฐ๋ฆฌ๋ ํ์ ๋ณด๊ณ ์์ ์ฌ๋ณธ์ ๋ค์ ๊ฒ์ํฉ๋๋ค. 2016๋
7์ 8~XNUMX์ผ ๋ชจ์คํฌ๋ฐ ๊ทผ์ฒ ์ค์ฝ์ฝ๋ณด์์ ์ด๋ ธ์ต๋๋ค. OpenResty์ Lua๋ฅผ ์ฌ์ฉํ์ฌ NGINX ๊ธฐ๋ฅ์ ํ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ ๋ ๋ธ๋ผ๋๋ฏธ๋ฅด ํ๋กํ์ํ์ด๊ณ Parallels์์ ์ผํ๊ณ ์์ต๋๋ค. ์ ์ ๋ํด ๊ฐ๋ตํ ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ ๋ ์ ์ธ์์ 4๋ถ์ 3์ ์ฝ๋๋ฅผ ์ฐ๋ ๋ฐ ๋ฐ์นฉ๋๋ค. ๋๋ ๋ฌธ์ ๊ทธ๋๋ก ํต์ฌ์ ์ธ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์์ต๋๋ค. ๊ฐ๋ ๊ฟ์์ ์ฝ๋๋ฅผ ๋ณด๊ธฐ๋ ํฉ๋๋ค. ์ ์ธ์์ 4๋ถ์ 1์ ์ฐ์ ๊ฐ๋ฐ๋ก, ๋ฐ๋ก ์์ฐ์ ํฌ์ ๋๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ผ์ ๋๋ค. ์ฌ๋ฌ๋ถ ์ค ์ผ๋ถ๋ ์ฌ์ฉํ์ง๋ง ๊นจ๋ซ์ง ๋ชปํ๋ ์ฝ๋์ ๋๋ค.
๊ทธ๋์ ๋ชจ๋ ๊ฒ์ด ์ผ๋ง๋ ๋์์ง ์ดํดํ๊ฒ ํด์ฃผ์ธ์. ์ ๊ฐ ์์ง ์ด๋ณด์์ ๋, ๊ทธ๋ค์ ์ ์๊ฒ 100ํ ๋ผ๋ฐ์ดํธ ๊ท๋ชจ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฃผ์์ต๋๋ค. ์ง๊ธ์ ์ฌ๊ธฐ ์๋ ๋ชจ๋ ์ฌ๋๋ค์๊ฒ ๋ถ๋ด์ด ํฐ ์ํฉ์ ๋๋ค. ์ ๋ ์ปจํผ๋ฐ์ค์ ๊ฐ์ "์ฌ๋ฌ๋ถ, ๋น ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ๋ฉด์์ ๊ด์ฐฎ์ ๊ฑด๊ฐ์? ๊ฑฐ๊ธฐ ๊ธฐ๋ฐ์ ์ผ๋ง๋ ๋์๋์?"๋ผ๊ณ ๋ฌผ์์ต๋๋ค. ๊ทธ๋ฌ์ ๊ทธ๋ค์ "100๊ธฐ๊ฐ๋ฐ์ดํธ์ ๋๋ค!"๋ผ๊ณ ๋๋ตํ์ต๋๋ค. "๋ฉ์ง๋ค, XNUMX๊ธฐ๊ฐ๋ฐ์ดํธ!"๋ผ๊ณ ๋งํ๋ฉฐ ์ด๋ป๊ฒ ํฌ์ปคํ์ด์ค๋ฅผ ์ ์งํด์ผ ํ ์ง ๊ณ ๋ฏผํ์ต๋๋ค. "์ด ์ฌ๋๋ค ๋ฉ์ง๋ค"๋ผ๊ณ ์๊ฐํ๋ค๊ฐ ๋์์์ ํ ๋ผ๋ฐ์ดํธ๊ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ง๊ณ ์ฅ๋์น๋ ๊ฑฐ์ฃ . ์ด๋ณด๋ผ๊ณ ํ๋ ๊ฒ ์ผ๋ง๋ ํฐ ํ๊ฒฉ์ธ์ง ์์์ด ๊ฐ์๋์?
์ ๋ 20๊ฐ ์ด์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์๊ณ ์์ต๋๋ค. ์ด๊ฑด ์ ๊ฐ ์ผํ๋ฉด์ ์์๋ด์ผ ํ๋ ์ ์ด์์. Erlang, C, C++, Lua, Python, Ruby ๋๋ ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๊ฐ ์ฃผ์ด์ง๋ฉด ์ด๋ฅผ ๋ชจ๋ ์๋ผ๋ด์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ ๊ทธ๋ด ์๋ฐ์ ์์์ต๋๋ค. ์ ํํ ์ซ์๋ฅผ ์ธ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ์ง๋ง, 20๋ฒ์งธ์ฏค์์ ์ซ์๊ฐ ์ฌ๋ผ์ก์ต๋๋ค.
์ฌ๊ธฐ ์๋ ๋ชจ๋ ์ฌ๋๋ค์ด Parallels๊ฐ ๋ฌด์์ด๊ณ ๋ฌด์์ ํ๋์ง ์๊ณ ์๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๊ฐ ์ผ๋ง๋ ๋ฉ์ง์ง, ๋ฌด์์ ํ๋์ง์ ๋ํด์๋ ์ด์ผ๊ธฐํ์ง ์๊ฒ ์ต๋๋ค. ์ ํฌ๋ ์ ์ธ๊ณ์ 13๊ฐ์ ์ฌ๋ฌด์ค์ ๋๊ณ ์์ผ๋ฉฐ, ์ง์์ 300๋ช
์ด ๋๊ณ , ๋ชจ์คํฌ๋ฐ, ํ๋ฆฐ, ๋ชฐํ์ ๊ฐ๋ฐํ์ ๋๊ณ ์์ต๋๋ค. ๊ฒจ์ธ์ ์ถ์์ ๋ฑ์ ๋ฐ๋ปํ๊ฒ ํด์ค์ผ ํ๋ค๋ฉด ๊ทธ๋ฅ ๋ชฐํ๋ก ์ด์ฌํ๋ฉด ๋ฉ๋๋ค.
์ ํฌ ๋ถ์๋ Python 2๋ก๋ง ์์ฑํฉ๋๋ค. ์ฌ์ ์ ํ๊ณ ์์ด์ ์ต์ ๊ธฐ์ ์ ๊ตฌํํ ์๊ฐ์ด ์์ด์ ์ด๋ ค์์ ๊ฒช๊ณ ์์ต๋๋ค. Django๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ด ๋ค์ด์๊ณ , ๋ถํ์ํ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ MySQL, Redis, NGINX๋ ์์ต๋๋ค. ๊ทธ ๋ฐ์๋ ๋ฉ์ง ์ํ์ด ๋ง์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ MongoDB๋ ์๊ณ , ํ ๋ผ๋ ๋ฐ์ด๋ค๋๊ณ , ๋ชจ๋ ๊ฑธ ๋ค ๊ฐ์ง๊ณ ์์ง๋ง, ๊ทธ๊ฒ๋ค์ ๋ด ๊ฒ์ด ์๋๊ณ , ๋๋ ๊ทธ๋ฐ ์ผ์ ํ์ง ์๋๋ค.
์คํ๋ฆฌ์ค ํฐ
๋๋ ๋ด ์์ ์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค. ์ค๋์ ๋ฌด์จ ์ด์ผ๊ธฐ๋ฅผ ํ ์ง ์์๋ณด๊ฒ ์ต๋๋ค.
- OpenResty๋ ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์?
- Python, NodeJS, PHP, Go ๋ฑ ๋ชจ๋๊ฐ ๋ง์กฑํ๋ ๋ฉ์ง ๊ฒ๋ค์ด ์๋๋ฐ ์ ๋ฐํด๋ฅผ ์๋ก ๋ง๋ค์ด์ผ ํฉ๋๊น?
- ๊ทธ๋ฆฌ๊ณ ์ค์ ์ํ์์์ ๋ช ๊ฐ์ง ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ๋ณด๊ณ ์๊ฐ 3,5์๊ฐ ๋ถ๋์ด๋ผ ๋ง์ ๋ถ๋ถ์ ์๋ผ์ผ ํ๊ณ , ์์๋ ๊ฑฐ์ ์์ ๊ฒ๋๋ค.
OpenResty๋ NGINX์ ๋๋ค. ๊ทธ ๋๋ถ์ ์ฐ๋ฆฌ๋ ํ๋ฅญํ๊ฒ ์์ฑ๋๊ณ ๋น ๋ฅด๊ฒ ์๋ํ๋ ์๋ฒฝํ ์น ์๋ฒ๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๋ค. ์ ๋ ์ฐ๋ฆฌ ๋๋ถ๋ถ์ด ํ๋ก๋์ ์์ NGINX๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ ๊ทธ๊ฐ ๋น ๋ฅด๊ณ ๋ฉ์ง ์ฌ๋์ด๋ผ๋ ๊ฑธ ์๊ณ ์์ฃ . ๊ทธ๋ค์ ๋ฉ์ง ๋๊ธฐ์ I/O๋ฅผ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ Python์์ gevent๋ฅผ ์ํํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒ์ ์ํํ ํ์๊ฐ ์์ต๋๋ค. Gevent๋ ๋ฉ์ง๊ณ ๊ต์ฅํ์ง๋ง, C ์ฝ๋๋ฅผ ์์ฑํ๋ค๊ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด gevent๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฒ๊น ํ๋ ๋ฐ ๋ฏธ์น ๊ฒ ๊ฐ์ต๋๋ค. ์ ๋ ์ด๋ฐ ๊ฒฝํ์ ํ์ต๋๋ค. ๋ฌด์์ด ์๋ชป๋์๋์ง ์์๋ด๋ ๋ฐ ๊ผฌ๋ฐ ์ดํ์ด โโ๊ฑธ๋ ธ์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ๋ช ์ฃผ ๋์ ์กฐ์ฌํ์ง ์๊ณ , ๋ฌธ์ ๋ฅผ ์ฐพ์๋ด์ง ์๊ณ , ์ธํฐ๋ท์ ๊ธ์ ์ฌ๋ฆฌ์ง ์์๊ณ , ๊ตฌ๊ธ์์ ์ฐพ์ง ๋ชปํ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์์ ํ ๋ฏธ์ณ๋ฒ๋ ธ์ ๊ฒ๋๋ค.
NGINX์๋ ์ด๋ฏธ ์บ์ฑ๊ณผ ์ ์ ์ฝํ ์ธ ๊ฐ ๊ตฌํ๋์ด ์์ต๋๋ค. ์ด๋ป๊ฒ ํ๋ฉด ์ธ๋์ ์ธ ๋ฐฉ์์ผ๋ก ํ ์ ์์์ง, ์ด๋๊ฐ์์ ์๋๋ฅผ ๋ฆ์ถ์ง ์์์ง, ์ด๋๊ฐ์์ ์ค๋ช ์๋ฅผ ์์ด๋ฒ๋ฆฌ์ง ์์์ง์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. Nginx๋ ๋ฐฐํฌํ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ์ต๋๋ค. WSGI, PHP-FPM, Gunicorn, Unicorn ์ค ๋ฌด์์ ์ ํํด์ผ ํ ์ง ๊ณ ๋ฏผํ ํ์๊ฐ ์์ต๋๋ค. Nginx๊ฐ ์ค์น๋์ด ๊ด๋ฆฌ์์๊ฒ ์ ๊ณต๋๋ฏ๋ก ๊ด๋ฆฌ์๋ Nginx๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๋ค. Nginx๋ ๊ตฌ์กฐํ๋ ๋ฐฉ์์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด์ ๋ํด์๋ ๋์ค์ ์์ธํ ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. ๊ฐ๋จํ ๋งํด์, ์์ฒญ์ ์๋ฝํ๋ ๋จ๊ณ, ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋จ๊ณ, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์์๊ฒ ์ฝํ ์ธ ๋ฅผ ๋ฐํํ๋ ๋จ๊ณ๊ฐ ์์ต๋๋ค.
Nginx๋ ๋ฉ์ง ๊ธฐ๋ฅ์ด์ง๋ง, ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฌ์ฉ์ ์ ์๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ , ๊ฐ๋ฐ์๋ค์ด ์ค์ ์ ์ง์ด๋ฃ์ ๋ชจ๋ ๋ฉ์ง ๊ธฐ๋ฅ์๋ ๋ถ๊ตฌํ๊ณ ์ ์ฐ์ฑ์ด ์ถฉ๋ถํ์ง ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด ํ์ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ๊ทธ๋์ ํ์ค๋ฐ์ค ์ฌ๋๋ค์ ์ค๋์ , ์ฝ 8๋ ์ ์ ๋ฃจ์๋ฅผ ์ฑ์ ๋ด์ฅํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋ฌด์์ ์ฃผ๋์?
- ํฌ๊ธฐ. ๊ทธ๋ ํค๊ฐ ์์ต๋๋ค. LuaJIT์ ์ฝ 100~200KB์ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋์ ์ต์ํ์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํต๋๋ค.
- ์๋. LuaJIT ์ธํฐํ๋ฆฌํฐ๋ ๋ง์ ์ํฉ์์ C์ ๋น์ทํ์ง๋ง, ์ด๋ค ์ํฉ์์๋ Java๋ณด๋ค ๋จ์ด์ง๊ณ , ์ด๋ค ์ํฉ์์๋ Java๋ณด๋ค ๋ฐ์ด๋ฉ๋๋ค. ํ๋์ ์ด๋ ์ต์ฒจ๋จ์ด์ ๊ฐ์ฅ ๋ฉ์ง JIT ์ปดํ์ผ๋ฌ๋ก ์ฌ๊ฒจ์ก์ต๋๋ค. ์์ฆ์ ๋ ๋ฉ์ง ๋ชจ๋ธ๋ ์์ง๋ง, ์๋ฅผ ๋ค์ด V8 ์์ง์ด ๋ฌ๋ฆฐ ๋ชจ๋ธ์ ๋งค์ฐ ๋ฌด๊ฒ์ต๋๋ค. ์ผ๋ถ JS ์ธํฐํ๋ฆฌํฐ์ Java์ HotSpot์ ์ด๋ค ๋ถ๋ถ์์๋ ๋ ๋น ๋ฅด์ง๋ง, ๋ค๋ฅธ ๋ถ๋ถ์์๋ ์ฌ์ ํ ๋ค์ฒ์ง๋๋ค.
- ๋ฐฐ์ฐ๊ธฐ ์ฝ๋ค. ์๋ฅผ ๋ค์ด Perl ์ฝ๋ ๊ธฐ๋ฐ์ด ์๊ณ Booking.com์ด ์๋๋ผ๋ฉด Perl ํ๋ก๊ทธ๋๋จธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋นผ์๊ฒผ๊ณ , ๊ทธ๋ค์ ๊ฐ๋ฅด์น๋ ์ผ์ ๊ธธ๊ณ ํ๋ญ๋๋ค. ๋ค๋ฅธ ๋ถ์ผ์์ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ์ํ๋ค๋ฉด, ๊ทธ๋ค์ ์ฌ๊ต์กํ๊ฑฐ๋ ์๋ก ์ฐพ์์ผ ํ ์๋ ์์ต๋๋ค. Lua์ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ๊ฐ๋จํฉ๋๋ค. ๋ฃจ์๋ ์ด๊ธ์๋ผ๋ฉด ๋๊ตฌ๋ 3์ผ ๋ง์ ๋ฐฐ์ธ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์์๋ด๋ ๋ฐ ์ฝ 2์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค. 2์๊ฐ ๋ง์ ์ ๋ ์ด๋ฏธ ํ๋ก๋์ ์์ ์ฌ์ฉํ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์์์ต๋๋ค. ์ผ์ฃผ์ผ ํ ๊ทธ๋ ๋ฐ๋ก ์ ์์ ๋ค์ด๊ฐ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

์ฌ๊ธฐ์๋ ๋ง์ ๊ฒ์ด ์์ต๋๋ค. OpenResty๋ Lua์ Engine์ ๋ชจ๋ ํฌํจํ ์ฌ๋ฌ ๋ชจ๋์ ์์งํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ๋ชจ๋ ๊ฒ์ ์ค๋นํ์ต๋๋ค - ๋ฐฐ์นํ๊ณ ์๋์ํค์ธ์.
์
๊ฐ์ฌ๋ ์ด์ ๊ทธ๋งํ๊ณ ์ฝ๋๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ๊ฐ๋จํ Hello World๋ฅผ ์๊ฐํฉ๋๋ค.

์ฌ๊ธฐ์ ๋ฌด์์ด ์๋์? ์ด๊ณณ์ ์์ง์ค ๋งค์ฅ์
๋๋ค. ์ฐ๋ฆฌ๋ ์ ๊ฒฝ ์ฐ์ง ์๊ณ , ์ฐ๋ฆฌ๋ง์ ๋ผ์ฐํ
์ ์์ฑํ์ง๋ ์๊ณ , ๊ธฐ์ฑ ๋ผ์ฐํ
์ ์ฌ์ฉํ์ง๋ ์์ต๋๋ค. ์ด๋ฏธ NGINX์ ๊ตฌํ๋์ด ์์ผ๋๊น, ์ฐ๋ฆฌ๋ ๊ฒ์ผ๋ฅด๊ฒ ์ ์ง๋
๋๋ค.
content_by_lua_block โ ์ด๋ Lua ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ
์ธ ๋ฅผ ์ ๋ฌํ๋ค๋ ๊ฒ์ ๋ํ๋ด๋ ๋ธ๋ก์
๋๋ค. ์ฐ๋ฆฌ๋ Engins ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค remote_addr ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ผ์ด๋ค string.format. ๊ทธ๊ฒ์ ๋์ผํฉ๋๋ค sprintf, Lua์์๋ง, ์ค์ง ์ ํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ณ ๊ฐ์๊ฒ ์ ๊ณตํฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ ๋๋ค.

ํ์ง๋ง ํ์ค ์ธ๊ณ๋ก ๋์์๋ณด์ฃ . ์๋ฌด๋ Hello World๋ฅผ ํ๋ก๋์
์ ๋ฐฐํฌํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ค๋ฅธ ๊ณณ์ผ๋ก ๊ฐ์ ๋๋ถ๋ถ์ ์๊ฐ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ ๋ณด๋
๋๋ค.

๊ทธ๋ฅ ์์์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ด๊ฑด ๋ณ๋ก ์ข์ง ์์์. ์ฌ์ฉ์๊ฐ 100.000๋ง ๋ช
์ด ๋๋ฉด ์ฐ๋ฆฌ์๊ฒ๋ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ก ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณ ์์ด ์ฌ์ง์ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ๋จ์ํ ๊ฒ์๋ง ํ๋ ๊ฒ์ด ์๋๋ผ ํค์๋๋ฅผ ํ์ฅํ์ฌ ์ฌ์ฉ์๊ฐ "์๋ผ ๊ณ ์์ด"๋ฅผ ๊ฒ์ํ๋ฉด ๊ณ ์์ด, ํธ์ด ๋ง์ ๊ณ ์์ด ๋ฑ์ ์ฐพ์ ๊ฒ์
๋๋ค. ๋จผ์ ๋ฐฑ์๋์์ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

๋ ์ค๋ง ์ฌ์ฉํ๋ฉด GET ๋งค๊ฐ๋ณ์๋ฅผ ์๋ฌด ๋ฌธ์ ์์ด ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๋ค์์ผ๋ก, ํค์๋์ ํ์ฅ์๋ฅผ ์ฌ์ฉํ์ฌ ํ
์ด๋ธ์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ผ๋ฐ SQL ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ฐ๋จํ์ฃ . ์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

๋์๊ด ์ฐ๊ฒฐ resty.mysql, ์ด๋ฏธ ํคํธ์ ๋ค์ด์์ต๋๋ค. ์๋ฌด๊ฒ๋ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ค๋น๋์ด ์์ต๋๋ค. ์ฐ๊ฒฐ ๋ฐฉ๋ฒ๊ณผ SQL ์ฟผ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ง์ ํฉ๋๋ค.

์ฌ๊ธฐ๋ ์กฐ๊ธ ๋ฌด์ญ์ง๋ง ๋ชจ๋ ๊ฒ ์ ๋์๊ฐ์. ์ฌ๊ธฐ์๋ 10์ด ํ๊ณ์
๋๋ค. ์ฐ๋ฆฌ๋ 10๊ฐ์ ๋ ์ฝ๋๋ฅผ ๊บผ๋
๋๋ค. ์ฐ๋ฆฌ๋ ๊ฒ์ผ๋ฅด๊ณ , ๋ ๋ง์ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ง ์์ต๋๋ค. SQL์ ์ ํ์ ์์ด๋ฒ๋ ธ๋ค์.
๋ค์์ผ๋ก ๋ชจ๋ ์์ฒญ์ โโ๋ํ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ง์ ์ฟผ๋ฆฌ๋ฅผ ์์งํ์ฌ Lua ํ
์ด๋ธ์ ์ฑ์๋๋ค. reqs, ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ํฉ๋๋ค ngx.location.capture_multi.

์ด ๋ชจ๋ ์์ฒญ์ ๋ณ๋ ฌ๋ก ์งํ๋๋ฉฐ, ๋ต๋ณ์ ์ฐ๋ฆฌ์๊ฒ ๋ฐํ๋ฉ๋๋ค. ์คํ ์๊ฐ์ ๊ฐ์ฅ ๋๋ฆฐ ๊ฒ์ ์๋ต ์๊ฐ๊ณผ ๊ฐ์ต๋๋ค. ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ 50๋ฐ๋ฆฌ์ด ์์ ๋ชจ๋ ์๋ตํ๊ณ , 50๊ฐ์ ์์ฒญ์ ๋ณด๋ธ๋ค๋ฉด, XNUMX๋ฐ๋ฆฌ์ด ์์ ์๋ต์ ๋ฐ๊ฒ ๋ ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ๋ ๊ฒ์ผ๋ฅด๊ณ HTTP ์ฒ๋ฆฌ์ ์บ์ฑ์ ์์ฑํ๊ณ ์ถ์ง ์๊ธฐ ๋๋ฌธ์ NGINX๊ฐ ๋ชจ๋ ์์
์ ๋์ ์ฒ๋ฆฌํ๋๋ก ํ ๊ฒ์
๋๋ค. ๋ณด์๋ค์ํผ ์์ฒญ์ด ์์์ต๋๋ค. url/fetch, ์ฌ๊ธฐ ๊ทธ๋:

์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ฐ๋จํ๊ฒ ๋ง๋ญ๋๋ค proxy_pass์บ์ํ ์์น์ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ฐ๋ฆฌ์๊ฒ ์ ๋ฆฌํฉ๋๋ค.
ํ์ง๋ง ์ด๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ์์ด๋์ด๋ ๋ชจ๋ ๊ฒ์ JSON์ผ๋ก ์ง๋ ฌํํ๋ ๊ฒ์ ๋๋ค. ๊ฐ๋จํ๊ณ ๋ ์ค๋ก ๊ฐ๋ฅํฉ๋๋ค. Content-Type์ ๋ฐํํ๊ณ JSON์ ๋ฐํํฉ๋๋ค.
ํ์ง๋ง ํ ๊ฐ์ง ์ด๋ ค์์ด ์์ต๋๋ค. ์ฌ์ฉ์๋ JSON์ ์ฝ๊ณ ์ถ์ดํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋ฐํธ์๋ ๊ฐ๋ฐ์๋ฅผ ์ ์นํด์ผ ํฉ๋๋ค. ๋๋ก๋ ์ฒ์์๋ ํ๊ณ ์ถ์ง ์์ ๋๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ SEO ์ ๋ฌธ๊ฐ๋ค์ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ฐพ๊ณ ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ค์ํ์ง ์๋ค๊ณ ๋งํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ค์๊ฒ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๋๋ผ๋, ๊ทธ๋ค์ ๊ฒ์ ์์ง์ด ์ฐ๋ฆฌ์ ๋ํ ์ด๋ค ๊ฒ๋ ์์ธํ์ง ์๋๋ค๊ณ ๋งํ ๊ฒ์ ๋๋ค.
์ด์ ๋ํด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ๋ฌผ๋ก , ์ฐ๋ฆฌ๋ ์ฌ์ฉ์์๊ฒ HTML์ ์ ๊ณตํ ๊ฒ์
๋๋ค. ์๋์ผ๋ก ์์ฑํ๋ ๊ฒ์ ์ฝ์ง ์์ผ๋ฏ๋ก ํ
ํ๋ฆฟ์ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค. ์ด์ ๋ํ ๋์๊ด์ด ์์ต๋๋ค. lua-resty-template.

์๋ง๋ OPM์ด๋ผ๋ ๋ฌด์์ด ์ธ ๊ธ์๋ฅผ ๋ณธ ์ ์ด ์์ ๊ฒ๋๋ค. OpenResty์๋ ์์ฒด ํจํค์ง ๊ด๋ฆฌ์๊ฐ ํจ๊ป ์ ๊ณต๋๋ฉฐ ์ด๋ฅผ ํตํด ํนํ ๋ค์ํ ๋ชจ๋์ ์ค์นํ ์ ์์ต๋๋ค. lua-resty-template. ์ด๋ Django ํ
ํ๋ฆฟ๊ณผ ๋น์ทํ ๊ฐ๋จํ ํ
ํ๋ฆฟ ์์ง์
๋๋ค. ์ฌ๊ธฐ์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ณ์๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ ๊ฒ์ด ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ์ ๋๋ค.

์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ ์ค๋ก ๋ค์ ํ
ํ๋ฆฟ์ ๋ ๋๋งํ์ต๋๋ค. ์ฌ์ฉ์๋ ๊ณ ์์ด๋ฅผ ๋ฐ์์ ํ๋ณตํ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์์ฒญ์ ํ๋ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ์๋ผ ๊ณ ์์ด์ ํจ๊ป ๋ฌผ๊ฐ๋ ๋ฐ์์ต๋๋ค. ๋๊ฐ ์๊ฒ ๋๊ฐ, ์ด์ฉ๋ฉด ๊ทธ๋ ์ ํํ ๊ทธ๊ฒ์ ์ฐพ๊ณ ์์์์ง๋ ๋ชจ๋ฅด์ง๋ง, ์์ฒญ์ ์ฌ๋ฐ๋ฅด๊ฒ ํํํ์ง ๋ชปํ์์ง๋ ๋ชจ๋ฅธ๋ค.
๋ชจ๋ ๊ฒ์ด ๋ฉ์ง์ง๋ง, ์์ง ๊ฐ๋ฐ ์ค์ด๋ผ ์ฌ์ฉ์์๊ฒ ๊ณต๊ฐํ๊ณ ์ถ์ง ์์ต๋๋ค. ์น์ธ์ ์งํํด ๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฅผ ์ํด OpenResty ๊ด์ ์์ NGINX๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋จ๊ณ - ACCESS์ฌ์ฉ์๊ฐ ๋ฐฉ๊ธ ๋์ฐฉํ์ ๋, ํค๋, IP ์ฃผ์, ๊ธฐํ ๋ฐ์ดํฐ๋ฅผ ํตํด ์ฌ์ฉ์๋ฅผ ์ดํด๋ณด์์ต๋๋ค. ๋ง์์ ๋ค์ง ์์ผ๋ฉด ๋ฐ๋ก ์๋ผ๋ผ ์๋ ์์ด์. ์ด๋ ์น์ธ์ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์์ฒญ์ด ๋ง์ ๊ฒฝ์ฐ ์ด ๋จ๊ณ์์ ์ฝ๊ฒ ์์ฒญ์ ์ฐจ๋จํ ์ ์์ต๋๋ค.
- ๊ณ ์ณ ์ฐ๊ธฐ. ์ผ๋ถ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์์ฑํ๊ณ ์์ต๋๋ค.
- ํจ์ ๋. ์ฐ๋ฆฌ๋ ์ฌ์ฉ์์๊ฒ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ํค๋ ํํฐ. ์๋ต ํค๋๋ฅผ ๊ต์ฒดํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ค๋ฉด
proxy_pass์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๊ธฐ ์ ์ ์ผ๋ถ ํค๋๋ฅผ ๋ค์ ์์ฑํ ์ ์์ต๋๋ค. - ๋ฐ๋ ํํฐ. ์ฐ๋ฆฌ๋ ์ ์ฒด๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ก โ ๋ก๊น . ์ถ๊ฐ์ ์ธ ๊ณ์ธต ์์ด Elasticsearch์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ฐ๋ฆฌ์ ์น์ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:

์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ฑฐ๊ธฐ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค. location, ์ฐ๋ฆฌ๊ฐ ์ด์ ์ ์ค๋ช
ํ ๋๋ก, ๊ฑฐ๊ธฐ์ ๋ค์ ์ฝ๋๋ฅผ ๋ฃ์์ต๋๋ค:

์ฟ ํค ํ ํฐ์ด ์๋์ง ํ์ธํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ์น์ธ์ ์ํด ์ด๋ฅผ ํ๊ธฐํฉ๋๋ค. ์ฌ์ฉ์๋ ๋๋ํด์ ์ฟ ํค ํ ํฐ์ ์ค์ ํด์ผ ํ๋ค๋ ๊ฒ์ ์ง์ํ ์ ์์ต๋๋ค. ๊ทธ๋์ Redis์๋ ๋ฃ์ด๋ณด๊ฒ ์ต๋๋ค.

Redis๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ ๋งค์ฐ ๊ฐ๋จํ๋ฉฐ ๋ค๋ฅธ ์ธ์ด์ ๋ค๋ฅด์ง ์์ต๋๋ค. ๋์์, ์ฌ๊ธฐ์ ๊ฑฐ๊ธฐ์ ๋ชจ๋ ์
์ถ๋ ฅ์ ๋น์ฐจ๋จ์
๋๋ค. ๋๊ธฐ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํฉ๋๋ค. gevent์ ๋น์ทํ๋ฐ, ์ข ๋ ์๋ ๋ฒ์ ์
๋๋ค.

๊ถํ ๋ถ์ฌ ์์ฒด๋ฅผ ํด ๋ณด๊ฒ ์ต๋๋ค.

์์ฒญ ๋ณธ๋ฌธ์ ์ฝ์ด์ผ ํ๋ค๊ณ ๋งํฉ๋๋ค. POST ์ธ์๋ฅผ ๋ฐ์์ ๋ก๊ทธ์ธ๊ณผ ๋น๋ฐ๋ฒํธ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํฉ๋๋ค. ๋ง์ฝ ์ ๋ณด๊ฐ ์ ํํ์ง ์๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์น์ธ์ ์ํด ์ ๋ณด๋ฅผ ๋ณด๋
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ๊ทธ๋ค์ด ๋ง๋ค๋ฉด, ์ฐ๋ฆฌ๋ ํ ํฐ์ Redis์ ์๋๋ค:

์ฟ ํค๋ฅผ ์ค์ ํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. ์ด ์์
๋ ๋ ์ค๋ก ์ด๋ฃจ์ด์ง๋๋ค.

๊ฐ๋จํ๊ณ ์ถ์ธก์ ์ธ ์์
๋๋ค. ๋ฌผ๋ก , ์ฌ๋๋ค์๊ฒ ๊ณ ์์ด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์๋น์ค๋ ๋ง๋ค์ง ์์ ๊ฑฐ์์. ์ฐ๋ฆฌ๋ฅผ ์๋ ์ฌ๋์ ์๋ฌด๋ ์์ง๋ง์. ๊ทธ๋ฌ๋ฉด ํ๋ก๋์
์์ ๋ฌด์์ ํ ์ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ์ต์ํ์ ๋ฐฑ์๋. ๋๋ก๋ ๋ฐฑ์๋์ ์์ฃผ ์ ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ผ ํ ๋๊ฐ ์์ต๋๋ค. ์ด๋๊ฐ์ ๋ ์ง๋ฅผ ์ฝ์ ํด์ผ ํ๊ฑฐ๋, ์ด๋๊ฐ์ ๋ชฉ๋ก์ ์ถ๋ ฅํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ ์ฌ์ดํธ์ ์๋ ์ฌ์ฉ์ ์๋ฅผ ์ ๋ ฅํ๊ฑฐ๋, ์นด์ดํฐ๋ ํต๊ณ๋ฅผ ์ฒจ๋ถํด์ผ ํ ๋๊ฐ ์์ต๋๋ค. ๊ทธ๋ฐ ์์ ์ผ์ด์ฃ . ์์ฃผ ์ฝ๊ฒ ์ต์ํ์ ์กฐ๊ฐํ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋น ๋ฅด๊ณ , ์ฝ๊ณ , ๋ฉ์ง๊ฒ ๋ ๊ฒ๋๋ค.
- ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ. ๊ฐ๋ ์ฐ๋ฆฌ๋ ํ์ด์ง์ ๊ด๊ณ ๋ฅผ ์ฝ์ ํ๊ณ ์ถ์ ๋๊ฐ ์๋๋ฐ, ์ด๋๋ API ์์ฒญ์ ์ฌ์ฉํ์ฌ ์ด ๊ด๊ณ ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋งค์ฐ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด์ฌํ ์ผํ๊ณ ์๋ ๋ฐฑ์๋์ ๊ณผ๋ถํ๋ฅผ ์ฃผ์ง ์์ต๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ ธ๊ฐ์ ์กฐ๋ฆฝํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ช๋ช JS๋ฅผ ํ๋๋ก ๋ถ์ผ ์๋ ์๊ณ , ๋ฐ๋๋ก ๊ทธ๊ฒ์ ํ์ด์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๊ธฐ ์ ์ ์ฌ์ ์ฒ๋ฆฌํ ์๋ ์์ต๋๋ค.
- ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์ํ Facade. ์ด๊ฒ ์ญ์ ๋งค์ฐ ์ข์ ์ฌ๋ก์ด๊ณ , ์ ๊ฐ ๊ตฌํํ์ต๋๋ค. ๊ทธ ์ ์๋ ์ ์ ๋ณด๊ณ ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๊ตญ๋ด ๋ฒ์ธ์ ์ ๋ฐ ๊ฐ๋์ ๋ณด๊ณ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ํ์ฌ์ธ Tenzor์์ ์ผํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ผ์ฐํ
, ๊ถํ ๋ถ์ฌ ๋ฑ ๋ง์ ์์
์ ๋์ผํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์ํํ ์ ์๋ ์๋น์ค๋ฅผ ๋ง๋ค์์ต๋๋ค.
OpenResty๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์ฐ๊ฒฐํ๋ ์ ์ฐฉ์ ์ญํ ์ ํ๋ฉฐ ๋ชจ๋ ๊ฒ์ ๋ํ ๋จ์ผ ์ก์ธ์ค์ ๋จ์ผ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ง์ดํฌ๋ก์๋น์ค๋ Node.js, PHP, Python, Erlang ๋ฑ์ผ๋ก ์์ฑํ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ ๊ณณ์์ ๋์ผํ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ๊ณ ์ถ์ง ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ OpenResty๋ฅผ ์ ๋ฉด์ ์ค์นํ ์ ์์ต๋๋ค. - ํต๊ณ ๋ฐ ๋ถ์. ์ผ๋ฐ์ ์ผ๋ก NGINX๊ฐ ์ ๊ตฌ์ ์์ผ๋ฉฐ ๋ชจ๋ ์์ฒญ์ ์ด๋ฅผ ํต๊ณผํฉ๋๋ค. ์ด๊ณณ์ ์กฐ๋ฆฝํ๊ธฐ์ ๋งค์ฐ ํธ๋ฆฌํ ๊ณณ์ ๋๋ค. ์๋ฅผ ๋ค์ด Elasticsearch, Logstash์ ๊ฐ์ด ๋ฌด์ธ๊ฐ๋ฅผ ์ฆ์ ๊ณ์ฐํ์ฌ ์ด๋๊ฐ์ ๋ฃ์ ์๋ ์๊ณ , ๊ฐ๋จํ ๋ก๊ทธ์ ๊ธฐ๋กํ ๋ค์ ์ด๋๊ฐ๋ก ๋ณด๋ผ ์๋ ์์ต๋๋ค.
- ๋ค์ค ์ฌ์ฉ์ ์์คํ . ์๋ฅผ ๋ค์ด, ์จ๋ผ์ธ ๊ฒ์๋ ๋ง๋ค๊ธฐ ๋งค์ฐ ์ข์ต๋๋ค. ์ค๋ ์ผ์ดํํ์ด์์ Alexander Gladysh๋ OpenResty๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ํ๋กํ ํ์ ์ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํฉ๋๋ค.
- ์์ฒญ ํํฐ๋ง(WAF). ์์ฆ์ ์จ๊ฐ ์ข ๋ฅ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฉํ๋ฒฝ์ ๋ง๋๋ ๊ฒ์ด ์ ํ์ด๋ฉฐ, ์ด๋ฅผ ์ ๊ณตํ๋ ์๋น์ค๋ ๋ง์ต๋๋ค. OpenResty์ ๋์์ผ๋ก ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์์ฒญ์ ๊ฐ๋จํ๊ณ ์ฝ๊ฒ ํํฐ๋งํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฉํ๋ฒฝ์ ๋ง๋ค ์ ์์ต๋๋ค. Python์ ์ฌ์ฉํ๋ค๋ฉด PHP๋ ์ ํ ์ฃผ์ ๋์ง ์๋๋ค๋ ๊ฑธ ์๊ณ ๊ณ์ค ๊ฒ๋๋ค. ๋ฌผ๋ก ์ฝ์ ์ด๋๊ฐ์์ ์ง์ ์์ฑํ์ง ์๋ ํ ๋ง์ด์ฃ . MySQL๊ณผ Python์ด ์๋ค๋ ๊ฑธ ์๊ณ ๊ณ์์ฃ ? ์๋ง๋ ๊ทธ๋ค์ ์ฌ๊ธฐ์ ๋๋ ํ ๋ฆฌ ํ์์ ์๋ํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฝ์ ํ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ํ๋ฐํธ์๋์์ ์์ฌ์ค๋ฌ์ด ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ณ ์ ๋ ดํ๊ฒ ํํฐ๋งํ ์ ์์ต๋๋ค.
- ์ง์ญ ์ฌํ. OpenResty๋ NGINX ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ณด๋์ค๊ฐ ์์ต๋๋ค. NGINX ์ปค๋ฎค๋ํฐ. ๊ท๋ชจ๊ฐ ๋งค์ฐ ํฌ๊ณ ์ฒ์์ ๊ถ๊ธํดํ ์ง๋ฌธ ์ค ์๋น์๋ NGINX ์ปค๋ฎค๋ํฐ์์ ์ด๋ฏธ ๋ต๋ณํ์ต๋๋ค.
Lua ๊ฐ๋ฐ์๋ค. ์ด์ HighLoad++ ๊ต์ก์ ์ฐธ์ํ ์ฌ๋๋ค๊ณผ ์ด์ผ๊ธฐ๋ฅผ ๋๋์๋๋ฐ, Tarantool๋ง Lua๋ก ์์ฑ๋์๋ค๊ณ ๋ค์์ต๋๋ค. ์ฌ์ค์ด ์๋๋๋ค. ๋ฃจ์์ด๋ก ์ฐ์ฌ์ง ๋ด์ฉ์ด ๋ง์ต๋๋ค. ์: OpenResty, Prosody XMPP ์๋ฒ, Love2D ๊ฒ์ ์์ง, Warcraft์์ ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ Lua ๋ฑ. Lua ๊ฐ๋ฐ์๊ฐ ๋ง๊ณ , ๊ท๋ชจ๊ฐ ํฌ๊ณ ๋ฐ์์ด ๋น ๋ฅธ ์ปค๋ฎค๋ํฐ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค. Lua์ ๋ํ ๋ชจ๋ ์ง๋ฌธ์ ๋ช ์๊ฐ ๋ด์ ํด๊ฒฐ๋์์ต๋๋ค. ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ๊ธ์ ์ฐ๋ฉด ๋ช ๋ถ ์์ ์ด๋ฏธ ๋ง์ ๋ต๋ณ์ด ์ต๋๋ค. ๋ฌด์จ ๋ด์ฉ์ธ์ง, ์ด๋ป๊ฒ ํ๋์ง, ๋ฌด์์ด ๋ฌด์์ธ์ง ์ค๋ช ํ๋ ๋ต๋ณ์ด์. ์ ๋ง ๋ฉ์ง๋ค์. ์ํ๊น๊ฒ๋ ์ด์ฒ๋ผ ์น์ ํ๊ณ ๋ฐ๋ปํ ์ปค๋ฎค๋ํฐ๊ฐ ๋ชจ๋ ๊ณณ์ ์๋ ๊ฒ์ ์๋๋๋ค.
OpenResty์๋ GitHub์ด ์๋๋ฐ, ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ๊ฑฐ๊ธฐ์ ์ด์๋ฅผ ์ด ์ ์์ต๋๋ค. Google ๊ทธ๋ฃน์๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฅผ ๋ ผ์ํ ์ ์๋ ๋ฉ์ผ๋ง ๋ชฉ๋ก์ด ์๊ณ , ์ค๊ตญ์ด๋ก ๋ ๋ฉ์ผ๋ง ๋ชฉ๋ก๋ ์์ต๋๋ค. ์์ด๋ฅผ ๋ชปํ๋๋ผ๋ ์ค๊ตญ์ด๋ ์ ์ ์์ ๊ฒ๋๋ค.
๊ฒฐ๊ณผ
- OpenResty๊ฐ ์น์ ๋ง์ถฐ ๋ง๋ค์ด์ง ๋งค์ฐ ํธ๋ฆฌํ ํ๋ ์์ํฌ๋ผ๋ ์ ์ ์ ๋ฌํ๊ณ ์ถ์ต๋๋ค.
- ์ฝ๋๊ฐ ์ฐ๋ฆฌ๊ฐ ์ฐ๋ ๊ฒ๊ณผ ๋น์ทํ๊ณ , ์ธ์ด๊ฐ ๋งค์ฐ ๊ฐ๋จํ๊ณ ๋จ์ํ๊ธฐ ๋๋ฌธ์ ์ง์ ์ฅ๋ฒฝ์ด ๋ฎ์ต๋๋ค.
- ์ฝ๋ฐฑ ์์ด ๋น๋๊ธฐ I/O๋ฅผ ์ ๊ณตํ๋ฏ๋ก NodeJS์์ ๊ฐ๋ ์์ฑํ ์ ์๋ ๋๋ค(noodle)์ ์์ต๋๋ค.
- NGINX์ ํ์ํ ๋ชจ๋๊ณผ ์ฝ๋๋ง ์์ผ๋ฉด ๋๋ฏ๋ก ๋ฐฐํฌ๊ฐ ์ฝ๊ณ , ๋ชจ๋ ๊ฒ์ด ๋ฐ๋ก ์๋ํฉ๋๋ค.
- ๊ท๋ชจ๊ฐ ํฌ๊ณ ๋ฐ์์ด ๋น ๋ฅธ ์ปค๋ฎค๋ํฐ์ ๋๋ค.
๋ผ์ฐํ ์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ์์ธํ ์ค๋ช ํ์ง ์์๋๋ฐ, ๊ทธ๋ฌ๋ฉด ๋งค์ฐ ๊ธด ์ด์ผ๊ธฐ๊ฐ ๋ ๊ฒ๋๋ค.
๊ฐ์ฌํฉ๋๋ค!

์ถ์ฒ : habr.com
