1. Docker
Docker์ ๋ํ ๋ด์ฉ ์ ๋ฆฌ๋ ํฌ๊ฒ 5๊ฐ๋ก ๋๋์ด ์ ๋ฆฌํด๋์๋ค. ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์.
2. SSL
1) HTTP & HTTPS
์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ค๋ ๊ฒ์ ํน์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค๋ ๊ฒ์ด๊ณ ์ด๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์ด์ฉํ ์ ์๋๋ก ๋ง๋ค์ด์ผ ํ๋๋ฐ, ๋จ์ํ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋๋ก ๋ง๋๋ ๊ฒ๋ง ์ค์ํ ๊ฒ์ด ์๋๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํต์ ํ๋ฉด์ ์ฃผ๊ณ ๋ฐ๋ ์ ๋ณด๋ค์ ๋ํด์๋ ์ ์ถ์ด ๋์ง ์๋๋ก ํด์ผํ๊ณ ํน์ ์ ์ถ์ด ๋๋๋ผ๋ ๊ทธ ์ ๋ณด๊ฐ ๋ฌด์๋ฏธํ๋๋ก ๋ง๋๋ ๊ฒ์ด ํ์ํ๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ฒ์ด SSL (Secure Sockets Layer)์ด๋ค.
SSL์ ๋ํด ์์๋ณด๊ธฐ ์ ์ HTTPS๋ถํฐ ๊ฐ๋ตํ๊ฒ ์์๋ณด์. HTTPS๋ HTTP์ ๊ฐํ๋ ๋ณด์์ ๊ฐ์ง ๋ฒ์ ์ผ๋ก HTTP over SSL์ ์ฝ์ด์ด๋ค. HTTPS๊ฐ ๊ฐํ๋ ๋ณด์์ ๊ฐ๋ ์ด์ ๋ ํต์ ์ ์ํด ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๋ค์ ์ํธํํ์ฌ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ธฐ์กด์ HTTP๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ฒ ๋๋ฉด, ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ์ํธํ ์์ด ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ค๊ฐ ๊ณต๊ฒฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ทจ๋ํ์ ๋ ์ด๋ฅผ ๊ทธ๋๋ก ์ด์ฉํ ์ ์๋ ์ํ์ด ์๋ค. ์ค๊ฐ ๊ณต๊ฒฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ทจ๋ํ๋ ํ๋์ ์ง์นญํ๋ ๋ง์ ์ฌ๋ฟ ์์ง๋ง, Eavesdropping๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
ํ์ง๋ง HTTPS์ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ์ก์ ํ ๋ ์ํธํ ํ์ฌ ์ก์ ํ๊ณ , ์์ ์์๋ ์ด๋ฅผ ๋ณตํธํํ์ฌ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ HTTP์ ๋นํด์ ๋ณด์์ฑ์ด ๋์ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ํํด์ฃผ๋ ๊ฒ์ด SSL์ด๋ค. SSL์์๋ ๋ฐ์ดํฐ์ ์ก์ ๊ณผ ์์ ์ ์งํํ ๋ ์ํธํ์ ๋ณตํธํ๋ ๋์นญํค๋ฅผ ์ด์ฉํ๋ค. ๋์นญ ํค์ ๋ํ์ ์ธ ์๋ AES๊ฐ ์๋ค. ๋์นญ ํค๋ผ๋ ๊ฒ์ ์ํธํ์ ๋ณตํธํ๋ฅผ ์งํํ ๋์ Key ๊ฐ์ด ๋์ผํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ํธํ์ ๋ณตํธํ๋ฅผ ์งํํ ์ ์๋ Key๋ ๋์นญ ํค์ ๋น๋์นญ ํค๋ก ๋๋๋๋ฐ, SSL์์ ๋ฐ์ดํฐ๋ฅผ ์ก์ ๋ฐ ์์ ์ ํ ๋ ๋น๋์นญ ํค๋ฅผ ์ด์ฉํ์ง ์๊ณ ๋์นญ ํค๋ฅผ ์ด์ฉํ๋ ์ด์ ๋ ๋น๋์นญ ํค์ ์ฐ์ฐ ์๋ชจ๋์ด ํฌ๊ธฐ ๋๋ฌธ์ด๋ค.
2) ๋์นญ ํค & ๋น๋์นญ ํค
๋์นญ ํค์ ์ฐ์ฐ ์๋ชจ๋์ด ํฌ์ง ์์ ์ด์ ๋ ์ ํ ์ฐ์ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ด๋ค. ์ ํ ์ฐ์ฐ์ ์ฐ์ฐ์ด ๊ฐ๋ณ๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ๊ทธ๋งํผ ๊ท์น์ ์ฐพ์๋ด๊ธฐ ์ฝ๋ค๋ ๋จ์ ์ด ์๋ค. ๋ฐ๋ผ์ ๋์นญ ํค๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋๋ ์ ํ ์ฐ์ฐ์ ๊ธฐ๋ณธ์ ์ธ ์ ํ ์ฐ์ฐ์ ํน์ง ์์ ํ๋ฌธ๊ณผ ์ํธ๋ฌธ์ ์๊ด ๊ด๊ณ๋ฅผ ์ต๋ํ ์จ๊ธธ ์ ์๋ ํผ๋, ํ๋ฌธ๊ณผ ์ํธ๋ฌธ์ ํต๊ณ์ ํน์ฑ์ผ๋ก ํด๋
ํ ์ ์๋๋ก ๋ง๋๋ ํ์ฐ์ ๊ฐ๋๋ก ๊ตฌํ๋์ด ์๋ค. ๋ฐ๋ฉด์ ๋น๋์นญ ํค๋ ์์๋ฅผ ์ด์ฉํ ์ธ์๋ถํด์ ์ด๋ ค์์ ๊ทผ๊ฑฐํ๊ณ ์์ด ํด๋
ํ๋๋ฐ ๊ต์ฅํ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง๋ง, ์ฐ์ฐ ์๋ชจ๋์ด ๋์ ํธ์ด๋ค. ๋ง์ ํ์์ ๋ฐ์ดํฐ ์ก์ ๋ฐ ์์ ์ด ์ผ์ด๋๋ค๋ฉด ์ด๋ ๋์นญ ํค๊ฐ ๋ ์ ํฉํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ์๋ฐฉํฅ์ ๋๊ณ ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก, ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก์ ๋ฐ์ดํฐ ์ก์ ๋ฐ ์์ ์ ๋ชจ๋ ์ํธํ์ ๋ณตํธํ๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๊ณ , ๋ฐ๋ผ์ ์๋ฒ ๋ฟ๋ง ์๋๋ผ ํด๋ผ์ด์ธํธ๋ ๋์นญ ํค๋ฅผ ๊ฐ๊ณ ์์ด์ผ ํ๋ค. ํ์ง๋ง ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ค์ ์ฌ๋ ๊ฐ์ ๋ฌผ๋ฌผ๊ตํ์ฒ๋ผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋์นญ ํค๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๊ฒ๋ ์๋๊ณ , ๋ฏผ๊ฐํ ์ ๋ณด์ ๋
ธ์ถ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ํธํ๋ฅผ ํ๋ ๊ฒ์ธ๋ฐ ๋์นญ ํค์ฒ๋ผ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ํต์ ์ผ๋ก ๋ณด๋ด๊ฒ ๋๋ฉด Secure๋ผ๋ ์๋ฏธ๊ฐ ๋ฌด์ํด์ง๋ค. ๋์นญ ํค๋ฅผ ๊ทธ๋๋ก ๋ด๋ณด๋ด์ ์ค๊ฐ ๊ณต๊ฒฉ์๊ฐ ์ด๋ฅผ ์ทจ๋ํ๊ฒ ๋๋ฉด, ํด๋ผ์ด์ธํธ๊ฐ ์ํธํํ์ฌ ๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ํด๋
ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ SSL์ ์ด์ฉํ ํต์ ์ ์ํด์ ๋ฐ์ดํฐ์ ์ํธํ์ ๋ณตํธํ์๋ง ๋์นญ ํค๋ฅผ ์ด์ฉํ๊ณ , ๋์นญ ํค์ ์ ๋ฌ์ ์ํด ๋น๋์นญ ํค๋ฅผ ์ด์ฉํ๊ฒ ๋๋ค.
์ด๋ ํ ํน์ฑ ๋๋ฌธ์ ๋์นญ ํค๋ฅผ ๋น๋์นญ ํค๋ก ์ํธํ ํ๋ ๊ฒ์ด๊ณ , ์ด๋ ๊ฒ ์ํธํ ๋ ๋์นญ ํค๋ฅผ ํด๋ผ์ด์ธํธ๋ ์ด๋ป๊ฒ ๋ณตํธํ๋ฅผ ํ ์ ์๋ ๊ฒ์ธ์ง ์์๋ณด์. ๊ธฐ๋ณธ์ ์ผ๋ก ๋น๋์นญ ํค๋ ์์๋ฅผ ์ด์ฉํ ์ธ์๋ถํด์ ์ด๋ ค์์ ๊ทผ๊ฑฐํ๊ณ ์๋ค๊ณ ํ๋ค. ์ด๋ ๊ฐ ๋ผ๋ ๊ณ์ฐ์ ์ฝ๊ฒํ ์ ์์ง๋ง, ๋ฅผ ์ด๋ฃจ๋ ์๊ฐ ์ ํํ ์ ๋ผ๋ ๊ฒ์ ์ฐพ์๋ด๊ธฐ ์ด๋ ต๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด ๋์ ์ ๊ฐ ์์ฒญ ๊ฑฐ๋ํ ์ด๋ค ์ ๋ฅผ ๊ตฌ์ฑํ๋ ์์ฒญ ๊ฑฐ๋ํ 2๊ฐ์ ์์๊ฐ ๋๊ณ ๊ฐ๊ฐ์ด ๋น๋์นญ ํค์์ ์ฌ์ฉํ๋ Public Key์ Private Key๊ฐ ๋๋ค.
๋น๋์นญ ํค๋ฅผ ๊ตฌ์ฑํ๋ Public Key์ Private Key์ ํน์ฑ์ ๊ฐ๋จํ ์ง๊ณ ๊ฐ๋ฉด, Public Key๋ก ์ํธํํ ๋ฐ์ดํฐ๋ Private Key๋ก ๋ณตํธํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ณ , ๊ทธ ๋ฐ๋๋ก Private Key๋ก ์ํธํํ ๋ฐ์ดํฐ๋ฅผ Public Key๋ก ์ํธํ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ๋ํ Public Key์ ์ด๋ฆ์์ ์ ์ถํ ์ ์๋ฏ์ด Public Key๋ ์ธ๋ถ์ ๋
ธ์ถ๋์ด๋ ๊ด์ฐฎ๊ธฐ ๋๋ฌธ์, ์ผ๋ฐ์ ์ผ๋ก๋ ์ด๋ฅผ ์ธ๋ถ์ ๋
ธ์ถํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค. ๋ฐ๋ฉด์ Private Key์ ๊ฒฝ์ฐ์๋ ์ ๋๋ก ์ธ๋ถ์ ๋
ธ์ถ๋์ง ์๋๋ก ์ฌ์ฉํ๋ค. ๋ ๊ฐ์ Key๊ฐ ๋ชจ๋ ์ธ๋ถ์ ๋
ธ์ถ๋๋ฉด ์ํธํ์ ๋ณตํธํ์ ์๋ฏธ๊ฐ ์์ด์ง๋ฏ๋ก ์ค๋ก์ง Public Key๋ง ์ธ๋ถ์ ๊ณต๊ฐํ๋ค๋ ์ ์ ์ ์ํด์ผ ํ๋ค.
์ด์ ๊ฐ์ ํน์ฑ๋ค์ ๊ทผ๊ฑฐ๋ก ๋ฐ์ดํฐ ์ก์ ๊ณผ ์์ ์ ์๊ตฌ๋๋ ๋์นญ ํค๋ ๋น๋์นญ ํค๋ก ์ํธํ ํ์ฌ ์ ๋ฌํ๊ฒ ๋๋ค.
์์์ ๋์นญ ํค๋ฅผ ์ ๋ฌํ๋ค๊ณ ํํํ์ง๋ง, ์ค์ ๋ก ๋น๋์นญ ํค๋ ๋์นญ ํค๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ ์ ๋ฌํ๋๋ฐ ์ฌ์ฉ๋๋ค. ์ด์ ๋ํ ๋ด์ฉ์ SSL HandShake์์ ์์ธํ ๋ค๋ฃฌ๋ค.
3) SSL Certificate
Public Key์ Valid ๋ณด์ฅ
ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ Public Key๊ฐ ์ธ๋ถ์ ๊ณต๊ฐ๋์ด๋ ๋๋ Key๋ผ๋ ๊ฒ์ ์๊ฒ ๋๋ฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ป๊ฒ Public Key๋ฅผ ์ป์ ์ ์์๊น? ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์ ์์ ์๋ํ ๋ ์๋ฒ๊ฐ ์ด๋ค ์ ๋ณด๋ฅผ ์ ์กํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ๋ Public Key๋ฅผ ์ทจ๋ํ ์ ์๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ์ก ๋ฐ์ Public Key๊ฐ ๊ณต๊ฒฉ์์ ์ํด ๋ณด๋ด์ง Key๊ฐ ์๋๋ผ ํต์ ํ๋ ค๋ ์๋ฒ๋ก๋ถํฐ ๋ณด๋ด์ง Key๋ผ๋ ๊ฒ์ ์ด๋ป๊ฒ ๋ณด์ฅ ๋ฐ์ ์ ์์๊น? ์ด ๋ ์ด์ฉ๋๋ ๊ฐ๋
์ด ๊ณต์ ๋ ฅ ์๋ ๊ธฐ๊ด์ผ๋ก๋ถํฐ ์๋ช
๋ฐ์ ์ธ์ฆ์์ด๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์ ์ ์๋๋ฅผ ํ์ ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ์ด๋ค ์ ๋ณด๊ฐ ๊ณง ์ธ์ฆ์๋ฅผ ์๋ฏธํ๋ค.
์๋ฒ๋ก๋ถํฐ ์ ๋ฌ ๋ฐ์ ์ธ์ฆ์๋ฅผ SSL Certificate์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, SSL Certificate๋ Public Key๋ฅผ ์๋ฒ์ Identity์ ๋ฐ์ธ๋ฉํ ์ ๋ณด๋ค์ ์ ์งํ๊ณ ์๋ค. ์ด๋ฌํ SSL Certificate์ ์๋ฒ์์ ์ ๊ณตํ๋ Public Key๊ฐ Validํ๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, CA (Certificate Authority)๋ผ๋ ์ 3์ ๊ธฐ๊ด์ผ๋ก๋ถํฐ ์์ฑ๋ฐ์ ์ฌ์ฉ๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
๋ฐ๋ผ์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ SSL Certificate์ ๋ฐ๊ธ ๋ฐ๊ธฐ ์ํด CA๋ก Public Key์ ๋ํ ์์ ์์ ์ด๋ฉ์ผ, ์์ ์์ ์ด๋ฆ, ์์ ์๋ฅผ ์ฆ๋ช
ํ ์ ์๋ ๊ฐ์ข
์๋ฅ, ์๋ฒ์ ์ฃผ์ ๋ฑ์ Public Key์ ํจ๊ป ๋ณด๋ด๊ฒ ๋๋ค. ์ด ๋ ์๋ฒ๊ฐ CA๋ก ์ ์ถํ ์ ๋ณด๋ค์ CSR (Certificate Signing Request)์ด๋ผ๋ ํํ๋ก ์ ์ถ๋๋ฉฐ, CA๋ ์ด๋ฅผ ๊ฒํ ํ ํ SSL Certificate์ ์์ฑํ์ฌ ์๋ฒ์๊ฒ ๋ฐ๊ธํ๋ค. ์ด ๋ SSL Certificate์ ๊ตฌ์ฑํ๋ ํญ๋ชฉ ์ค์๋ ์๋ฒ๊ฐ ์ ์ถํ ๋ด์ฉ๋ฌผ๋ค์ Hashingํ์ฌ ์๋ช
ํ ๊ฐ๋ ํฌํจ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก SSL Certficiate์ ์ต์์ CA์ธ Root CA๋ก๋ถํฐ๋ง ์ธ์ฆ์ ๋ฐ์ ์์ฑ๋๋ ๊ณผ์ ๋ณด๋ค๋ Root CA์ Intermediate CA๋ฅผ ๊ฑฐ์ณ ์ธ์ฆ์ ๋ฐ๋ ๊ณผ์ ์ผ๋ก ์์ฑ๋์ด Trusted Chain ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค.
์ด ๋ ์๋ช
๊ฐ์ SHA-256๊ณผ ๊ฐ์ Hashing์ผ๋ก ์ด์ฉํ๋ ์ด์ ๋ Hashing์ด๋ผ๋ ํ์๊ฐ ๋จ๋ฑกํฅ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ด๋ค์ง๊ธฐ ๋๋ฌธ์ SSL Certificate์ ๋ณ์กฐ ์ฌ๋ถ๋ฅผ ํ๋ณํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค. Hashing๊ณผ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ํธํ๋ง ๊ฐ๋ฅํ๊ณ ์ํธํ์ ๋ํ ๋ณตํธํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค๋ ์ญ์ ์ ํญ์ฑ์ด๋ผ๋ ํน์ฑ ๋๋ฌธ์ ๋จ๋ฐฉํฅ์ด๋ผ๊ณ ํ๋ค. ๋จ๋ฐฉํฅ ์ํธํ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ณ์กฐ ์ฌ๋ถ๋ฅผ ์ฐพ๊ธฐ ์ฝ๋ค๋ ๊ฒ์ ๋ํ ์๊ด๊ด๊ณ๋ฅผ ์ดํดํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ์๋ฅผ ํ์ธํด๋ณด์.
์๋ฒ๊ฐ ์ ์ถํ Public Key์ ๊ฐ์ ๋ด์ฉ๋ฌผ๋ค์ด , , ๋ผ๊ณ ํ๊ณ ์ด๋ฅผ ํตํด ์์ฑ๋ Hashing ๊ฐ์ ๋ผ๊ณ ํ์. Hashing์ ๋ํ ์๊ณ ๋ฆฌ์ฆ์ด ๋์ผํ๋ค๋ฉด , , ์ ๋ํด ๋ช ๋ฒ์ Hashingํด๋ ๊ทธ ๊ฐ์ ๊ฐ ๋์จ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ผ๋ ๊ฐ์ ๋ณตํธํ๊ฐ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ฅผ ์ด๋ฃจ๋ ๊ฐ์ด , , ๋ผ๋ ์ฌ์ค์ ์ํธํํ ๋น์ฌ์ ์ธ์๋ ์๋ฌด๋ ์ ์ ์๋ค. ๋ฐ๋ผ์ ์ค๊ฐ ๊ณต๊ฒฉ์๊ฐ ์ 2 ์ญ์ ์ ํญ์ฑ๊ณผ ์ถฉ๋ ์ ํญ์ฑ์ ๋ฌด์ํ๋ ๊ฐ์ ์ฐพ์๋ด๊ธฐ ์ด๋ ค์ฐ๋ฏ๋ก, SSL Certificate์ ์ทจ๋ํ์ฌ ๋ด๋ถ์ ๋ด์ฉ๋ฌผ์ , , ๋ก ๋ณ์กฐํ๋๋ผ๋ ๋์ผํ Hashing ๊ฐ ๋ฅผ ์ป์ ์ ์๊ณ ๋ง์ ์ป๊ฒ ๋๋ค. (๋ฌผ๋ก ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ด์ฉ๋ฌผ์ ๋ณ์กฐ ํ์์๋ ๋์ผํ ๊ฐ์ด ๋์ค๋ Hashing Collision์ด ์ผ์ด๋ ์ ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฐ SSL Certificate์์ ์ฌ์ฉํ๋ Hashing ์๊ณ ๋ฆฌ์ฆ์ ์ 2 ์ญ์ ์ ํญ์ฑ๊ณผ ์ถฉ๋ ์ ํญ์ฑ์ ์ถฉ๋ถํ ๋ง์กฑํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฏ๋ก ๊ทธ๋ด ๊ฐ๋ฅ์ฑ์ด ์๋ค.) ๊ทธ๋ฌ๋ฏ๋ก SSL Certificate์ ์ ๋ฌ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ ๋ด๋ถ์ ๋ด์ฉ๋ฌผ์ Hashing ํด๋ณด๊ณ , SSL Certificate์ ์๋ช
๋ Hashing ๊ฐ๊ณผ ๋น๊ตํ์ฌ ๋ณ์กฐ ์ฌ๋ถ๋ฅผ ํ๋ณํ ์ ์๊ฒ ๋๋ค.
์๋ฒ์์ ํต์ ์ ์ํ ๋งค๊ฐ์ฒด๋ก Chrome, Safari, Explorer์ ๊ฐ์ Browser๋ฅผ ์ด์ฉํ๊ฒ ๋๋ฉด, ๊ณต์ ๋ ฅ ์๋ CA๋ก๋ถํฐ ๊ฒ์ฆ ๋ฐ์๋ค๋ SSL Certificate์ ์ด์ฉํ์ง ์์์ ๋ ์ ๋ขฐํ ์ ์๋ ์ธ์ฆ์๋ผ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณด์ฌ์ฃผ๋ฉฐ ์ ์์ ์ฐจ๋จํ๋ค. ๋ฐ๋ผ์ ์ ์์ ์ธ ์๋น์ค๋ฅผ ์ด์ํ๊ณ ์ถ๋ค๋ฉด SSL Certificate๋ฅผ ์์ฒด์ ์ผ๋ก ์์ฑํ์ง ์๊ณ , ๊ณต์ ๋ ฅ ์๋ CA๋ก๋ถํฐ ๋ฐ๊ธ๋ฐ๋ ๊ฒ์ด ์ข๋ค. SSL Certificate ๋ฐ๊ธ์๋ ์ผ์ ๊ธ์ก์ด ์๊ตฌ๋๋ค. ๊ณต์ ๋ ฅ ์๋ CA๋ก๋ Symantec, Comodo, GoDaddy, GlobalSign ๋ฑ์ด ์๋ค. ์ด์ ๊ฐ์ ๊ธฐ์
๋ค์ด ๊ณต์ ๋ ฅ์ด ์๋ค๊ณ ๋งํ๋ ์ด์ ๋ ์ ์๋ CA๋ค์ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ์๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. SSL Certificate์ ๋ฐ๊ธ ์์ ์ ์ด๋ฏธ CA์ Private Key๋ก ์ํธํ ๋์ด ์๊ณ , ํด๋ผ์ด์ธํธ๊ฐ SSL Certificate์ ๋ด์ฉ๋ค์ ํ์ธํ๊ธฐ ์ํด์ CA์ Public Key๋ก ๋ณตํธํํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. ๋ฐ๋ผ์ ์ด๋ฏธ CA์ ๋ํด ํด๋ผ์ด์ธํธ๊ฐ ์๊ณ ์๋ค๋ฉด CA์ Public Key๋ฅผ ์ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก, CA์ Public Key๋ฅผ ์ด์ฉํ์ฌ SSL Certificate์ ๋ณตํธํํ์ฌ ์๋ฒ์ Public Key์ ๊ฐ์ ์ ๋ณด๋ค์ ์ทจ๋ํ ์ ์๊ฒ ๋๋ค.
SSL ํต์ ์ ๋์ ๊ณผ์
์๋ฅผ ๋ค์ด Naver, Google๊ณผ ๊ฐ์ Domain์ผ๋ก ์ ์ํ๋ฉด ๊ฐ ์๋ฒ๋ SSL์ ์ด์ฉํ์ฌ ํต์ ํ ์ ์๋๋ก SSL Certificate์ ๊ฐ๊ณ ์๋ ๊ฒ์ ์ ๊ทธ๋ฆผ์ฒ๋ผ ํ์ธํ ์ ์๋ค. ์ด์ ์ ์ธ๊ธํ๋ ๋ด์ฉ์ฒ๋ผ Google์ Root CA์ Intermediate CA๋ฅผ ๊ฑฐ์ณ ์ธ์ฆ์ ๋ฐ์ ๊ฒ์ ํ์ธํ ์ ์๋ค. SSL ํต์ ์ ๋์ ๊ณผ์ ์ ํฌ๊ฒ HandShake, Session, Finished๋ก ๋๋๋ค.
HandShake๋ ๋ฐ์ดํฐ ์ํธํ ๋ฐ ๋ณตํธํ๋ฅผ ์ํ ๋์นญ ํค์ ์์ฑ, ๋์นญ ํค ์์ฑ์ ํ์ํ ์ ๋ณด ์ ๋ฌ์ ์ํ ์๋ฒ์ Public Key์ ์ทจ๋, Public Key ์ทจ๋์ ์ํ SSL Certificate์ ๋ณตํธํ๋ฅผ ํฌํจํ ๊ณผ์ ์ ์๋ฏธํ๋ค.
Session์ ๋์นญ ํค๋ฅผ ์ด์ฉํ์ฌ ์ํธํ ๋ฐ ๋ณตํธํ๋ฅผ ์ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ก์ ํ๊ณ ์์ ํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค.
Finished๋ ์์ Session์ด ์ข
๋ฃ๋์ด ํต์ ์ ์ด์ฉ๋ ๋์นญ ํค๋ฅผ ํ๊ธฐํ์์ ์๋ฏธํ๋ค.
SSL HandShake
SSL ๋์ ๊ณผ์ ์ค HandShake์ ๋ํด ์กฐ๊ธ ๋ ์์ธํ ์์๋ณด์. HandShake๋ ํฌ๊ฒ Client Hello, Server Hello, CA ๋ชฉ๋ก ํ์ธ, Pre-Master Secret ์์ฑ, Master Secret ๋ฐ Session Key ์์ฑ, HandShake Finish์ด๋ผ๋ 6๋จ๊ณ๋ก ๋๋๋ค.
โข
Client Hello
Client Hello๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ์ํ๋ ๊ณผ์ ์ ๋งํ๋ค. ์ด ๋ Client Hello์์ ์ํ๋๋ ํ๋์ ํฌ๊ฒ 3๊ฐ์ง ํ๋์ผ๋ก ๋๋๋ค.
1.
ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก ์ ์์ ์๋ํ๊ณ ํด๋ผ์ด์ธํธ๋ ๋ฌด์์๋ก ์์ฑํ ์ ๋ณด๋ฅผ ์๋ฒ์๊ฒ ๋ณด๋ธ๋ค.
2.
ํด๋ผ์ด์ธํธ๊ฐ ์ํํ ์ ์๋ ์ํธํ ๋ฐฉ์๋ค์ ์ข
ํฉํ์ฌ ์๋ฒ์๊ฒ ๋ณด๋ธ๋ค. ์ด๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์๋ก ๋์ผํ ์ํธํ ๋ฐฉ์์ ์ด์ฉํ๋๋ก ์ ํ ๋ ์ฌ์ฉ๋๋ค.
3.
Connection์ ๋ง๋ค๊ธฐ ์ํด ๊ฑฐ์น๋ HandShake๋ฅผ Session ์ ์ง ์ค์๋ ๋ฐ๋ณตํ์ง ์๋๋ก ์ด๊ธฐ 1ํ์ HandShake๋ฅผ ์ํํ๋ Session ID๋ฅผ ์๋ฒ์๊ฒ ๋ณด๋ธ๋ค. ์ด๋ ์๋ฒ๊ฐ ํด๋น Session ID๋ฅผ ๊ธฐ์ตํจ์ผ๋ก์จ ๊ธฐ์กด์ ์ด์ด๋ Session์ ํ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด ๋ง์ ์๊ฐ ๋จ์ถ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
โข
Server Hello
Server Client๋ ์๋ฒ๊ฐ ๋ฐ์ Client Hello์ ๋ํ ์๋ต์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด๋ ๊ณผ์ ์ ๋งํ๋ค. ์ด ๋ Server Hello์์ ์ํ๋๋ ํ๋๋ 3๊ฐ์ง๋ก ๋๋๋ค.
1.
์๋ฒ๋ ๋ฌด์์๋ก ์์ฑํ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค.
2.
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ๋ฌ ๋ฐ์ ์ํธํ ๋ฐฉ์ ์ค์์ ์๋ฒ์์๋ ์ฌ์ฉํ ์ ์๋ ์ํธํ ๋ฐฉ์์ ์ ํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค. ์ด๋ ์๋ก ๋์ผํ ์ํธํ ๋ฐฉ์์ ์ด์ฉํ๋๋ก ํ์ํ ๊ฒ์ ์๋ฏธํ๊ณ , ์ฐจํ์๋ ํด๋น ์ํธํ ๋ฐฉ์์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค. (์ํธํ ๋ฐฉ์์ ๋ํ ์ ํ์ผ ๋ฟ ๋์นญ ํค์ ์์ฑ์ด ์๋๋ค.)
3.
์๋ฒ๊ฐ ๊ฐ๊ณ ์๋ SSL Certificate์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค.
โข
CA ๋ชฉ๋ก ํ์ธ
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ํต์ ํ๊ธฐ ์ํ ๋์นญ ํค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋์นญ ํค์ ์ ๋ฌ์ด ํ์ํ๊ณ , ์ด๋ฅผ ์ํด์ ์๋ฒ์ Public Key๊ฐ ํ์ํ๋ค. ์ด ๋ ์๋ฒ์ Public Key๋ SSL Certificate์ ์กด์ฌํ๊ณ ์๋๋ฐ, SSL Certificate์ ์ด๋ฅผ ์์ฑํ CA์ Private Key๋ก ์ํธํ ๋์ด ์๊ธฐ ๋๋ฌธ์ ํด๋น CA์ Public Key๋ก ๋ณตํธํ ํด์ผ ์๋ฒ์ Public Key๋ฅผ ์์๋ผ ์ ์๋ค. ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๋ SSL Certificate์ ๋ณตํธํํ๊ธฐ ์ํด CA ๋ชฉ๋ก๋ค์ ํ์ธํ๊ฒ ๋๊ณ , CA ๋ชฉ๋ก์์ SSL Certificate์ ๋ง๋ CA๋ฅผ ์ฐพ๊ฒ ๋๋ฉด ํด๋น Public Key๋ก SSL Certificate์ ๋ณตํธํ ํ๊ฒ ๋๋ค. ๋ง์ผ CA ๋ชฉ๋ก์ ์๋ CA๋ผ๋ฉด Browser ๋จ์์ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ธ๋ค. CA์ ๋ํ Public Key๋ Browser์ ๋ด์ฅ๋์ด ์๋ค.
โข
Pre-Master Secret ์์ฑ
ํด๋ผ์ด์ธํธ์์๋ 48 ๋ฐ์ดํธ์ ํด๋นํ๋ ์์์ Pre-Master Secret์ ์์ฑํ๋ค. ์ด๋ ๊ฒ ์์ฑ๋ Pre-Master Secret์ Master Secret์ ์์ฑํ๋๋ฐ ์ด์ฉ๋๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ๊ณต์ ๋์ด์ผ ํ๋ค. ๋ฐ๋ผ์ ์ฌ์ ์ ์๋ฒ์ ํ์ํ ์ํธํ ๋ฐฉ์์ ํตํด ์๋ฒ์ Public Key๋ก Pre-Master Secret์ ์ํธํ ํ์ฌ ์๋ฒ์๊ฒ ์ ๋ฌํ๋ค.
โข
Master Secret ๋ฐ Session Key ์์ฑ
์ด์ ๋จ๊ณ๊น์ง ๊ฑฐ์ณค์ ๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ Pre-Master Secret ์ ํด๋ผ์ด์ธํธ์ ๋ฌด์์ ๊ฐ, ๊ทธ๋ฆฌ๊ณ ์๋ฒ์ ๋ฌด์์ ๊ฐ์ ๋ชจ๋ ๊ฐ๊ณ ์๋ ์ํ๊ฐ ๋๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋์นญ ํค์ ์์ฑ์ Pre-Master Secret์ ์ด์ฉํ์ฌ Master Secret ์์ฑ โ Key Material ์์ฑ โ Session Key ์์ฑ์ด๋ผ๋ ์ผ๋ จ์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ, ์ต์ข
์ ์ผ๋ก ์์ฑ๋ Session Key๊ฐ ๊ณง ๋์นญ ํค๋ฅผ ์๋ฏธํ๋ค. ํด๋น ๊ณผ์ ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ๋ชจ๋ ์ํ๋๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก SHA-1๊ณผ MD5๋ผ๋ Hashing ํจ์๋ค์ ์กฐํฉ๋ ๋ก์ง์ ์ด์ฉํ์ฌ ์์ฑ๋๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ๊ฐ ๊ฐ๋ค์ ์์ฑํ๊ธฐ ์ํด ์ํํ๋ ๋ก์ง์ ๋์ผํ๋ฏ๋ก ์ต์ข
์ ์ผ๋ก ๊ฐ๊ฐ ์ ์งํ๊ณ ์๋ Session Key๋ ์๋ก ๊ฐ์ ๊ฐ์์ด ๋ณด์ฅ๋๋ค.
โข
HandShake Finish
ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋ ๋ด๋ถ์ ์ผ๋ก ChangeCipherSpec์ด๋ผ๋ ์๋ก๊ฐ ์ฌ์ฉํ ์ํธ์ ๊ท๊ฒฉ์ ๋ณ๊ฒฝํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ๋ฐ์ดํฐ ์ก์ ๊ณผ ์์ ์ ์ํด ์ํธํํ ์ ์๋ ๋์นญ ํค๋ฅผ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ชจ๋ ์ ์ง ์ค์ด๋ฏ๋ก Finished๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด HandShake๋ฅผ ๋๋ด๊ฒ ๋๋ค. ํด๋น ๋จ๊ณ ์งํ๋ถํฐ๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ์ก์ ํ๊ณ ๋ณตํธํํ์ฌ ์ด์ฉํ๋ค.
4) ์ค์ต
์์ ๊ฐ์ ๊ณผ์ ์ผ๋ก SSL์ด ๋์ํ๋ ๊ฒ๊ณผ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTTPS ํต์ ์ ์ํํ๋ ๊ฒ์ ์ดํดํ๋ค๋ฉด, ์๋ฒ๊ฐ HTTPS ํต์ ์ ์ํํ ์ ์๋๋ก SSL Certificate์ ์ง์ ์์ฑํด๋ณด์. SSL Certificate์ ์์ฑ์ openssl์ด๋ผ๋ ๋ช
๋ น์ด์ ๋์์ ๋ฐ์ ์งํํ๋ค. ์๋ฒ์ Public Key์ ๋ํ ์ธ์ฆ์ ๋ฐ๊ธฐ ์ํด์ Root CA๋ก๋ถํฐ ์ธ์ฆ์ ๋ฐ์์ SSL Certificate์ ์์ฑํด์ผ ํ๋๋ฐ, ์ด ๋ ์ผ์ ์๊ธ์ด ๋ถ๊ณผ๋ ์ ์์ผ๋ฏ๋ก ๊ณต์ ๋ ฅ ์๋ CA๊ฐ ์๋ localhost๋ฅผ Root CA๋ก ๋์ด ์ ๋ขฐ์ฑ์ ์์ง๋ง ์ด์ฉ์ ๊ฐ๋ฅํ SSL Certificate์ ๋ง๋ค ๊ฒ์ด๋ค. ์ต์ข
์ ์ผ๋ก ์์ฑ๋ ์๋ฒ์ SSL Certificate์ ์ฌ์ฉํ ์ ์๋๋ก ์ค์ ํ์ผ์ ๊ธฐ์ฌํด์ฃผ๋ฉด ๋๋ค. SSL Certificate์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ ๊ฒ์ ์ด๋ค ์๋น์ค๋ฅผ ์ด์ฉํ๋๋์ ๋ฐ๋ผ ์ค์ ๋ฐฉ๋ฒ์ด ์์ดํ๋ฏ๋ก ์ฌ์ฉํ๋ ค๋ ์๋น์ค์ ๋ํด์ SSL Certificate์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ์ฐพ์๋ณด๋ ๊ฒ์ด ์ข๋ค.
1. ์๋ฒ์ Private Key ์์ฑ
openssl genrsa -out <server-private-key> 2048
2. ์๋ฒ์ Public Key ์์ฑ
openssl rsa -in <server-private-key> -pubout -out <server-public-key>
3. ์๋ฒ์ CSR ์์ฑ
openssl req -new -key <server-private-key> -out <server-csr>
CSR์๋ SSL Certificate์ ์์ฑํ ๋ ํ์ํ ์ ๋ณด๋ค์ด ์
๋ ฅ๋๊ณ , ๊ทธ ์ค์๋ ์๋ฒ์ Public Key๋ ํฌํจ๋๋ค. ํ์ง๋ง ๋ช
๋ น์ด์์๋ Private Key๊ฐ ๊ธฐ๋ก๋ ๊ฒ์ ๋ณผ ์ ์๋๋ฐ, ์ด๋ ์ด์ ๊ณผ์ ์์ Private Key๋ฅผ ์ด์ฉํ์ฌ Public Key๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ ๋์ํ์ฌ Private Key๋ฅผ ์
๋ ฅํ๋ฉด ์๋์ผ๋ก Public Key์ ๋ํด Trackingํ๊ฒ ๋๋ค. ๋ํ Private Key๋ฅผ ์ด์ฉํ์ฌ CSR์ ์๋ช
ํ์ฌ ์ฐจํ์ SSL Certificate์ ์์ฑํ ๋ Validํ CSR์์ ์ฆ๋ช
ํ ์ ์๋ค.
Common Name์ SSL Certificate๊ฐ ์์นํ ์๋ฒ์ Domain์ ์๋ฏธํ๋๋ฐ, ๋ค๋ฅธ ํญ๋ชฉ๋ค์ ์๋ตํ์ฌ๋ ์ด๋ ๋ฐ๋์ ์์ฑ๋์ด์ผ ํ๋ค.
4. Self-Signed Root CA์ Private Key ์์ฑ
openssl genrsa -out <ca-private-key> 2048
5. Self-Signed Root CA์ SSL Certificate
openssl req -new -x509 -key <ca-private-key> -out <ca-cert>
x509๋ PKI (Public Key Infrastructure)๋ก ๋ SSL Certficiate์ ๋ํ๋ด๋ ํ๋์ ํ์์ด๋ค. ๋ฐ๋ผ์ Public Key๋ฅผ ์ธ์ฆ์์ ๋ฐ์ธ๋ฉ ํ๋ ์ญํ ์ ๋ด๋นํ๋ค.
6. ์๋ฒ์ SSL Certificate ์์ฑ
openssl x509 -req -in <server-csr> -CA <ca-cert> -CAkey <ca-private-key> -CAcreateserial -out <server-cert>
3. WordPress & MySQL & phpMyAdmin
ft_server ๊ณผ์ ๋ฅผ ์งํํ๋ฉด์ ์๊ตฌ๋๋ ์๋น์ค๋ค์ WordPress, MySQL, phpMyAdmin๋ก ์ด 3๊ฐ์ด๋ค. ์ฃผ์ด์ง ์๋น์ค๋ค์ ํ๋์ Container์์ ๊ตฌ์ฑํ์ฌ ์คํ์ํค๊ธฐ๋ง ํ๋ฉด ๋๋ค. Docker๊ฐ ๋ฌด์์ธ์ง ๋ฐฐ์ ๊ณ SSL์ ๋ํด์ ๋๋ต์ ์ผ๋ก ์๊ฒ ๋์๊ธฐ ๋๋ฌธ์, ft_server๋ฅผ ๊ตฌ์ฑํ๋ 3๊ฐ์ ์๋น์ค๋ค์ด ๋ฌด์์ธ์ง๋ง ํ์
ํ๋ฉด ๊ณผ์ ๋ฅผ ์ํจํ๊ฒ ํ์ด๋๊ฐ ์ ์๋ค. ๋ฐ๋ผ์ ๊ฐ ์๋น์ค๋ค์ ์ ๋ง ๊ฐ๋จํ๊ฒ ์์๋ณด์.
๊ฐ ์๋น์ค๋ค์ ๋ํ ์๊ฐ์ด๋ฏ๋ก, ๊ตณ์ด ์ ํ ๋ด์ฉ๋ค์ ๋ณด์ง ์๊ณ ์ง์ ์ฐพ์๋ณด๋ ๊ฒ๋ ์ข๋ค.
1) WordPress
WordPress๋ ๋ํ์ ์ธ CMS (Content Management System) ์ค์ ํ๋๋ก, ์ฝ๊ฒ ์น ์ฌ์ดํธ๋ฅผ ์ ์ํ ์ ์๊ฒ ํด์ฃผ๋ ์๋น์ค์ด๋ค. ์น ์ฌ์ดํธ๋ฅผ ๊ฐ๋จํ๊ฒ ์ ์ํ์ฌ ์ฌ์ฉ์๊ฐ ๊ฐ๊ณ ์๋ ์ ๋ณด๋ค์ ์ฝ๊ฒ ํํํ๊ฒ ํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ์์ฑ๋ ์ ๋ณด๋ค์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค. WordPress๊ฐ CMS์์ ๊ฐ์ฅ ๋์ ์ ์ ์จ์ ๊ฐ์ง๋ ์ด์ ๋ ์ค์น๊ฐ ๊ฐ๋จํ๊ณ ๋ฌด๋ฃ๋ผ๋ ์ฅ์ ๋๋ฌธ์ด๋ค. ๋ํ ๋ค์ํ ํ
๋ง์ ํ๋ฌ๊ทธ์ธ๋ค์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ ์ฌ์ฉ์ ๋ฟ๋ง ์๋๋ผ ๋น์ฆ๋์ค ๋ชฉ์ ์ผ๋ก ์ด์ฉ๋๋ ๊ฒฝ์ฐ๋ ๋ง๋ค.
2) MySQL
MySQL์ ๊ฐ์ฅ ๋ํ์ ์ธ RDBMS (Relational Database Management System)์ด๋ค. ๋์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ ๋ฟ๋ง ์๋๋ผ ์คํ ์์ค๋ผ๋ ์ ๋๋ถ์ ๋ง์ ์ธ๊ธฐ๋ฅผ ์ป์ DBMS์ด์ง๋ง MySQL์ ๋ง๋ ๊ฐ๋ฐ์ฌ๊ฐ Oracle์ ์ธ์ ๋ ํ๋ถํฐ๋ MySQL์ ์์
์ฉ ๋ผ์ด์ผ์ค๋ ์ ๋ฃํ๋์๋ค. Oracle์ ์ ์ฑ
๊ณผ ์ถฉ๋ํ๋ฉด์ ํด์ฌํ ์ฝ์ด ๊ฐ๋ฐ์๋ค์ MySQL์ ์ฝ๋๋ฅผ ์ด์ฉํ์ฌ Maria DB๋ฅผ ๋ง๋ค์๊ณ ์ด ์ญ์๋ ์คํ ์์ค๋ก์จ ๋ฐฐํฌ๋ RDBMS์ด๋ค. ์ฌ์ฉ๋ ์ฝ๋๊ฐ ๋์ผํ๋ค ๋ณด๋ MySQL๊ณผ MariaDB๋ ํธํ์ฑ์ด ๋ณด์ฅ๋๋ฉฐ, ๋ชจ๋ ๊ธฐ๋ฅ์ด ๋์ผํ๊ฒ ๋์ํ๋ค. MySQL์ ๋ณ๋์ ๊ธฐ๋ณธ ์ค์ ์ ๊ฑด๋๋ฆฌ์ง ์์ผ๋ฉด 3306๋ฒ Port์์ ๋์ํ๋๋ฐ, MariaDB๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋์ํ๋ค.
MySQL์ ๊ฐ๋ฐํ๋ ๊ธฐ์ ์ ๋ฐํ์ผ๋ก MariaDB๋ฅผ ์ต์ ํํ์ฌ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฒฌํด๋ค ์ค์๋ MariaDB๊ฐ MySQL๋ณด๋ค ์ข๋ค๋ ๋ถ์๋ ์๋ค. ์ฑ๋ฅ ๋ฟ๋ง ์๋๋ผ ๋ผ์ด์ผ์ค ๋ฌธ์ ๋๋ฌธ์๋ ์ต๊ทผ์ ๋ง์ ๊ธฐ์
๋ค์ MySQL๋ณด๋ค MariaDB๋ฅผ ์ฌ์ฉํ๋ ค๋ ์ถ์ธ๋ฅผ ๋ณด์ด๊ณ , Linux ๋ฐฐํฌํ๋ค๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ผ์ด์ผ์ค ๋ฌธ์ ๋๋ฌธ์ MySQL์ ํฌํจํ์ง ๋ชปํ์ MariaDB๋ฅผ ํฌํจํ๋ ์ถ์ธ๋ฅผ ๋ณด์ด๊ณ ์๋ค.
3) phpMyAdmin
phpMyAdmin์ MySQL์ด๋ผ๋ DB๋ฅผ ์น ์์์ ๊ด๋ฆฌํ ์ ์๋๋ก php๋ก ์์ฑ๋ ์คํ ์์ค ํด์ด๋ค. ๋ฐ๋ผ์ MySQL์์ ์ฌ์ฉํ ์ ์๋ ๋๋ถ๋ถ์ ์น ์์์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์ง๊ด์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ์ฌ ํธ๋ฆฌํ๊ฒ DB๋ฅผ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ด์ฉํ๊ธฐ ์ํด ์ค์นํ๋ ๊ณผ์ ๋ ๊ต์ฅํ ๊ฐ๋จํ๋ค.
4. Nginx
์ด์ ํญ๋ชฉ์์ ์ ์๋ 3๊ฐ์ ์๋น์ค๋ค์ ์ง์ ์ธ๋ถ์ ์ฐ๊ฒฐํด๋ ๋์ง๋ง, ๋ช ๊ฐ์ง ์ด์ ๋ค๋ก ์ธํ์ฌ ์น ์๋ฒ๋ฅผ ํตํด ์ธ๋ถ์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
1.
์น ์๋ฒ๋ ํน์ Domain์ผ๋ก ์ ์ ํ์ ๋ ์ ์ ํ์ผ์ ์ ๊ณตํ๋ค. ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ดํ๋ฆฌ์ผ์ด์
์์ html, css, js์ ๊ฐ์ ์ ์ ํ์ผ์ ์ ๊ณตํด์ฃผ๋ฉด ๊ทธ๋งํผ์ ์๋น์ค์ ๋ก์ง์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์น ์๋ฒ๋ฅผ ์ด์ฉํ๋ฉด ์ดํ๋ฆฌ์ผ์ด์
์ ์๋น์ค ๋ก์ง๋ง ์ง์คํ์ฌ ์ํํ๋ฉด ๋๋ค.
2.
์์ฒญ์ ๋ํ ํธ๋ํฝ์ ์ง์ ๋ฐ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์๋น์ค ์ฌ์ด์ ์ค๊ฐ์๋ก์จ ์๋น์ค์ Load Balancing, Scaling, Health Checking ๋ฑ์ ๋ด๋นํ ์ ์๋ค. ์ฆ, Switch์ ๊ฐ์ ์ญํ ์ ๋ด๋น ํ ์ ์๋ค.
3.
ํด๋ผ์ด์ธํธ์ ์๋น์ค ์ฌ์ด์ ์ค๊ฐ์ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๋ ์๋น์ค์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ์ง ์์ผ๋ฏ๋ก ์๋ฒ์ ๋ณด์์ ๋์์ด ๋๋ค. ์ฆ, ์น ์๋ฒ๊ฐ Reverse Proxy๋ก์จ ํ์ฉ๋ ์ ์๋ค.
Proxy?
Proxy๋ผ๋ ๊ฒ์ ์ฌ์ ์ ์ผ๋ก๋ ๋๋ฆฌ๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋คํธ์ํฌ์์๋ ์ด์ ๋น์ทํ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค. ํต์ ์ํ ์ Proxy๋ ์ค๊ณ๊ธฐ๋ก์จ ์ด์ฉ๋๊ณ , ์ด์ ๋ฐ๋ผ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ๋๋ฆฌ๋ก ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํ๋ค. ์ด ๋์ Proxy๋ ๋ด๋ถ๋ง์ ์์ฒญ๋ค์ ์ข
ํฉํ์ฌ ์ธ๋ถ๋ก ๋ณด๋ด๊ฑฐ๋ ์ธ๋ถ์ ์์ฒญ๋ค์ ์ข
ํฉํ์ฌ ๋ด๋ถ๋ง์ผ๋ก ๋ณด๋ด๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์, Proxy๋ฅผ ์ด์ฉํ๋ฉด ๋ณด์์ ๋์ผ ์ ์๊ณ Caching์ ์ด์ฉํ์ฌ ์ฑ๋ฅ ํฅ์์ ๋
ธ๋ฆด ์ ์๋ค. Proxy๋ Forward Proxy์ Reverse Proxy๋ก ๋๋๋ค.
Forward Proxy
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ข
ํฉํ์ฌ ์๋ฒ๋ก ๋ณด๋ด๋ ์ญํ ์ ํ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ง์ ์ ์ธ ํต์ ์ด ์๋๊ธฐ ๋๋ฌธ์ ์๋ฒ์์๋ ํด๋ผ์ด์ธํธ์ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด๋ฅผ ์ ์ ์์ด ํด๋ผ์ด์ธํธ์ ๋ํ ๋ณด์์ ๋์ผ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ์
๋ด ํต์ ๋ง์ ์ด์ ๊ฐ์ด ๊ตฌ์ฑํ๋ค. ๋ํ ํต์ ๋ง์ Forward Proxy๋ฅผ ๋๋ฉด ๊ตฌ์ฑํ๊ณ ์๋ ์ฌ์ฉ์๋ค์ด ๊ณตํต์ ์ธ ์ ๋ณด๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ์๋ ์ด๋ฅผ Forward Proxy์ Cachingํ์ฌ ๋ง์ ์ฑ๋ฅ ์ด๋์ ๋ณผ ์ ์๋ค.
Reverse Proxy
์๋ฒ์ ์๋น์ค๋ค์ ์ข
ํฉํ๋ ์ญํ ์ ํ๋ฉฐ, Forward Proxy์ ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ง์ ์ ์ธ ํต์ ์ด ์๋๋ฏ๋ก ์๋ฒ์ ๋ค์ํ ์๋น์ค๋ค์ ์ง์ ์ ์ธ ์ ๋ณด๋ฅผ ๋
ธ์ถํ์ง ์์ ์๋น์ค์ ๋ํ ๋ณด์์ ๋์ผ ์ ์๋ค. ์๋ฒ ์
์ฅ์์์ Reverse Proxy๋ ๋จ์ํ ๋ณด์์ ์ธ ์ธก๋ฉด ๋ฟ ์๋๋ผ, ์๋น์ค์ ํ์ฅ์ฑ, ๋
๋ฆฝ์ฑ์์๋ ๋ง์ ๋์์ด ๋๋ค.
์์ ์ ์๋ ๊ฒ๋ค์ ์น ์๋ฒ ์์ด ์ง์ ๊ตฌํํ์ฌ ์ด์ฉํ ์ ์๋ค๋ฉด ์๊ด ์๊ฒ ์ง๋ง ๊ทธ๋ ์ง ์๋ค๋ฉด ์น ์๋ฒ์ ๋์์ ๋ฐ์ ๋ง์ ์์
๋ค์ ์๋ ์ ์๋ค. ์น ์๋ฒ์๋ Apache, Nginx, Google Web Server๋ฑ ๋ค์ํ ์ข
๋ฅ๊ฐ ์์ง๋ง, ๊ทธ ์ค์์ ๋ํ์ ์ธ ์น ์๋ฒ๋ก๋ Apache์ Nginx๋ฅผ ๊ผฝ์ ์ ์๋ค.
1) Apache & Nginx
๊ธฐ์กด์ ์น ์๋ฒ ์ํ๊ณ์์๋ Apache๊ฐ ์๋์ ์ผ๋ก ๋ง์ด ์ด์ฉ๋์์ง๋ง, ์ต๊ทผ์๋ ๋ง์ ๊ธฐ์
๋ค์ด Nginx๋ฅผ ๋ง์ด ์ด์ฉํ๊ณ ์๋ค. ์ด์ ๋ํด ๊ฐ๋จํ ์ง๊ณ ๋์ด๊ฐ๋ณด๋ฉด, Apache๋ MPM (Multi-Process Module) ๋ฐฉ์์ผ๋ก HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , Nginx๋ Event ๊ธฐ๋ฐ์ผ๋ก HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. ๋ ๋ฐฉ์์ ํน์ฑ์ ๊ฐ๋จํ ์ดํด๋ณด์.
Apache๊ฐ ์ฌ์ฉํ๋ MPM ๋ฐฉ์์ ์ฝ๊ฒ ๋ณด๋ฉด ํด๋ผ์ด์ธํธ์ ์ ์์ด ๋ฐ์ํ ๋๋ง๋ค ํ๋ก์ธ์ค ํน์ ์ฐ๋ ๋๋ฅผ ์์ฑํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค. ๋ฐ๋ผ์ ๋์ ์ ์์๊ฐ ๋ง์์๋ก CPU ๋ฐ Memory์ ๋ํ ์์ ์ฌ์ฉ์ด ๋์์ง๋ค๋ ๋จ์ ์ด ์๋ค. ๋ํ Apache์์๋ ํ๋ก์ธ์ค ํน์ ์ฐ๋ ๋๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์์ ๋ Blocking ๋๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋๋ฐ ์ด ๋๋ ํด๋น ์์ฒญ์ด ์๋ฃ๋๊ธฐ ์ ๊น์ง ๋ค๋ฅธ ํ๋ก์ธ์ค ํน์ ์ฐ๋ ๋๋ ๋๊ธฐ ์ํ๋ก ์กด์ฌํ์ฌ ํจ์จ์ด ๋จ์ด์ง๋ค๋ ๋จ์ ๋ ์๋ค.
Nginx์ ๊ฒฝ์ฐ์๋ Apache์ฒ๋ผ ํด๋ผ์ด์ธํธ์ ์ ์์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ๋ก์ธ์ค ํน์ ์ฐ๋ ๋์ ์์ฑ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด ์๋๋ผ Event๋ฅผ ์ด์ฉํ์ฌ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. ์ฆ, ํ๋ก๊ทธ๋จ์ด ๋์ํ๋ ํ๋ฆ์ด Event์ ์ํด์ ๊ฒฐ์ ๋๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก 1๊ฐ์ ๊ณ ์ ๋ ํ๋ก์ธ์ค๋ง ๋์ฑ๋ก ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํด์๋ ๋น๋๊ธฐ์ ์ผ๋ก ์์
๋ค์ ์ฒ๋ฆฌํ๋ฏ๋ก ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ด ๋๊ธฐ์ง ์๊ณ ์ฐ์์ ์ด๋ค. ๋ฐ๋ผ์ Apache์ ๋ฌ๋ฆฌ ๋์ ์ ์์๊ฐ ๋ง์์ ธ๋ ํ๋ก์ธ์ค ๋ฐ ์ฐ๋ ๋๊ฐ ์ฆ๊ฐํ์ง ์์ผ๋ฏ๋ก ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ์ ํด์ง ์ฐ๋ ๋๋ง ์ฌ์ฉ๋๋ฏ๋ก CPU์ ์๋ชจ๊ฐ ๋์ง ์๊ณ , ๋จ์ผ ํ๋ก์ธ์ค๋ฅผ ๋๊ณ Event์ ์ํ ์ฒ๋ฆฌ๋ฅผ ํ๋ฏ๋กContext Switching์ ๋น์ฉ์ด ๋์ง ์๋ค.
๋ฌผ๋ก Apache๋ Nginx๊ฐ ๋ง๋ค์ด์ง๊ธฐ ์ ๋ถํฐ ์กด์ฌํ์ฌ ์์ฅ์ ๋๋ถ๋ถ์ ์ ์ ํ๋ ์น ์๋ฒ์ธ๋งํผ, Nginx๋ณด๋ค ์ฌ์ฉํ ์ ์๋ ๋ชจ๋๋ค์ด ๋ง๊ณ ์์ ์ฑ ๋ฐ ํ์ฅ์ฑ, ํธํ์ฑ์ด๋ผ๋ ์ธก๋ฉด์์ Nginx๋ณด๋ค ์ฐ์ธํ๋ค. ๊ทธ๋ผ์๋ Nginx๋ ์ ์๋ Nginx์ ์ฅ์ ์ ํฌํจํ์ฌ, ์น ์๋ฒ๋ฅผ ๊ฐ๋จํ๊ฒ ๊ตฌ์ฑํ๋ ๊ฒ ์ญ์ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ต๊ทผ์ ๊ฐ์ฅ ๋ง์ด ์ ํธ๋๋ ์น ์๋ฒ์ด๋ค.
2) Nginx ์ค์น ๋ฐ ์ค์ ํ์ผ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
Nginx๋ฅผ ์ค์นํด๋ณด๊ธฐ ์ํด ์์์ Container๋ฅผ ์์ฑํด๋ณด์. ft_server์์๋ Debian์ Buster ๋ฒ์ ์ ์ด์ฉํด์ผํ๋ฏ๋ก ์ด๋ฅผ ์ด์ฉํ์ฌ Container๋ฅผ ์์ฑํ๊ณ Nginx๋ฅผ ์ค์นํด๋ณผ ๊ฒ์ด๋ค. ์ค์น๋ฅผ ๋ง์น๋ฉด Nginx์ ํ์ผ ๊ฒฝ๋ก์ Nginx์ ๋ํ์ ์ธ ์ค์ ํ์ผ์ธ nginx.conf์ ๊ฒฝ๋ก๋ฅผ ํ์ธํด๋ณผ ๊ฒ์ด๊ณ , nginx.conf์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก Nginx์ ์ฌ๋ฌ ์ค์ ํ์ผ๋ค์ ํ์ธํ๊ธฐ ์ํด ๊ทธ ๊ตฌ์กฐ๋ฅผ ์์๋ณผ ๊ฒ์ด๋ค.
1. Container ์์ฑ
docker run -i -t โname container_buster debian:buster
2. apt-get ์ค์น ๋ฐ nginx ์ค์น
apt-get update -y && apt-get install -y nginx tree
3. nginx์ ๊ฒฝ๋ก ๋ฐ nginx.conf์ ๊ฒฝ๋ก
which nginx
find / -name nginx.conf
4. Nginx ์ค์ ํ์ผ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
cd /etc/nginx
tree .
3) Nginx ์ค์
Nginx์ ์ค์ ํ์ผ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์์ ํ์ธํ ๊ฒ์ฒ๋ผ ์ ๋ง ๋ค์ํ๊ฒ ์กด์ฌํ๋ ๊ฒ์ ์ ์ ์๋ค. ๋ํ์ ์ผ๋ก ์ฌ์ฉ๋๋ nginx.conf๋ /etc/nginx์ ์์นํ๊ณ , ์ด๋ฅผ ์ด์ด์ ํ์ธํด๋ณด๋ฉด ์ฌ๋ฌ ์ค์ ํญ๋ชฉ๋ค์ด {}์ ๊ฐ์ด ์ค๊ดํธ๋ก ๋ฌถ์ธ ๊ฒ๊ณผ ๊ทธ๋ ์ง ์์ ๊ฒ๋ค์ด ์กด์ฌํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฌ๊ธฐ์ {}์ ๊ฐ์ด ์ค๊ดํธ๋ก ๋ฌถ์ธ ์ค์ ํญ๋ชฉ์ Block Directive๋ผ๊ณ ์นญํ๊ณ , ๊ทธ ์ธ์ Block Directive ๋ด๋ถ์์์ ์ค์ ํญ๋ชฉ์ด Simple Directive๋ฅผ ์๋ฏธํ๋ค. ์ด ๋ nginx.conf ๋ฟ๋ง ์๋๋ผ Nginx๋ฅผ ์ค์ ํ๋ ๋๋ถ๋ถ ํ์ผ๋ค์ ์ด์ฒ๋ผ Directive๋ค๋ก ๊ฐ์ ์ค์ ํ๊ฒ ๋๋ค.
nginx.conf๋ผ๋ ํ์ผ์ Nginx๊ฐ ์ ๋ฐ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์ํด์ผ ํ ์ง ๊ฒฐ์ ์ง๋ ํ์ผ์ธ๋ฐ, ft_server๋ฅผ ์งํํ ๋๋ Nginx๋ฅผ ์ค์นํ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋ nginx.conf์ ์ค์ ์ ๋ฐ๋ฅผ ๊ฒ์ด๋ค. ๋ค๋ง ์ ๊ณต๋๋ ์น ์๋ฒ์์ ์ด๋ค URI์ ์ ๊ทผํ์ ๋ ํน์ ์น ํ์ด์ง๋ฅผ ์ ๊ณต ๋ฐ์ ์ ์์ด์ผํ๋ฏ๋ก, URI์ ๋ํ ์ค์ ๋ฐ ์น ํ์ด์ง์ ๋ํ ์ค์ ์ ํด์ค์ผ ํ๋ค. ์ด์ ๊ฐ์ ์ค์ ์ nginx.conf์์ ์ํํ์ง ์๊ณ , sites-available/default์์ ์ํํ ์ ์๋ค. ๋ฐ๋ผ์ sites-available/default์์ ์ฌ์ฉํ ์ ์๋ Directive๋ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ft_server ์๊ตฌ ์ฌํญ์ ๋ง์ถ์ด ์์ฑํ ํ์ผ๋ก ํ์ธํด๋ณผ ๊ฒ์ด๋ค.
# 80๋ฒ Port๋ก ์ ๊ทผํ์ ๋์ ๋ํ ์๋ฒ ์ค์
server {
# IPv4 ์ฃผ์๋ก ์ ๊ทผํ 80๋ฒ Port์ ๋ํด Listen
listen 80;
# IPv6 ์ฃผ์๋ก ์ ๊ทผํ 80๋ฒ Port์ ๋ํด Listen
listen [::]:80;
# ํด๋น ์ฃผ์๋ค์ ๊ตฌ์ฑํ๋ Host ๋ถ๋ถ๊ณผ Uri ๋ถ๋ถ์ ๊ทธ๋๋ก ์ด์ฉํ์ฌ HTTPS๋ก Redirect
# HTTP์์ Redirection์ ์๋ฏธํ๋ Status Code์ธ 301์ ์ด์ฉ
return 301 https://$host$request_uri;
}
# 443๋ฒ Port๋ก ์ ๊ทผํ์ ๋์ ๋ํ ์๋ฒ ์ค์
server {
# IPv4 ์ฃผ์๋ก ์ ๊ทผํ 443๋ฒ Port์ ๋ํด Listen
listen 443;
# IPv6 ์ฃผ์๋ก ์ ๊ทผํ 443๋ฒ Port์ ๋ํด Listen
listen [::]:443;
# 443๋ฒ Port๋ฅผ ์ด์ฉํ ํ๋กํ ์ฝ์ HTTPS์ด๋ฏ๋ก SSL์ ํ์ฑํ
ssl on;
# SSL์์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ๊ธฐ ์ํ ์๋ฒ์ ์ธ์ฆ์๋ฅผ ๋ช
์
ssl_certificate /cert/server.crt;
# ์๋ฒ์ Public Key๋ก ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํ ๋ ์ฌ์ฉํ Private Key ๋ช
์
ssl_certificate_key /cert/private.key;
# ์๋ฒ์์ ์ ๊ณตํ ํ์ผ๋ค์ด ์กด์ฌํ๋ ๋๋ ํ ๋ฆฌ ๋ช
์
# ์๋ ๊ฒฝ๋ก๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ์ /etc/nginx๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ
# ์๋๋ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ด์ฉํ ๊ฒ
root /var/www/html;
# ์ ๊ณตํ ํ์ผ ๋ชฉ๋ก๋ค์ ๋ช
์
index index.html index.htm index.nginx-debian.html index.php;
# ์๋ฒ์ ํด๋นํ๋ Domain Name์ ์ค์
server_name localhost;
# /์ ํ์์ผ๋ก ๋๋๋ URI๋ ํด๋น Directive๋ก ๋ถ๊ธฐ
location / {
# ๋ด๋ถ์์ ์ ๊ณตํ ํ์ผ ์ค URI์ ํด๋นํ๋ ํ์ผ์ด ์๋ค๋ฉด ๋ชฉ๋ก์ ์ ๊ณต
autoindex on;
# URI์ ํด๋นํ๋ ํ์ผ์ ์ฐพ์๋ณด๊ณ ์๋ค๋ฉด ์ค๋ฅ๋ฅผ ๋ฐํ
# ๋ฐํ ์ Status Code๋ Not Found์ ํด๋นํ๋ 404๋ฅผ ์ด์ฉ
try_files $uri $uri/ =404;
}
# ~๋ผ๋ ๋ฌธ์๋ ํธ๋๋ผ๊ณ ํ์ฌ ์ด์ด์ง๋ ๋ฌธ์๋ค์ Regular Expression์ผ๋ก ์ธ์
# Regualr Expression์ผ๋ก ์ธ์ํ๋ฏ๋ก ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ ๊ฒ์ ์ฃผ์
# .php์ ํ์์ผ๋ก ๋๋๋ URI๋ ํด๋น Directive๋ก ๋ถ๊ธฐ
location ~ \.php$ {
# php-fpm์ด๋ผ๋ Fast CGI๋ฅผ ์ด์ฉํ๋ฏ๋ก ์ด์ ๋ํ ์ค์ ์ ํฌํจ
include snippets/fastcgi-php.conf;
# php-fpm์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ด์ฉํ ํต์ ๋ฐฉ์์ ๋ช
์
# php-fpm์ด ์ด์ฉํ๋ Unix Socket์ ๋ช
์
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}
}
Plain Text
๋ณต์ฌ
root์ index๋ผ๋ Directive๋ location์ด๋ผ๋ Directive์ ๋ฐ๋ผ ๋์ํ๋๋ก location ๋ด๋ถ์ ์์ฑํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. ์ด์ ๊ฐ์ด ์์ฑํ ๊ฒฝ์ฐ, ํน์ location์ ๋ถ๊ธฐ๋์์ ๋ root์ ํด๋นํ๋ ๋๋ ํ ๋ฆฌ์์ index์ ํด๋นํ๋ ํ์ผ์ ์ฐพ์ ์ ๊ณตํ๊ฒ ๋๋ค.
WordPress ๋ฐ phpMyAdmin์ ํด๋นํ๋ URI๋ php-fpm์ ํ์ ๋น๋ ค ์ ์ ์น ํ์ด์ง๋ฅผ ์ ๊ณต ๋ฐ์ผ๋ฏ๋ก ๋ด๋ถ์์ ์ฌ์ฉํ ํ์ผ์ ๋ช
์ํ ํ์๊ฐ ์๊ณ , ์ค๋ก์ง /๋ผ๋ ์ต์์ URI์์๋ง ๋ด๋ถ์ ํ์ผ์ ์ ๊ณต ๋ฐ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด์ฌ์ฃผ๋ฉด ๋๋ฏ๋ก ๋๋จธ์ง URI๋ ์ ๊ณต ๋ฐ์ ํ์ผ์ ์ฐพ์ง ์๋๋ก root์ index๋ฅผ location ์ธ๋ถ์ ๋ช
์ํ์๋ค.
์ ์ํฉ์์ /์ด๋ผ๋ location์ ํด๋นํ๋ URI๋ ์ฌ๋ฟ ์๊ฒ ์ง๋ง ์๋ฒ ์ ๊ทผ ์ ์ด์ฉ๋๋ ์ต์์ URI ์ญ์ /์ด๋ผ๋ location์ ํด๋นํ๋ค. ๋ฐ๋ผ์ root์ index๋ฅผ ํด๋น location ๋ด๋ถ์ ์ฎ๊ฒจ๋ ๋์ผํ๊ฒ ๋์ํ๊ฒ ๋๋ค.
Nginx์ ๋ํ ์ค์ ์ ์ฌ๊ธฐ์ ์๊ฐํ Directive ์ธ์๋ ์ ๋ง ๋ง์ Directive๋ฅผ ์ด์ฉํ ์ ์๊ธฐ ๋๋ฌธ์, ์ฌ๋ ์๋ ์๋ฒ ๊ตฌ์ฑ์ ์ํด์ ์ง์ Document๋ฅผ ์ฐพ์๋ณด๋ฉด์ ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค. ํนํ ์ ์์์ Regular Expression์ ๋์๋ฌธ์ ๊ตฌ๋ถ์ ๋ฌด์ํ๋ ๊ฒ๋ค์ด๋ URI์ ์ ํํ ๋งค์นญ์ ์ํด์๋ง location์ด๋ผ๋ Directive์ ๋ํด ๋ถ๊ธฐํ๋๋ก ๋ง๋๋ ๋ค์ํ ์ค์ ๋ค๋ ์์ผ๋ ์ด๋ค๋ ์ฐพ์๋ณด๋ฉด ์ข์ ๊ฒ์ด๋ค. ์๋ ๋งํฌ์์ ๋ค์ํ Directive์ ์์๋ฅผ ํ์ธํ ์ ์๋ค.
5. LEMP Stack
ft_server๋ฅผ ๊ตฌ์ฑํ๊ณ ์๋ ์๋น์ค๋ค๊ณผ ์น ์๋ฒ๋ฅผ ๋ค์ ํ ๋ฒ ํ์ธํด๋ณด๋ฉด, WordPress, MySQL, phpMyAdmin, Nginx์ด๊ณ ์ด๋ค์ Linux ์ค์์๋ Debian์ Buster ๋ฒ์ ์์์ ๋์ํ ์ ์์ด์ผ ํ๋ค. ์ด ๋ ๊ตฌ์ฑํ๋ ค๋ ์๋ฒ์ ๋ชฉ์ ์ ๊ฒฐ๊ตญ์ WordPress๋ฅผ ์ด์ฉํ ์น ์ฌ์ดํธ ์ ์ ๊ธฐ๋ฅ ์ ๊ณต์ ์์ผ๋ฏ๋ก, WordPress๋ฅผ ์ ์ธํ Debian, Nginx, MySQL, phyMyAdmin๋ฅผ ๋ฌถ์ ๊ตฌ์กฐ๋ฅผ LEMP Stack์ด๋ผ ๋ถ๋ฅธ๋ค. LEMP Stack์ Linux์ L, Nginx์ ๋ฐ์์์ E, MySQL์ M, php์ P๋ฅผ ๋ฐ์ ์ด๋ฆ์ ๋ถ์ธ ๊ตฌ์กฐ์ด๋ฉฐ, LEMP Stack์ Nginx์ ํน์ฑ ์ ์น ํ์์ง ์ ๊ณต์ ์ํ ์ํํธ์จ์ด๋ค์ ๊ทธ๋ฃน์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
LAMP Stack์ A๋ Apache๋ฅผ ์๋ฏธํ๊ณ , ๋๋จธ์ง ๋ฌธ์๋ LEMP Stack๊ณผ ๋์ผํ๋ค. php๋ ๋ํ์ ์ธ Server-Side Scripting Language์ด๋ค.
1) Packages
Debian์ ์ค์นํ Package๋ค์ ์ต๋ํ apt-get์ด๋ผ๋ Package Manager๋ก ์ค์นํ ๊ฒ์ด๋ฉฐ, apt-get์ผ๋ก ์ค์น๊ฐ ๋ถ๊ฐ๋ฅํ Package๋ค์ wget์ ์ด์ฉํ์ฌ ์น ์์ ์๋ฃ๋ฅผ ์ง์ ์ค์นํ ๊ฒ์ด๋ค. ์ด์ ๋ฐ๋ผ ์ฌ์ฉ๋๋ Package๋ค์ ์๋์ ๊ฐ๋ค.
apt-get
โข
wget
apt-get๋ก ์ค์นํ ์ ์๋ Package๋ค์ ์น ์์ ์๋ฃ์ ์ง์ ์ ๊ทผํ์ฌ ์ค์นํ ์ ์๋ค.
โข
vim
Debian์ ์ด์ฉํ Container์์๋ Text Editor๊ฐ ์ค์น๋์ด ์์ง ์๋ค.
โข
nginx
์ ์ ์น ํ์ด์ง ์ ๊ณต์ ์ํด ์ด์ฉํ๋ ์น ์๋ฒ์ด๋ค.
โข
openssl
nginx๋ก ๊ตฌ๋ํ๊ณ ์๋ ์น ์๋ฒ๋ฅผ HTTPS๋ก ์ ๊ทผํ ์ ์๊ฒ ์ธ์ฆ์๋ฅผ ์์ฑํด์ผ ํ๋ค.
โข
mariadb-server
WordPress์์์ ์ฌ์ฉ๋ ์ ๋ณด๋ค์ ๊ธฐ๋กํ๊ธฐ ์ํ DB ์๋ฒ์ด๋ฉฐ, ํด๋น ์ ๋ณด๋ค์ ๋ณ๋์ ์ค์ ์ ํตํด phpMyAdmin์์ ํ์ธํ ์๋ ์๋ค. MariaDB๋ MySQL๊ณผ ์๋ฒฝํ ํธํ์ฑ์ ๊ฐ๊ธฐ ๋๋ฌธ์ MySQL๊ณผ ์ฐ๋ํ๋ phpMyAdmin๊ณผ๋ ๋ฌธ์ ์์ด ์ฐ๋๋๋ค. Debian์ Buster ๋ฒ์ ์์๋ MariaDB๋ง์ ์ง์ํ๋ค.
โข
php-mysql
๋จ์ํ HTML์์๋ MySQL์ ์ ๊ทผ ํ ์ ์์ง๋ง php๋ฅผ ์ด์ฉํ์ ๋ ์ด๋ฅผ ๊ฐ๋ฅํ๋๋ก ํ๋ค.
โข
php-mbstring
๊ธฐ๋ณธ์ ์ผ๋ก Ascii ๋ฌธ์๋ง ์ฒ๋ฆฌํ ์ ์๋ php๋ฅผ 2 ๋ฐ์ดํธ์ ํ์ฅ๋ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ํด์ค๋ค.
โข
php-fpm
๊ธฐ๋ณธ์ ์ธ ์ ์ ์น ํ์ด์ง๋ค์ ๋ณด์ฌ์ฃผ๋๋ฐ๋ Nginx์ ๊ธฐ๋ฅ๋ง์ผ๋ก ์ถฉ๋ถํ์ง๋ง WordPress์ ๊ฐ์ด ๋์ ์ธ ๋ฐ์ดํฐ๋ค์ ๋ฐ์์ ์น ํ์ด์ง๋ก ๋ํ๋ด๊ธฐ ์ํด์ , ๋์ ์ผ๋ก ์ป์ ๋ฐ์ดํฐ๋ค์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ์ธ ์น ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ์ด๋ฌํ ๋ณํ ๊ณผ์ ์ Nginx์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ๋์ ์ธ ๋ฐ์ดํฐ๋ค์ ๋ฐ์์ ์น ํ์ด์ง๋ก ๋ง๋ค์ด์ฃผ๋ CGI (Common Gateway Interface)๊ฐ ํ์ํ๋ค. php-fpm์ ์ด๋ฆ์์ ๋ณด์ด๋ ๊ฒ์ฒ๋ผ php๋ฅผ ์ด์ฉํ์ฌ ์น ํ์ด์ง๋ฅผ ์์ฑํด์ฃผ๋ฉฐ, fpm์ Fast CGI Process Manager๋ฅผ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ Fast๋ผ๋ ์๋ฏธ๋ ์น ํ์ด์ง ์์ฑ ์์ฒญ๋ง๋ค ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค์ด์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด ์๋๋ผ ์ด๋ฏธ ์์ฑ๋์ด ์๋ ํ๋์ ํ๋ก์ธ์ค๋ฅผ ์ฌํ์ฉํจ์ผ๋ก์จ ๋น๊ต์ ๋น ๋ฅธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ถ์ ๋ช
์นญ์ด๋ค.
wget
โข
WordPress
์น ์ฌ์ดํธ๋ฅผ ์ฝ๊ฒ ์ ์ํ ์ ์๋๋ก ํด์ฃผ๋ ์๋น์ค ํ๋ซํผ์ด๋ค.
โข
phpMyAdmin
MySQL์ DB๋ค์ php๋ฅผ ์ด์ฉํ์ฌ ์น์ผ๋ก๋ ์ ๊ทผ, ์์ฑ, ์์ ์ ํ ์ ์๋๋ก ๋ง๋ค์ด์ฃผ๋ ์ง๊ด์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ ํด์ด๋ค.
2) ์๋ฒ ๊ตฌ์กฐ
์๋ฒ์์ ์ ์งํ๋ 3๊ฐ์ ์๋น์ค์ ์ด๋ฅผ ์ ๊ณตํด์ฃผ๋ ์น ์๋ฒ๋ฅผ ์ดํดํ๊ณ , ์ด์ ๋ฐ๋ผ ํ์ํ Package๋ค์ ์ ์ ํ์ผ๋ฏ๋ก ๊ตฌ์ฑํ๋ ค๋ ์๋ฒ์ ๊ตฌ์กฐ๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
3) ์๋ฒ ๊ตฌ์ฑ ์์
Dockerfile
1.
Debian Buster์ ๋ํ Image๋ฅผ Base๋ก ์ฌ์ฉ
2.
์๋ฒ ๊ตฌ์ฑ ์ ํ์ํ ์ ๋ณด๋ค์ ์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ ๋ฐ์ ์ ์๋๋ก ๋ช
์
3.
์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ๋ฐ์ ์ ๋ณด๋ค์ ํ๊ฒฝ ๋ณ์๋ก ์ค์
4.
ํ์ํ Package๋ค์ ์ค์น
5.
DB๋ก ์ฌ์ฉ๋ ๋ฐ์ดํฐ๋ค์ Container ์ญ์ ์๋ ๋จ์ ์์ ์ ์๋๋ก Volume ์ค์
6.
์๋ฒ ์ค์ ์ ํ์ํ Script๋ค์ Container ์์ฑ ์ ์ด์ฉํ ์ ์๋๋ก ๋ณต์ฌ
7.
์๋ฒ๊ฐ ์ฌ์ฉํ๋ Port์ ๋ํด์ ๋ช
์
8.
์๋ฒ ์ค์ ์ ์ํ Script๋ฅผ Container ์์ฑ ์ ์คํํ๋๋ก ๋ช
์
์์ธํ ์ฌํญ์ ์ ๋งํฌ์ ๊ธฐ์ฌ๋ ์ฝ๋๋ฅผ ํ์ธํ์.
run.sh
1.
๋ด๋ถ์ ์ผ๋ก ์์ฃผ ์ฌ์ฉ๋๋ ๊ฐ๋ค์ ๋ณ์ํ
2.
์๋ฒ ๊ตฌ์ฑ์ ํ์ํ ํ์ผ๋ค์ ์์น์ํฌ ๋๋ ํ ๋ฆฌ ์์ฑ
3.
SSL Certificate ์์ฑ
4.
์๋ฒ ๊ตฌ์ฑ์ ํ์ํ Script๋ค์ ์์ฑ (Nginx ์ค์ ํ์ผ, WordPress์ ๋ํ DB ์์ฑ ํ์ผ)
5.
Nginx ์ค์ ํ์ผ์ ๊ธฐ์กด ํ์ผ๊ณผ ๋์น ๋ฐ ์ค์ ๊ฐ ์์
6.
ํ์ํ ์๋น์ค๋ค์ ์์
7.
WordPress ์ค์น ๋ฐ ์ฐ๋ (์ค์ ํ์ผ ์์ฑ ๋ฐ ์ค์ ๊ฐ ์์ )
8.
phpMyAdmin ์ค์น ๋ฐ ์ฐ๋ (์ค์ ํ์ผ ์์ฑ ๋ฐ ์ค์ ๊ฐ ์์ )
9.
WordPress ๋ฐ phpMyAdmin์ ๋ํ DB๋ฅผ ์์ฑ (์๋ฒ ๊ตฌ์ฑ์ ์ํด ์์ฑํ Script๋ฅผ ์ด์ฉ)
10.
์์ํ๋ ์๋น์ค๋ค์ ์ฌ์์
11.
์๋ฒ ๊ตฌ์ฑ์ ์ด์ฉํ๋ ํ์ผ ๋ฐ ๋๋ ํ ๋ฆฌ ์ญ์
12.
์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ ๋ฐ์์ ํ๊ฒฝ ๋ณ์๋ก ๋ง๋ ๊ฐ๋ค์ ํด์
13.
PID๋ฅผ ์ต์ 1๋ก ์ ์งํ๊ธฐ ์ํด bash์ ๊ฐ์ ํ๋ก์ธ์ค ์คํ