๐พ [CS] ํ๋ก์ ํจํด๊ณผ ํ๋ก์ ์๋ฒ
1๏ธโฃ ํ๋ก์ ํจํด
- ํ๋ก์ ํจํด(proxy pattern)์ ๋์ ๊ฐ์ฒด(subject)์ ์ ๊ทผํ๊ธฐ ์ ๊ทธ ์ ๊ทผ์ ๋ํ ํ๋ฆ์ ๊ฐ๋ก์ฑ ํด๋น ์ ๊ทผ์ ํํฐ๋งํ๊ฑฐ๋ ์์ ํ๋ ๋ฑ์ ์ญํ ์ ํ๋ ๊ณ์ธต์ ์๋ ๋์์ธ ํจํด์ ๋๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ์ฒด์ ์์ฑ, ๋ณํ ๋ฑ์ ๋ณด์ํ๋ฉฐ ๋ณด์, ๋ฐ์ดํฐ ๊ฒ์ฆ, ์บ์ฑ, ๋ก๊น
์ ์ฌ์ฉํฉ๋๋ค.
- ์ด๋ ์์ ์ค๋ช ํ ํ๋ก์ ๊ฐ์ฒด๋ก ์ฐ์ด๊ธฐ๋ ํ์ง๋ง ํ๋ก์ ์๋ฒ๋ก๋ ํ์ฉ๋ฉ๋๋ค.
์ฉ์ด: ํ๋ก์ ์๋ฒ์์์ ์บ์ฑ
์บ์ ์์ ์ ๋ณด๋ฅผ ๋ด์๋๊ณ , ์บ์ ์์ ์๋ ์ ๋ณด๋ฅผ ์๊ตฌํ๋ ์์ฒญ์ ๋ํด ๋ค์ ์ ๋ฉ๋ฆฌ ์๋ ์๊ฒฉ ์๋ฒ์ ์์ฒญํ์ง ์๊ณ ์บ์ ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ด๋ฅผ ํตํด ๋ถํ์ํ๊ฒ ์ธ๋ถ์ ์ฐ๊ฒฐํ์ง ์๊ธฐ ๋๋ฌธ์ ํธ๋ํฝ์ ์ค์ผ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
2๏ธโฃ ํ๋ก์ ์๋ฒ
- ํ๋ก์ ์๋ฒ(proxy server)๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์์ ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ํตํด ๋ค๋ฅธ ๋คํธ์ํฌ ์๋น์ค์ ๊ฐ์ ์ ์ผ๋ก ์ ์ํ ์ ์๊ฒ ํด์ฃผ๋ ์ปดํจํฐ ์์คํ ์ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฆฌํต๋๋ค.
ํ๋ก์ ์๋ฒ๋ก ์ฐ๋ nginx
- nginx๋ ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ์ ๋ค์์ ์ฐ๊ฒฐ์ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅํ ์น ์๋ฒ์ด๋ฉฐ, ์ฃผ๋ก Node.js ์๋ฒ ์๋จ์ ํ๋ก์ ์๋ฒ๋ก ํ์ฉ๋ฉ๋๋ค.
- Node.js์ ์ฐฝ์์ ๋ผ์ธ์ธ ๋ฌ์ ๋ค์๊ณผ ๊ฐ์ด ๋งํ์ต๋๋ค โNode.js์ ๋ฒํผ ์ค๋ฒํ๋ก์ฐ ์ทจ์ฝ์ ์ ์๋ฐฉํ๊ธฐ ์ํด์๋ nginx๋ฅผ ํ๋ก์ ์๋ฒ๋ก ์๋จ์ ๋๊ณ Node.js๋ฅผ ๋ค์ชฝ์ ๋๋ ๊ฒ์ด ์ข๋ค.โ๋ผ๊ณ ํ ๊ฒ์
๋๋ค.
- ์ด๋ฌํ ๋ง์ Node.js ์๋ฒ๋ฅผ ์ด์ํ ๋ ๊ต๊ณผ์์ฒ๋ผ ์ฐธ๊ณ ๋์ด ๋ง์ ์ฌ๋์ด ์ด๋ ๊ฒ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค.
- Node.js ์๋ฒ๋ฅผ ๊ตฌ์ถํ ๋ ์๋จ์ nginx๋ฅผ ๋๋ ๊ฒ์ด์ฃ .
- ์ด๋ฅผ ํตํด ์ต๋ช ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ผ๋ก ์๋ฒ์ ์ ๊ทผํ๋ ๊ฒ์ ์ฐจ๋จํ๊ณ , ๊ฐ์ ์ ์ผ๋ก ํ ๋จ๊ณ๋ฅผ ๋ ๊ฑฐ์น๊ฒ ๋ง๋ค์ด์ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
- Node.js ์๋ฒ๋ฅผ ๊ตฌ์ถํ ๋ ์๋จ์ nginx๋ฅผ ๋๋ ๊ฒ์ด์ฃ .
- ์ด๋ฌํ ๋ง์ Node.js ์๋ฒ๋ฅผ ์ด์ํ ๋ ๊ต๊ณผ์์ฒ๋ผ ์ฐธ๊ณ ๋์ด ๋ง์ ์ฌ๋์ด ์ด๋ ๊ฒ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค.
- ์์ ๊ทธ๋ฆผ์ฒ๋ผ nginx๋ฅผ ํ๋ก์ ์๋ฒ๋ก ๋ค์ ์ค์ ํฌํธ๋ฅผ ์จ๊ธธ ์ ์๊ณ ์ ์ ์์์ gzip ์์ถํ๊ฑฐ๋, ๋ฉ์ธ ์๋ฒ ์๋จ์์์ ๋ก๊น ์ ํ ์๋ ์์ต๋๋ค.
์ฉ์ด: ๋ฒํผ ์ค๋ฒํ๋ก์ฐ
๋ฒํผ๋ ๋ณดํต ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค. ์ด๋ ์ฌ์ฉ๋์ง ์์์ผ ํ ์์ญ์ ๋ฐ์ดํฐ๊ฐ ๋ฎ์ด์์ด์ ธ ์ฃผ์, ๊ฐ์ ๋ฐ๊พธ๋ ๊ณต๊ฒฉ์ด ๋ฐ์ํ๊ธฐ๋ ํฉ๋๋ค.
์ฉ์ด: gzip ์์ถ
LZ77๊ณผ Huffman ์ฝ๋ฉ์ ์กฐํฉ์ธ DEFLATE ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์์ถ ๊ธฐ์ ์ ๋๋ค.
gzip ์์ถ์ ํ๋ฉด ๋ฐ์ดํฐ ์ ์ก๋์ ์ค์ผ ์ ์์ง๋ง, ์์ถ์ ํด์ ํ์ ๋ ์๋ฒ์์์ CPU ์ค๋ฒ ํค๋๋ ์๊ฐํด์ gzip ์์ถ ์ฌ์ฉ ์ ๋ฌด๋ฅผ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
ํ๋ก์ ์๋ฒ๋ก ์ฐ๋ CloudFlare
- CloudFlare๋ ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ์๋ฒ๊ฐ ์๊ณ ์ด๋ฅผ ํตํด ์ด๋ ํ ์์คํ ์ ์ฝํ ์ธ ์ ๋ฌ์ ๋น ๋ฅด๊ฒ ํ ์ ์๋ CDN ์๋น์ค์ ๋๋ค.
- CloudFlare๋ ์น ์๋ฒ ์๋จ์ ํ๋ก์ ์๋ฒ๋ก ๋์ด DDOS ๊ณต๊ฒฉ ๋ฐฉ์ด๋ HTTPS ๊ตฌ์ถ์ ์ฐ์
๋๋ค.
- ๋ํ, ์๋น์ค๋ฅผ ๋ฐฐํฌํ ์ดํ์ ํด์ธ์์ ๋ฌด์๊ฐ ์์ฌ์ค๋ฌ์ด ํธ๋ํฝ์ด ๋ง์ด ๋ฐ์ํ๋ฉด ์ด ๋๋ฌธ์ ๋ง์ ํด๋ผ์ฐ๋ ์๋น์ค ๋น์ฉ์ด ๋ฐ์ํ ์๋ ์๋๋ฐ, ์ด๋ CloudFlare๊ฐ ์์ฌ์ค๋ฌ์ด ํธ๋ํฝ์ธ์ง๋ฅผ ๋จผ์ ํ๋จํด CAPTCHA ๋ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฅผ ์ผ์ ๋ถ๋ถ ๋ง์์ฃผ๋ ์ญํ ๋ ์ํํฉ๋๋ค.
- ์์ ๊ทธ๋ฆผ์ฒ๋ผ ์ฌ์ฉ์, ํฌ๋กค๋ฌ, ๊ณต๊ฒฉ์๊ฐ ์์ ์ ์น ์ฌ์ดํธ์ ์ ์ํ๊ฒ ๋ ํ ๋ฐ, ์ด๋ CloudFlare๋ฅผ ํตํด ๊ณต๊ฒฉ์๋ก๋ถํฐ ๋ณดํธํ ์ ์์ต๋๋ค.
DDOS ๊ณต๊ฒฉ ๋ฐฉ์ด
- DDOS๋ ์งง์ ๊ธฐ๊ฐ ๋์ ๋คํธ์ํฌ์ ๋ง์ ์์ฒญ์ ๋ณด๋ด ๋คํธ์ํฌ๋ฅผ ๋ง๋น์์ผ ์น ์ฌ์ดํธ์ ๊ฐ์ฉ์ฑ์ ๋ฐฉํดํ๋ ์ฌ์ด๋ฒ ๊ณต๊ฒฉ ์ ํ์ ๋๋ค.
- CloudFlare๋ ์์ฌ์ค๋ฌ์ด ํธ๋ํฝ, ํนํ ์ฌ์ฉ์๊ฐ ์ ์ํ๋ ๊ฒ์ด ํ๋ ์์คํ ์ ํตํด ์ค๋ ํธ๋ํฝ์ ์๋์ผ๋ก ์ฐจ๋จํด์ DDOS ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค.
- CloudFlare์ ๊ฑฐ๋ํ ๋คํธ์ํฌ ์ฉ๋๊ณผ ์บ์ฑ ์ ๋ต์ผ๋ก ์๊ท๋ชจ DDOS ๊ณต๊ฒฉ์ ์ฝ๊ฒ ๋ง์๋ผ ์ ์์ผ๋ฉฐ ์ด๋ฌํ ๊ณต๊ฒฉ์ ๋ํ ๋ฐฉํ๋ฒฝ ๋์๋ณด๋๋ ์ ๊ณตํฉ๋๋ค.
HTTPS ๊ตฌ์ถ
- ์๋ฒ์์ HTTPS๋ฅผ ๊ตฌ์ถํ ๋ ์ธ์ฆ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถํ ์๋ ์์ต๋๋ค.
- ํ์ง๋ง CloudFlare๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๋์ ์ธ์ฆ์ ์ค์น ์์ด ์ข ๋ ์์ฝ๊ฒ HTTPS๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์ฉ์ด: CDN(Content Delivery Network)
๊ฐ ์ฌ์ฉ์๊ฐ ์ธํฐ๋ท์์ ์ ์ํ๋ ๊ณณ๊ณผ ๊ฐ๊น์ด ๊ณณ์์ ์ฝํ ์ธ ๋ฅผ ์บ์ฑ ๋๋ ๋ฐฐํฌํ๋ ์๋ฒ ๋คํธ์ํฌ๋ฅผ ๋งํฉ๋๋ค.
์ด๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ์น ์๋ฒ๋ก๋ถํฐ ์ฝํ ์ธ ๋ฅผ ๋ค์ด๋ก๋ํ๋ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค.
CORS์ ํ๋ฐํธ์ํธ์ ํ๋ก์ ์๋ฒ
- CORS(Cross-Origin Resource Sharing)๋ ์๋ฒ๊ฐ ์น ๋ธ๋ผ์ฐ์ ์์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ ๋ ๋ค๋ฅธ ์ค๋ฆฌ์ง์ ํตํด ๋ก๋ํ์ง ๋ชปํ๊ฒ ํ๋ HTTP ํค๋ ๊ธฐ๋ฐ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
- ํ๋ฐํธ์๋ ๊ฐ๋ฐ ์ ํ๋ฐํธ์๋ ์๋ฒ๋ฅผ ๋ง๋ค์ด์ ๋ฐฑ์๋ ์๋ฒ์ ํต์ ํ ๋ ์ฃผ๋ก CROS ์๋ฌ๋ฅผ ๋ง์ฃผ์น๋๋ฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๋ฐํธ์ํธ์์ ํ๋ก์ ์๋ฒ๋ฅผ ๋ง๋ค๊ธฐ๋ ํฉ๋๋ค.
์ฉ์ด: ์ค๋ฆฌ์ง
ํ๋กํ ์ฝ๊ณผ ํธ์คํธ ์ด๋ฆ, ํฌํธ์ ์กฐํฉ์ ๋งํฉ๋๋ค.
์๋ฅผ ๋ค์ดhttps://devkobe24.com:12010/test
๋ผ๋ ์ฃผ์์์ ์ค๋ฆฌ์ง์https://devkobe24.com:12010
์ ๋ปํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด ํ๋ฐํธ์๋์์๋ 127.0.0.1:3000์ผ๋ก ํ
์คํ
์ ํ๋๋ฐ ๋ฐฑ์๋ ์๋ฒ๋ 127.0.0.1:12010์ด๋ผ๋ฉด ํฌํธ ๋ฒํธ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ CROS ์๋ฌ๊ฐ ๋ํ๋ฉ๋๋ค.
- ์ด๋ ํ๋ก์ ์๋ฒ๋ฅผ ๋ฌ์ ํ๋ฐํธ์๋ ์๋ฒ์์ ์์ฒญ๋๋ ์ค๋ฆฌ์ง์ 127.0.0.1:12010์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ ๋๋ค.
- ์ฐธ๊ณ ๋ก 127.0.0.1์ด๋ ๋ฃจํ๋ฐฑ(loopback) IP๋ก, ๋ณธ์ธ IP ์๋ฒ์ IP๋ฅผ ๋ปํฉ๋๋ค.
- localhost๋ 127.0.0.1์ ์ฃผ์์ฐฝ์ ์ ๋ ฅํ๋ฉด DNS๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ๋ณธ์ธ PC ์๋ฒ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
- ์์ ๊ทธ๋ฆผ์ฒ๋ผ ํ๋ฐํธ์๋ ์๋ฒ ์๋จ์ ํ๋ก์ ์๋ฒ๋ฅผ ๋์
/api
์์ฒญ์ user API,/api2
์์ฒญ์ user API2์ ์์ฒญํ ์ ์์ต๋๋ค.- ์์ฐ์ค๋ CORS ์๋ฌ ํด๊ฒฐ์ ๋ฌผ๋ก ์ด๋ฉฐ ๋ค์ํ API ์๋ฒ์์ ํต์ ๋ ๋งค๋๋ฝ๊ฒ ํ ์ ์๋ ๊ฒ์ ๋๋ค.