Search
๐Ÿ 

ft_server

Created
2021/06/01
tag
42์„œ์šธ
42Seoul
ft_server
Docker
SSL
Nginx
phpMyAdmin
MySQL
WordPress

Subjects

โ€ข
โ€ข
โ€ข

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์„ ์ด์šฉํ•œ ํ†ต์‹ ์„ ์œ„ํ•ด์„  ๋ฐ์ดํ„ฐ์˜ ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”์—๋งŒ ๋Œ€์นญ ํ‚ค๋ฅผ ์ด์šฉํ•˜๊ณ , ๋Œ€์นญ ํ‚ค์˜ ์ „๋‹ฌ์„ ์œ„ํ•ด ๋น„๋Œ€์นญ ํ‚ค๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
์–ด๋– ํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์— ๋Œ€์นญ ํ‚ค๋ฅผ ๋น„๋Œ€์นญ ํ‚ค๋กœ ์•”ํ˜ธํ™” ํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์ด๋ ‡๊ฒŒ ์•”ํ˜ธํ™” ๋œ ๋Œ€์นญ ํ‚ค๋ฅผ ํด๋ผ์ด์–ธํŠธ๋Š” ์–ด๋–ป๊ฒŒ ๋ณตํ˜ธํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ธ์ง€ ์•Œ์•„๋ณด์ž. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๋Œ€์นญ ํ‚ค๋Š” ์†Œ์ˆ˜๋ฅผ ์ด์šฉํ•œ ์ธ์ˆ˜๋ถ„ํ•ด์˜ ์–ด๋ ค์›€์— ๊ทผ๊ฑฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์ด๋Š” Aร—BA \times B๊ฐ€ CC๋ผ๋Š” ๊ณ„์‚ฐ์„ ์‰ฝ๊ฒŒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, CC๋ฅผ ์ด๋ฃจ๋Š” ์ˆ˜๊ฐ€ ์ •ํ™•ํžˆ AA์™€ BB๋ผ๋Š” ๊ฒƒ์„ ์ฐพ์•„๋‚ด๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด ๋•Œ์˜ AA์™€ BB๊ฐ€ ์—„์ฒญ ๊ฑฐ๋Œ€ํ•œ ์–ด๋–ค ์ˆ˜ CC๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์—„์ฒญ ๊ฑฐ๋Œ€ํ•œ 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์™€ ๊ฐ™์€ ๋‚ด์šฉ๋ฌผ๋“ค์ด AA, BB, CC๋ผ๊ณ  ํ•˜๊ณ  ์ด๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ Hashing ๊ฐ’์„ HH๋ผ๊ณ  ํ•˜์ž. Hashing์— ๋Œ€ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋™์ผํ•˜๋‹ค๋ฉด AA, BB, CC์— ๋Œ€ํ•ด ๋ช‡ ๋ฒˆ์„ Hashingํ•ด๋„ ๊ทธ ๊ฐ’์€ HH๊ฐ€ ๋‚˜์˜จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  HH๋ผ๋Š” ๊ฐ’์€ ๋ณตํ˜ธํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— HH๋ฅผ ์ด๋ฃจ๋Š” ๊ฐ’์ด AA, BB, CC๋ผ๋Š” ์‚ฌ์‹ค์€ ์•”ํ˜ธํ™”ํ•œ ๋‹น์‚ฌ์ž ์™ธ์—๋Š” ์•„๋ฌด๋„ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ค‘๊ฐ„ ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ 2 ์—ญ์ƒ ์ €ํ•ญ์„ฑ๊ณผ ์ถฉ๋Œ ์ €ํ•ญ์„ฑ์„ ๋ฌด์‹œํ•˜๋Š” ๊ฐ’์„ ์ฐพ์•„๋‚ด๊ธฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ, SSL Certificate์„ ์ทจ๋“ํ•˜์—ฌ ๋‚ด๋ถ€์˜ ๋‚ด์šฉ๋ฌผ์„ AA, BB, Cโ€ฒC'๋กœ ๋ณ€์กฐํ•˜๋”๋ผ๋„ ๋™์ผํ•œ Hashing ๊ฐ’ HH๋ฅผ ์–ป์„ ์ˆ˜ ์—†๊ณ  Hโ€ฒH'๋งŒ์„ ์–ป๊ฒŒ ๋œ๋‹ค. (๋ฌผ๋ก  ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋‚ด์šฉ๋ฌผ์„ ๋ณ€์กฐ ํ–ˆ์Œ์—๋„ ๋™์ผํ•œ ๊ฐ’์ด ๋‚˜์˜ค๋Š” 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์™€ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰

6. Reference

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ํ†ต์‹ ์€ ์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ฒŒ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?
์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๋ฅผ ์ง€๋งํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ ํ•™์Šต์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๊ณต๋ถ€ํ•œ ํ•™์Šต์—์„œ๋Š” ๋ณด์•ˆ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋งŽ์ด ์—†์—ˆ๋‹ค. ์žˆ์–ด๋ด์•ผ ๊ณต๊ฐœํ‚ค ๋น„๊ณต๊ฐœํ‚ค์— ๋Œ€ํ•œ ํ•™์Šต๋ฟ์ด์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์™€์ค‘์— ๋ณด๋‹ค ํ™•์‹คํ•œ ๋ณด์•ˆ ๊ฐœ๋…์ด ํ•„์š”ํ•ด์กŒ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์žฅ์• ์—†๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐฑ๋‚  ์ฝ”๋“œ๋งŒ ์™„๋ฒฝํ•˜๊ฒŒ ์ง ๋‹ค๊ณ ํ•ด์„œ ๋‹ฌ์„ฑ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ž€ ๊ฒƒ์„ ์–ด๋Š์ •๋„ ๊นจ๋‹ซ๊ธฐ ์‹œ์ž‘ํ•œ ์‹œ์ ๋ถ€ํ„ฐ์ด๋‹ค.
[SSL]HTTPSํ†ต์‹ ์„ ์œ„ํ•œ SSL์ธ์ฆ์„œ ๋ฐœ๊ธ‰ํ•˜๊ธฐ(OpenSSL)
Secure Socket Layer์˜ ์•ฝ์ž๋กœ SSL ํ”„๋กœํ† ์ฝœ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์›น์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์ด์˜ ๋ณด์•ˆ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์•ฝํ•˜์ž๋ฉด ๋Œ€์นญํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ์•”ํ˜ธํ™” ํ†ต์‹ ์„ ํ•œ๋‹ค! HTTP์— SSL ์ ์šฉ์„ ํ•˜์—ฌ Https ํ†ต์‹ ์„ ํ•˜๊ฒŒ๋œ๋‹ค! ์ด๋Ÿฌํ•œ ์•”ํ˜ธํ™” ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„  SSL ์ธ์ฆ์„œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํ•ด๋‹น ์›น ์‚ฌ์ดํŠธ๊ฐ€ ํ•ดํ‚น์— ์‹ ๋ขฐ์žˆ๋Š” ์‚ฌ์ดํŠธ์ธ์ง€, ์•ˆ์ „ํ•œ ํ†ต์‹ ์„ํ•˜๋Š” ์‚ฌ์ดํŠธ์ธ์ง€๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ์‚ฌ์ดํŠธ๊ฐ€ ์‹ ๋ขฐ๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ผ๊ณ  ์ธ์ฆ์„ ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ์ธ์ฆ์„œ์ด๋‹ค.

7. Code of Jseo