๐ง ํ๋ก์ ์๋ฒ(Proxy Server)
Proxy๋ ๋๋ฆฌ๋ผ๋ ๋ป
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ํตํ ๋ ์๋ฒ์ ๋ฐ๋ก ํต์ ํ์ง ์๊ณ ํ๋ก์ ์๋ฒ๋ฅผ ํตํด ์๋ฒ์ ์ ๊ทผํ ์ ์๋ค. โก๏ธ ๋๋ฆฌ ์๋ฒ
์ผ๋ฐ ์ฌ์ฉ์๋ ์ง์ญ์ด ์ ํ๋์ด ์๋ ์๋น์ค๋ฅผ ์ด์ฉํ๊ธฐ ์ํด IP๋ฅผ ์ฐํํ๊ฑฐ๋, ์บ์๋ฅผ ํตํด ๋ ๋น ๋ฅธ ์ด์ฉ์ ํ๊ธฐ ์ํด ํ๋ก์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ค.
๐น ํ๋ก์ ์๋ฒ์ ์ข ๋ฅ
์์น์ ๋ฐ๋ผ Forward Proxy์ Reverse Proxy ๋๊ฐ์ง๋ก ๋๋๋ค.
๐บ Forward Proxy
ํด๋ผ์ด์ธํธ ๊ฐ๊น์ด์ ์์นํ ํ๋ก์ ์๋ฒ
ํด๋ผ์ด์ธํธ๋ฅผ ๋์ ํด ์๋ฒ์ ์์ฒญ์ ์ ๋ฌํ๋ค.
์ฃผ๋ก ์บ์ฑ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ฌ์ฉ์๊ฐ ๋น ๋ฅธ ์๋น์ค ์ด์ฉ์ ํ ์ ์๋๋ก ๋์์ค๋ค.
โก๏ธ Forward Proxy๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ด์
โ ์บ์ฑ์ ํตํด ๋น ๋ฅธ ์๋น์ค ์ด์ฉ ๊ฐ๋ฅ
์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๋์ผํ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ ์ฒซ ์๋ต ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ ์ฅํด๋๊ณ , ์ดํ ์๋ฒ์ ์ฌ์์ฒญ์ ๋ณด๋ด์ง ์์๋ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์๊ฒ ๋น ๋ฅด๊ฒ ์ ๋ฌํ ์ ์๋ค.
โ ๋ณด์
์๋ฒ์์ ํด๋ผ์ด์ธํธ์ IP์ถ์ ์ด ํ์ํ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์ IP๊ฐ ์๋ ํ๋ก์ ์๋ฒ์ IP๊ฐ ์ ๋ฌ๋๋ค. ์๋ฒ๊ฐ ์๋ต๋ฐ์ IP๋ ํ๋ก์ ์๋ฒ์ IP์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ์๊ฒ ํด๋ผ์ด์ธํธ๋ฅผ ์จ๊ธธ ์ ์๋ค.
๐บ Reverse Proxy
์๋ฒ ๊ฐ๊น์ด์ ์์นํ ํ๋ก์ ์๋ฒ์ด๋ค.
์๋ฒ๋ฅผ ๋์ ํ์ฌ ํด๋ผ์ด์ธํธ์ ์๋ต์ ์ ๊ณตํ๋ค.
โก๏ธ Reverse Proxy ์ฌ์ฉํ ๊ฒฝ์ฐ ์ด์
โ ๋ถ์ฐ์ฒ๋ฆฌ
ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ์์ ์ฌ์ฉ์๊ฐ ๋ง์์ ธ ์๋ฒ์ ๊ณผ๋ถํ๊ฐ ์ฌ ๊ฒฝ์ฐ๋ฅผ ์ํด ๋ถํ๋ฅผ ๋ถ์ฐํ ์ ์๋ค. ํ๋ก์ ์๋ฒ๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ฌ๋ฌ๋์ ์๋ฒ๋ก ์์ฒญ์ ๋๋์ด ์ ๋ฌํ๋ค.
โ ๋ณด์
Forward Proxy์๋ ๋ฐ๋๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์๋ฒ๋ฅผ ์จ๊ธธ ์ ์๋ค. ํด๋ผ์ด์ธํธ ์ ์ฅ์์๋ ์์ฒญ์ ๋ณด๋ด๋ ์๋ฒ๊ฐ ํ๋ก์ ์๋ฒ์ด๋ฏ๋ก ์ค์ ์๋ฒ IP ์ฃผ์๊ฐ ๋ ธ์ถ๋์ง ์๋๋ค.
๐ง ๋ก๋๋ฐธ๋ฐ์
์น ์๋ฒ๋ก ๋๋ฌด ๋ง์ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ๋ณด๋ผ ๊ฒฝ์ฐ ์๋ฒ๋ ๊ฐ๋นํ์ง ๋ชปํ๊ณ ๊ณผ๋ถํ๊ฐ ์ค๊ฒ ๋๋ค.
๊ณผ๋ถํ๊ฐ ์ฌ ๊ฒฝ์ฐ ์๋น์ค๋ฅผ ์ ์์ ์ผ๋ก ์ ๊ณตํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ฒ์ ํ๋์จ์ด๋ฅผ ์ ๊ทธ๋ ์ด๋ ํ๋ ๋ฐฉ๋ฒ๊ณผ ์๋ฒ์ ๊ฐ์๋ฅผ ๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๐น Scale-Up
๋ฌผ๋ฆฌ์ ์ผ๋ก ์๋ฒ์ ์ฌ์์ ์ ๊ทธ๋ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ด๋ค. (HDD, ๋ฉ๋ชจ๋ฆฌ ๋ฑ)
์์ง์ ์ค์ผ์ผ๋ง
๐บ ์ฅ์
์๋ฒ์ ์๋ฅผ ๋๋ฆฌ์ง ์๊ณ ํ๋ก๊ทธ๋จ ๊ตฌํ์ ์์ด ๋ณํ๊ฐ ํ์์๋ค.
๐บ ๋จ์
์๋ฒ์ ์ฌ์์ ๋์ด๋ ๋ฐ๋ ๊ต์ฅํ ๋์ ๋น์ฉ์ด ๋ ๋ค.
ํ๋์จ์ด์ ์ ๊ทธ๋ ์ด๋์๋ ํ๊ณ๊ฐ ์๋ค.
๐น Scale-Out
์๋ฒ์ ๊ฐ์๋ฅผ ๋๋ ค ํ๋์ ์๋ฒ์ ์ค ๋ถํ๋ฅผ ๋ถ์ฐ์ํค๋ ๋ฐฉ๋ฒ์ด๋ค.
์ํ์ ์ค์ผ์ผ๋ง
๋ง์ ์์ฒญ์ด ์ค๋๋ผ๋ ์ฌ๋ฌ๋์ ์๋ฒ๊ฐ ๋๋ ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ์ฌ์์ ๋์ด์ง ์๊ณ ๋ ๋น๊ต์ ์ ๋ ดํ ๋ฐฉ๋ฒ์ผ๋ก ๋ถํ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
Scale-Out ๋ฐฉ๋ฒ์ผ๋ก ์๋ฒ๋ฅผ ์ฌ๋ฌ๋ ์์ ๊ฒฝ์ฐ ์๋ฒ์ ์์ฒญ์ ๋๋ ์ฒ๋ฆฌํ ์ ์๋ ์ญํ ์ด ํ์ํ๋ค. โก๏ธ ๋ก๋ ๋ฐธ๋ฐ์
์ฌ๋ฌ ์๋ฒ์ ๊ตํต์ ๋ฆฌ๋ฅผ ํด์ฃผ๋ ๊ธฐ์ ํน์ ํ๋ก๊ทธ๋จ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โป ์ถ๊ฐํ์ต) Scale-Up vs Scale-Out
๐น ๋ก๋ ๋ฐธ๋ฐ์ ์ข ๋ฅ
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ด๋ค ๊ธฐ์ค์ผ๋ก ๋ถ์ฐํ๋์ ๋ฐ๋ผ ๋ค์ข ๋ฅ๋ก ๋๋๋ค.
L2 : ๋ฐ์ดํฐ ์ ์ก ๊ณ์ธต์์ Mac ์ฃผ์๋ฅผ ๋ฐํ์ผ๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑํ๋ค.
L3 : ๋คํธ์ํฌ ๊ณ์ธต์์ IP ์ฃผ์๋ฅผ ๋ฐํ์ผ๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑํ๋ค.
L4 : ์ ์ก ๊ณ์ธต์์ IP์ฃผ์์ Port๋ฅผ ๋ฐํ์ผ๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑํ๋ค.
L7 : ์์ฉ ๊ณ์ธต์์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐํ์ผ๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑํ๋ค. ex) ์๋ํฌ์ธํธ
๐ง ์คํ ์ค์ผ์ผ๋ง (AWS์ Auto Scaling ๊ธฐ์ค)
์คํ ์ค์ผ์ผ๋ง์ Scale-Out ๋ฐฉ์์ผ๋ก ์๋ฒ๋ฅผ ์ฆ์คํ ๋ ์๋์ผ๋ก ์๋ฒ(๋ฆฌ์์ค)๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ง์์ ธ ์๋ฒ์ ์ฒ๋ฆฌ ์๊ตฌ๋์ด ์ฆ๊ฐํ๋ฉด ์ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ๊ณ ๋ฐ๋๋ก ์ฒ๋ฆฌ ์๊ตฌ๋์ด ์ค์ด๋ค๋ฉด ๋ฆฌ์์ค๋ฅผ ๊ฐ์์์ผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํด์ค๋ค.
๐น Auto Scaling์ ์ฅ์
๐บ ๋์ ์ค์ผ์ผ๋ง
์ฌ์ฉ์์ ์๊ตฌ ์์ค์ ๋ฐ๋ผ ๋ฆฌ์์ค๋ฅผ ๋์ ์ผ๋ก ์ค์ผ์ผ๋ง ํ ์ ์๋ค.
์ค์ผ์ผ ์ ํ ์ ์๋ ์๋ฒ์ ์์ ์ ํ์ด ์๊ณ , ํ์ํ ๊ฒฝ์ฐ ์ฆ์ ์๋ฐฑ~์๋ง๋๋ก ๋๋ฆด ์ ์๋ค.
๐บ ๋ก๋ ๋ฐธ๋ฐ์ฑ
๋ก๋ ๋ฐธ๋ฐ์์ ํจ๊ป ์ฌ์ฉํ๋ฉด, ๋ค์์ EC2 ์ธ์คํด์ค์๊ฒ ์ํฌ๋ก๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ถ๋ฐฐํ ์ ์๋ค. ์ฌ์ฉ์๊ฐ ์ ์ํ ๊ท์น์ ๋ฐ๋ผ ์ํฌ๋ก๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
โป ์ํฌ๋ก๋(Workloads) : ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ฐฑ์๋ ํ๋ก์ธ์ค ๊ฐ์ด ๋น์ฆ๋์ค ๊ฐ์น๋ฅผ ์ฐฝ์ถํ๋ ๋ฆฌ์์ค ๋ฐ ์ฝ๋ ๋ชจ์
๐บ ํ๊ฒ ํธ๋ํน
์ฌ์ฉ์๋ ํน์ ํ๊ฒ์ ๋ํด์๋ง Auto Scaling์ ํ ์ ์๋ค.
์ฌ์ฉ์๊ฐ ์ค์ ํ ํ๊ฒ์ ๋ง์ถฐ EC2 ์ธ์คํด์ค์ ์๋ฅผ ์กฐ์ ํ๋ค.
๐บ ํฌ์ค ์ฒดํฌ์ ์๋ฒ ํ๋ฆฟ ๊ด๋ฆฌ
EC2 ์ธ์คํด์ค์ ํฌ์ค ์ฒดํฌ ์ํ๋ฅผ ๋ชจ๋ํฐ๋ง ํ ์ ์๋ค.
ํน์ ์ธ์คํด์ค์ ๋ฌธ์ ๊ฐ ๊ฐ์ง๋๋ฉด ์๋์ผ๋ก ๋ค๋ฅธ ์ธ์คํด์ค๋ก ๊ต์ฒดํ๋ค.
โป ์๋ฒ ํ๋ฆฟ(Fleet)
Fleet์ ์ง์ญํ๋ฉด ํจ๋๋ผ๋ ์๋ฏธ์ด๋ค.
๋ค์์ EC2 ์๋ฒ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํธ์คํ ํ๋ ๊ฒฝ์ฐ,
ํธ์คํ ํ๊ณ ์๋ ์ผ๋ จ์ EC2 ์งํฉ์ AWS๋ ์๋ฒ ํ๋ฆฟ(Fleet)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Auto Scaling์ ์ ์ ์์ค์ ์๋ฒ ํ๋ฆฟ ์ฉ๋์ ์ ์งํ๋๋ฐ ๋์์ ์ค๋ค.
Auto Scaling์ ํ๋ ๋๋ ๊ทธ ์ด์์ ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด ์๋ฒ ์ธ์คํด์ค ์ฒ๋ฆฌ์ฉ๋์ ์ ์งํ๊ธฐ ์ํด ๋ถ์กฑํ ๋งํผ ์๋ก์ด ์๋ฒ๋ฅผ ์ถ๊ฐ๋ก ์คํ์ํค๋ ๋ฐฉ์์ผ๋ก ์๋ฒ ํ๋ฆฟ์ ์ ์งํ๋ค.
โป ์ฐธ๊ณ ์๋ฃ) EC2 Fleet ์ค๋ช ์
๐น EC2 Auto Scaling ํ์ฉ
Auto Scaling์ EC2 ์ธ์คํด์ค ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ธ์คํด์ค์๋ ๊ฒฐํฉ์ด ๊ฐ๋ฅํ๋ค.
EC2 Auto Scaling์ ์ค์ง EC2 ์๋ฒ(๋ฆฌ์์ค)๋ง ๋์์ผ๋ก ํ๋ค.
๐บ ์์ ํ ํ๋ฆฟ(Launch Template)
์์ ํ ํ๋ฆฟ์ ํตํด์ ์ธ์คํด์ค๋ฅผ ํ์ฅํ ๋ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค.
์ธ์คํด์ค๋ฅผ ๋๋ฆด ๋๋ง๋ค ๋งค๋ฒ parameter๋ค์ ์ค์ ํ ํ์์์ด ์์ ํ ํ๋ฆฟ์ผ๋ก ์ฝ๊ฒ ์ค์ ํ๊ณ ํ์ฅํ ์ ์๋ค.
์์ ํ ํ๋ฆฟ์ AMI ID, ์ธ์คํด์ค ํ์ , ๋คํธ์ํฌ ์ธํ ๋ฑ์ ์ธ์คํด์ค ์์ฑ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
์ฌ๋ฌ ์์ ํ ํ๋ฆฟ ๋ฒ์ ์ ๋ง๋ค์ด์ ์๋ก ๋ค๋ฅธ launch parameter๋ฅผ ๊ฐ์ง ํ ํ๋ฆฟ์ ์ฌ๋ฌ๊ฐ ๋ง๋ค์์๋ค.
๐บ Auto Scaling ๊ทธ๋ฃน
์ค์ผ์ผ์ ๋ฐ ์ค์ผ์ผ๋ค์ด ๊ท์น์ ๋ชจ์์ด๋ค.
EC2 ์ธ์คํด์ค ์์๋ถํฐ ์ญ์ ํ๊ธฐ๊น์ง์ ๋ชจ๋ ๋์์ ๋ํ ๊ท์น๊ณผ ์ ์ฑ ์ ๋ด๊ณ ์๋ค.
๐บ Scaling ์ ํ
๐ฅ ์ธ์คํด์ค ๋ ๋ฒจ ์ ์ง
๊ธฐ๋ณธ ์ค์ผ์ผ๋ง ๊ณํ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
ํญ์ ์คํ ์ํ๋ฅผ ์ ์งํ๊ณ ์ ํ๋ ์ธ์คํด์ค์ ์๋ฅผ ์ง์ ํ ์ ์๋ค.
์ผ์ ํ ์์ ์ธ์คํด์ค๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ต์, ์ต๋, ์ํ๋ ์ฉ๋์ ๋์ผํ ๊ฐ์ ์ค์ ํ ์ ์๋ค.
๐ฅ ์๋ ์ค์ผ์ผ๋ง
๊ธฐ์กด Auto Scaling ๊ทธ๋ฃน์ ํฌ๊ธฐ๋ฅผ ์๋์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
์๋ ์ค์ผ์ผ๋ง์ ์ ํํ๋ฉด ์ฌ์ฉ์๊ฐ ์ง์ ์ฝ์์ด๋, API, CLI ๋ฑ์ ์ด์ฉํด ์๋์ผ๋ก ์ธ์คํด์ค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํด์ผ ํ๋ค. ์ด ๋ฐฉ์์ ์ถ์ฒํ์ง ์๋ ๋ฐฉ์์ด๋ค.
๐ฅ ์ผ์ ๋ณ ์ค์ผ์ผ๋ง
์์ธก ์ค์ผ์ผ๋ง ํธ๋ํฝ์ ๋ณํ๋ฅผ ์์ธกํ ์ ์๊ณ , ํน์ ์๊ฐ๋์ ์ด๋ ์ ๋์ ํธ๋ํฝ์ด ์ฆ๊ฐํ๋์ง ํจํด์ ํ์ ํ๊ณ ์๋ค๋ฉด ์ผ์ ๋ณ ์ค์ผ์ผ๋ง์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๐ฅ ๋์ ์ค์ผ์ผ๋ง
์์ ๋ณํ์ ๋์ํ์ฌ Auto Scaling ๊ทธ๋ฃน์ ์ฉ๋์ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค.
CloudWatch๊ฐ ๋ชจ๋ํฐ๋ง ํ๋ ์งํ๋ฅผ ์ถ์ ํ์ฌ ๊ฒฝ๋ณด ์ํ์ผ ๋ ์ํํ ์ค์ผ์ผ๋ง ๊ท์น์ ์ ํ๋ค.
์๋ฅผ ๋ค์ด CPU ์ฒ๋ฆฌ ์ฉ๋์ 80% ์์ค๊น์ง ๊ธ๋ฑํ ์ํ๊ฐ 5๋ถ ์ด์ ์ง์๋ ๊ฒฝ์ฐ Auto Scaling์ด ์๋๋ผ ์ ์๋ฒ๋ฅผ ์ถ๊ฐํ๋ค.
๋์ ์ค์ผ์ผ๋ง ์ ์ฑ ์ ์ ์ํ ๋๋ ์ค์ผ์ผ ์ ๊ณผ ์ค์ผ์ผ ๋ค์ด ๋ ๊ฐ์ง์ ์ ์ฑ ์ ์์ฑํด์ผ ํ๋ค.
๐ง TOMCAT
๐น Tomcat ์ด๋?
Apache์ฌ์์ ๊ฐ๋ฐํ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ง ์๋ ์คํ์์ค ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ด๋ค.
๐บ Tomcat์ ํน์ง
๐ฅ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ํ์ ์ธ ์คํ์์ค WAS(Web Application Server)์ด๋ค.
๐ฅ ์คํ์์ค์ด๊ธฐ ๋๋ฌธ์ ๋ผ์ด์ ์ค ๋น์ฉ ๋ถ๋ด์์ด ์ฌ์ฉํ ์ ์๋ค.
๐ฅ ๋ ๋ฆฝ์ ์ผ๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ Apache ๊ฐ์ ๋ค๋ฅธ ์น ์๋ฒ์ ์ฐ๋ํ์ฌ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค.
๐ฅ Spring Boot์ ๋ด์ฅ ์๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ค์น ๊ณผ์ ์์ด ์ฌ์ฉํ ์ ์๋ค.
๐ฅ spring-boot-starter-web ๋ชจ๋ ์์ ๋ด์ฅ๋์ด์๋ค.
๐ง Jetty
๐นJetty ๋?
Jetty๋ ์ดํด๋ฆฝ์ค ์ฌ๋จ์ HTTP ์๋ฒ์ด์ ์๋ฐ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๋ค.
๐บ Jetty์ ํน์ง
๐ฅ 2009๋ ์ดํด๋ฆฝ์ค ์ฌ๋จ์ผ๋ก ์ด์ ํ๋ฉฐ ์คํ์์ค ํ๋ก์ ํธ๋ก ๊ฐ๋ฐ๋์๋ค.
๐ฅ Jetty๋ ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋๋น ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ค.
๐ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด์ฅ ๊ฐ๋ฅํ๋ค.
๐ฅ ๊ฒฝ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ํ ์ฅ๋น, ์๊ท๋ชจ ํ๋ก๊ทธ๋จ์ ๋ ์ ํฉํ๋ค.
๐น Tomcat์์ Jetty๋ก ์๋ฒ ๋ณ๊ฒฝํ๊ธฐ
build.gradle ํ์ผ
โก๏ธ spring-boot-starter-web ์์กด์ฑ ์ถ๊ฐ๋ ๋ถ๋ถ์ Tomcat์ ์ ์ธ์์ผ์ค๋ค.
dependencies {
implementation ('org.springframework.boot:spring-boot-starter-web') {
exclude module: 'spring-boot-starter-tomcat'
}
}
Jetty ์์กด์ฑ์ ์ถ๊ฐํ๋ค.
implementation ('org.springframework.boot:spring-boot-starter-jetty')
Tomcat์ ๋ชจ๋์์ ์ ์ธ์์ผฐ๊ณ Jetty ๋ชจ๋์ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ฅผ ์คํํ ๋ Jetty๋ก ์คํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐ง NGINX
๐น NGINX๋?
๐ฅ NGINX๋ ๊ฐ๋ณ๊ณ ๋์ ์ฑ๋ฅ์ ๋ณด์ด๋ ์คํ์์ค ์น ์๋ฒ ์ํํธ์จ์ด์ด๋ค.
๐ฅ Igor Sysoev ๋ผ๋ ๋ฌ์์ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐํ๋ค.
๐ฅ ๋์์ ์ ์ฒ๋ฆฌ์ ํนํ๋ ์น ์๋ฒ ํ๋ก๊ทธ๋จ์ด๋ค.
๐ฅ Apache๋ณด๋ค ๋์์ด ๋จ์ํ๊ณ ์ ๋ฌ์ ์ญํ ๋ง ํ๊ธฐ ๋๋ฌธ์ ๋์์ ์ ์ฒ๋ฆฌ์ ํนํ๋์ด ์๋ค.
๐ฅ Nginx๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ ๋ฆฌ์์ค๋ฅผ ๋น ๋ฅด๊ฒ ์๋ต ํ๊ธฐ ์ํ ์น ์๋ฒ๋ก ์ฌ์ฉํ ์ ์๋ค.
๐บ NGINX์ ํน์ง
๐ฅ ํธ๋ํฝ์ด ๋ง์ ์น ์ฌ์ดํธ์ ํ์ฅ์ฑ์ ์ํด ๊ฐ๋ฐ๋ ๊ณ ์ฑ๋ฅ ์น ์๋ฒ์ด๋ค.
๐ฅ ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ์์์ผ๋ก ๋์ ์ฑ๋ฅ๊ณผ ๋์ ๋์์ฑ์ ์ํด ๊ฐ๋ฐ๋์๋ค.
๐ฅ ๋ค์์ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
๐ฅ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ์กด์ฌํ๋ ๋ฆฌ๋ฒ์ค ํ๋ก์ ์๋ฒ๋ก ์ฌ์ฉํ ์ ์๋ค.
๐ฅ Nginx๋ฅผ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ๋ฐฐ์นํ์ฌ ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ํ ์ ์๋ค.
๐น Spring Boot์ Nginx ์ฐ๋ํ๊ธฐ
nginx๋ฅผ ์ด์ฉํด์ Spring Boot ์์ ํ๋ก์ ์๋ฒ๋ฅผ ๊ตฌ์ถํ ์ ์๋ค.
๊ทธ๋์ ํด๋ผ์ด์ธํธ๊ฐ ์ค์ ๋ก ํต์ ํ๋ ํฌํธ๋ฅผ Spring Boot ์๋ฒ์ ๋ถ๋ฆฌํ ์ ์๋ค.
ํด๋ผ์ด์ธํธ - NGINX - Spring Boot
๐บ NGINX ์ค์น ๋ฐ ์คํ (Mac OS)
โ ์ค์น
brew install nginx
โ ์คํ
brew services start nginx
โ ์ค๋จ
brew services stop nginx
๐บ NGINX ์ค์ ํ์ผ(.conf ํ์ผ) ์ฐพ๊ธฐ
nginx์ ์ค์ ํ์ผ(.conf ํ์ผ)๋ก ์ฌ๋ฌ๊ฐ์ง ์ค์ ์ ๋ณ๊ฒฝํ ์ ์๋ค.
(์ฌ์ฉํ ํฌํธ๋ฒํธ, ์ฐ๊ฒฐํ ์๋ฒ์ ํฌํธ ๋ฒํธ ๋ฑ)
โ ์ค์ ํ์ผ ์์น ์ฐพ๊ธฐ
nginx -t
ํ ์คํธ ํธ์ง๊ธฐ ์คํ ํ ์ค์ ๋ณ๊ฒฝ
nano /opt/homebrew/etc/nginx/nginx.conf
๐บ NGINX๋ก Proxy Server ๋ง๋ค๊ธฐ
์ค์ ํ์ผ์ ์๋์ ๊ฐ์ด ์ฝ๋ ์์ฑ
http {
...
server{
listen 80; #8080 ํฌํธ์์ 80๋ฒ ํฌํธ๋ก ๋ณ๊ฒฝํ๋ค
...
location / {
root html;
index index.html index.htm;
proxy_pass http://localhost:8080; # ์์ฒญ์ 8080 ํฌํธ๋ก ์ ๋ฌํ๋ค
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
...
}
}
์ค์ ํ์ผ ์์ ๋ค์๋ ์ฌ์์์ ํด์ค๋ค.
brew services restart nginx
๐น NGINX๋ฅผ Load Balancer๋ก ํ์ฉํ๊ธฐ
NGINX๋ฅผ ํตํด ๋ก๋๋ฐธ๋ฐ์ฑ์ ๊ตฌ์ฑํ ์ ์๋ค.
๋ก๋๋ฐธ๋ฐ์ฑ์ ์ถ๊ฐํ ์๋ฒ๋ฅผ ์คํํ๋ค.
NGINX ์ค์ ํ์ผ์ ๋ค์ด๊ฐ์ ์๋ฒ ๊ทธ๋ฃน์ ๋ง๋ค๊ณ ํด๋น ์๋ฒ ํฌํธ ๋ฒํธ๋ฅผ ์ถ๊ฐํด์ค๋ค.
http {
upstream backend {
server localhost:{ํฌํธ๋ฒํธ1}; #๋ก๋๋ฐธ๋ฐ์ฑํ ์๋ฒ1
server localhost:{ํฌํธ๋ฒํธ2}; #๋ก๋๋ฐธ๋ฐ์ฑํ ์๋ฒ2
...
}
location / {
proxy_pass http://backend;
}
}
upstream ๋ค์ ์ ์ backend๋ ์ง์ ํ ์๋ฒ ๊ทธ๋ฃน์ด๋ฆ์ด๋ค.
์ํ๋ ๊ทธ๋ฃน์ด๋ฆ์ผ๋ก ์ ์ผ๋ฉด ๋๋ค.
์ถ๊ฐ์๋ฃ) nginx ๊ณต์ ๋ฌธ์
๐ง VPC
๐น VPC ๋?
VPC : Vitual Private Cloud ์๋น์ค
ํด๋ผ์ฐ๋ ๋ด private ๊ณต๊ฐ์ ์ ๊ณตํด์ ํด๋ผ์ฐ๋๋ฅผ public๊ณผ private ์์ญ์ผ๋ก ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌํ ์ ์๊ฒ ํด์ค๋ค.
๐น VPC ๊ตฌ์ฑ ์์์ ์ฃผ์ ์ฉ์ด
๐บ IP Address
IP๋ ์ปดํจํฐ ๋คํธ์ํฌ์์ ์ฅ์น๋ค์ด ์๋ก๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํน์ํ ๋ฒํธ์ด๋ค.
OSI์ 3๊ณ์ธต์ธ ๋คํธ์ํฌ ๊ณ์ธต์ ํด๋น๋๋ค.
IPv4, IPv6๋ก ๋๋์ด ์์ผ๋ฉฐ ํผ์ฉํ์ฌ ์ฌ์ฉํ๊ณ ์๋ค.
IPv4๋ ๊ฐ 8๋นํธ, IPv6๋ ๊ฐ 32๋นํธ๋ก 4๊ฐ์ ์ฅํ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๋คํธ์ํฌ ์ฃผ์์ ํธ์คํธ ์ฃผ์๋ก ๋๋์ด ์ง๋ค.
๐ฑ ๋คํธ์ํฌ ์ฃผ์ : ํธ์คํธ๋ค์ ๋ชจ์ ๋คํธ์ํฌ๋ฅผ ์ง์นญํ๋ ์ฃผ์์ด๋ค. ๋คํธ์ํฌ ์ฃผ์๊ฐ ๋์ผํ ๋คํธ์ํฌ๋ฅผ ๋ก์ปฌ ๋คํธ์ํฌ๋ผ๊ณ ํ๋ค.
๐ฑ ํธ์คํธ ์ฃผ์ : ํ๋์ ๋คํธ์ํฌ ๋ด์ ์กด์ฌํ๋ ํธ์คํธ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ฃผ์
๋คํธ์ํฌ ์ฃผ์์ ํธ์คํธ ์ฃผ์๋ฅผ ๋๋๋ ๊ฒฝ๊ณ์ ์ด ๊ณ ์ ๋์ด ์์ง ์๋ค.
IP์ฃผ์๋ ๋คํธ์ํฌ ์ฃผ์์ ํธ์คํธ ์ฃผ์๋ฅผ ๋๋๋ ๊ฒฝ๊ณ์ ์ ๋ฐ๋ผ ํด๋์ค(Class)๋ฅผ ๋๋๋ค.
ํธ์คํธ IP ๊ฐ์์ ๋ฐ๋ผ ๋คํธ์ํฌ์ ํฌ๊ธฐ๋ฅผ ๋ค๋ฅด๊ฒ ํ ๋นํ ์ ์๋ค.
ํด๋์ค๋ ์ด 5๊ฐ์ง(A, B, C, D, E)๋ก ๋๋์ด์ ธ ์๋ค.
D์ E ํด๋์ค๋ ๋ฉํฐ์บ์คํธ์ฉ, ์ฐ๊ตฌ ๊ฐ๋ฐ์ ์ํ ์์ฝ IP๋ผ์ ๋ณดํต์ ์ฌ์ฉํ์ง ์๋๋ค.
A, B, C ํด๋์ค์ ๋งจ ์์๋ฆฌ ์ซ์๋ง ๋ณด๋ฉด ๋ฌด์จ ํด๋์ค์ธ์ง ์๋ณ์ด ๊ฐ๋ฅํ๋ค.
ํด๋์คํ(Classful) ๋ฐฉ์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
A ํด๋์ค
Network Address | Host Address | Host Address | Host Address |
0 ~ 127 | 0 ~ 255 | 0 ~ 255 | 0 ~ 255 |
0.0.0.0์ ์์ฒด ๋คํธ์ํฌ๋ฅผ ์๋ฏธํ๊ณ 127.0.0.0 ~ 127.255.255.255๋ ์๊ธฐ์์ ์ ๊ฐ๋ฆฌํค๊ธฐ ์ํด ์์ฝ๋ IP ์ฃผ์์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
B ํด๋์ค
Network Address | Network Address | Host Address | Host Address |
128 ~ 191 | 0 ~ 255 | 0 ~ 255 | 0 ~ 255 |
C ํด๋์ค
Network Address | Network Address | Network Address | Host Address |
192 ~ 223 | 0 ~ 255 | 0 ~ 255 | 0 ~ 255 |
๋ชจ๋ ํด๋์ค์ ๋งจ ์ ์ฃผ์๋ ๋คํธ์ํฌ ์ฃผ์๋ก, ๋งจ ๋ค ์ฃผ์๋ ๋ธ๋ก๋์บ์คํธ ์ฃผ์๋ก ์ฌ์ฉํ๋ฏ๋ก ์ค์ ์ฌ์ฉํ ์ ์๋ IP๋ 2^n - 2์ด๋ค.
๐บ CIDR(Classless inter-domain routing)
ํด๋์ค ์๋ ๋๋ฉ์ธ ๊ฐ ๋ผ์ฐํ ๊ธฐ๋ฒ์ผ๋ก ์ฌ์ด๋๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
๊ตญ์ ํ์ค์ IP ์ฃผ์ ํ ๋น ๋ฐฉ๋ฒ์ด๋ค.
ํด๋์คํ ๋ฐฉ์์ ๋์ฒดํ ๋ฐฉ์์ด๋ค.
๊ธฐ์กด์๋ ํด๋์ค์ ๋ฐ๋ผ ์ ํด์ง Network Address์ Host Address๋ฅผ ์ฌ์ฉํ์ง๋ง CIDR์ ์ํ๋ ๋ธ๋ก๋งํผ Network Address๋ฅผ ์ง์ ํ ์ ์๋ค.
AWS์ VPC๋ CIDR ๋ฐฉ์์ด๋ค.
ex) 172.16.0.0/24
-> /24 ์ด ์๋ธ๋ท ๋ธ๋ก, ๋คํธ์ํฌ ์ฃผ์์ 16๋นํธ๋ง ํ ๋นํ๋ค๋ ์๋ฏธ์ด๋ค. ์ด 2^์ธ ๊ฐ์ IP ์ฃผ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
AWS VPC์์๋ /16 ๋ธ๋ก์ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๊ณ ์๋ค.
โป ์ถ๊ฐ ์๋ฃ) AWS VPC ๊ธฐ๋ณธ ๋ฐ ์ฐ๊ฒฐ ์ต์
๐บ ์๋ธ๋ท(Subnet)
Subnetwork์ ์ค์๋ง์ด๋ค.
IP ๋คํธ์ํฌ์ ๋ ผ๋ฆฌ์ ํ์ ๋ถ๋ถ์ ๊ฐ๋ฆฌํด
์๋ธ๋ท์ ํตํด ํ๋์ ๋คํธ์ํฌ๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ๋๋ ์ ์์
VPC๋ฅผ ์ฌ์ฉํ๋ฉด ํ์์ ๋ฐ๋ผ ๋ค์ํ ์๋ธ๋ท์ ์์ฑํ ์ ์์
- ํผ๋ธ๋ฆญ ์๋ธ๋ท: ์ธํฐ๋ท์ ํตํด ์ฐ๊ฒฐํ ์ ์๋ ์๋ธ๋ท
- ํ๋ผ์ด๋น ์๋ธ๋ท: ์ธํฐ๋ท์ ์ฐ๊ฒฐํ์ง ์๊ณ , ๋ณด์์ ์ ์งํ๋ ๋ฐฐํ์ ์ธ ์๋ธ๋ท
- VPN only ์๋ธ๋ท : ๊ธฐ์ ๋ฐ์ดํฐ ์ผํฐ์ VPC๋ฅผ ์ฐ๊ฒฐํ๋ ์๋ธ๋ท
์๋ธ๋ท์ VPC์ CIDR ๋ธ๋ก์ ์ด์ฉํด ์ ์๋๋ค.
์ต์ ํฌ๊ธฐ์ ์๋ธ๋ท์ /28 ์ด๋ค.
์๋ธ๋ท์ AZ(Availability Zone, ๊ฐ์ฉ ์์ญ)๋น ์ต์ ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , ์ฌ๋ฌ ๊ฐ์ AZ์ ์ฐ๊ฒฐ๋๋ ์๋ธ๋ท์ ๋ง๋ค ์ ์๋ค.
AWS๊ฐ ํ๋ณดํ ์๋ธ๋ท ์ค ์ฒ์ ๋ค ๊ฐ์ ๋ง์ง๋ง IP ์ฃผ์๋ ์ธํฐ๋ท ๋คํธ์ํน์ ์ํด ์์ฝ๋์ด ์๋ค. ์๋ฅผ ๋ค์ด 10.0.0.0/24 ์ฒด๊ณ์ CIDR ๋ธ๋ก์ด ์๋ ์๋ธ๋ท์์ 10.0.0.0, 10.0.0.1, 10.0.0.2, 10.0.0.3, 10.0.0.255 ๋ IP ์ฃผ์๊ฐ ์์ฝ๋์ด ์๋ค.
๐บ ๋ผ์ฐํ ํ ์ด๋ธ(Routing Table)
ํธ๋ํฝ์ ์ ์ก ๋ฐฉํฅ์ ๊ฒฐ์ ํ๋ ๋ผ์ฐํธ์ ๊ด๋ จ๋ ๊ท์น์ ๋ด์ ํ ์ด๋ธ์ด๋ค.
๋ชฉ์ ์ง๊น์ง ์ต์ ์ ๊ฒฝ๋ก๋ก ๋ฐ์ดํฐ ํจํท์ ์ ์กํ๊ธฐ ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
๋ชจ๋ ์๋ธ๋ท์ ๋ผ์ฐํ ํ ์ด๋ธ์ ๊ฐ์ง๋ค.
ํ๋์ ํ ์ด๋ธ ๊ท์น์ ์ฌ๋ฌ ์๋ธ๋ท์ ์ฐ๊ฒฐํ ์ ์๋ค.
์๋ธ๋ท ์์ฑ ํ ๋ณ๋์ ๋ผ์ฐํ ํ ์ด๋ธ์ ์์ฑํ์ง ์์ผ๋ฉด ํด๋ผ์ฐ๋๊ฐ ์๋์ผ๋ก VPC์ ๋ฉ์ธ ๋ผ์ฐํ ํ ์ด๋ธ๊ณผ ์ฐ๊ฒฐํ๋ค.
'TIL(Today I Learned)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
7/25 (์) [Spring Security] Authentication(์ธ์ฆ) (0) | 2022.08.15 |
---|---|
7/22 (๊ธ) Spring Security ๊ธฐ๋ณธ (0) | 2022.08.15 |
7/19 (ํ) [Spring MVC] ์ ํ๋ฆฌ์ผ์ด์ ๋น๋ / ์คํ / ๋ฐฐํฌ (0) | 2022.08.03 |
7/18 (์) [Spring MVC] API ๋ฌธ์ํ (0) | 2022.08.02 |
7/14 (๋ชฉ) ํ ์คํ (Testing) 3๏ธโฃ - Mockito, TDD (0) | 2022.08.02 |