์ฐ๋ฆฌ๋ "๊ตญ๊ฐ ์๋ณด"๋ผ๋ ๋ง์ ํญ์ ๋ฃ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ถ๊ฐ ์ ๋ขฐํ ๋งํ ์์ฌ์ด๋ ๋ฒ์ ๊ทผ๊ฑฐ, ๋๋ ทํ ๋ชฉ์ ์์ด ์ฐ๋ฆฌ์ ํต์ ์ ๊ฐ์ํ๊ณ ๋ น์ํ๊ธฐ ์์ํ๋ฉด ์ฐ๋ฆฌ๋ ์ค์ค๋ก์๊ฒ ์ง๋ฌธ์ ๋์ ธ์ผ ํฉ๋๋ค. ๊ทธ๋ค์ด ์ ๋ง๋ก ๊ตญ๊ฐ ์๋ณด๋ฅผ ๋ณดํธํ๋ ๊ฒ์ธ์ง, ์๋๋ฉด ๊ทธ๋ค์ ์๊ธฐ ์์ ์ ๋ณดํธํ๊ณ ์๋์?
- ์๋์๋ ์ค๋ ธ์ฐ๋ด
์ด ๋ค์ด์ ์คํธ๋ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๋ฌธ์ ์ ๋ํ ์ปค๋ฎค๋ํฐ์ ๊ด์ฌ์ ๋์ด๊ธฐ ์ํ ๊ฒ์
๋๋ค.
์์ :
๋ถ์ฐํ ์ธํฐ๋ท ์ ๊ณต์
์ฒด์ธ โMediumโ ์ปค๋ฎค๋ํฐ์ ์ด์ฑํฌ๋ค์ด ์์ ๋ง์ ๊ฒ์ ์์ง์ ๋ง๋ค๊ณ ์์ต๋๋ค.
Medium์ ์๋ก์ด ์ธ์ฆ ๊ธฐ๊ด์ธ Medium Global Root CA๋ฅผ ์ค๋ฆฝํ์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด ๋๊ฐ ์ํฅ์ ๋ฐ๋์?
๋ชจ๋ ๊ฐ์ ์ ๋ณด์ ์ธ์ฆ์ - Yggdrasil ๋คํธ์ํฌ์์ ์์ ๋ง์ ์๋น์ค๋ฅผ ์์ฑํ๊ณ ์ ํจํ SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๋ ๋ฐฉ๋ฒ
์๋ฆผ - '์ค๊ฐ'์ด๋ ๋ฌด์์ธ๊ฐ์?
์ค๊ธ (์์ด ์ค๊ธ - โ์ค๊ฐ์โ, ์๋ ์ฌ๋ก๊ฑด - ๊ทํ์ ๊ฐ์ธ ์ ๋ณด๋ฅผ ์๊ตฌํ์ง ๋ง์ญ์์ค. ๋ค์ ๊ฐ์ ธ; ์์ด๋ก๋ ๊ทธ ๋จ์ด๋ฅผ ๋งค์ง "์ค๊ฐ"์ ์๋ฏธ) - ๋คํธ์ํฌ ์ก์ธ์ค ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ฌ์์ ๋ถ์ฐํ ์ธํฐ๋ท ์ ๊ณต์
์ฒด
์ ์ฒด ์ด๋ฆ: ์คํ ์ธํฐ๋ท ์๋น์ค ์ ๊ณต์
์ฒด. ์ฒ์์ ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์๋์์ต๋๋ค.
Wi-Fi ๋ฌด์ ๋ฐ์ดํฐ ์ ์ก ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ต์ข ์ฌ์ฉ์์๊ฒ Yggdrasil ๋คํธ์ํฌ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ๋ ๋ฆฝ์ ์ธ ํต์ ํ๊ฒฝ ๊ตฌ์ถ์ ์ผํ์ผ๋ก 2019๋ XNUMX์์ ์ค๋ฆฝ๋์์ต๋๋ค.
์ฃผ์ ์ ๋ํ ์ถ๊ฐ ์ ๋ณด:
๋ถ์ฐํ ์ธํฐ๋ท ์ ๊ณต์ ์ฒด์ธ โMediumโ ์ปค๋ฎค๋ํฐ์ ์ด์ฑํฌ๋ค์ด ์์ ๋ง์ ๊ฒ์ ์์ง์ ๋ง๋ค๊ณ ์์ต๋๋ค.
์๋ ์จ๋ผ์ธ
๊ธฐ๋ณธ์ ์ผ๋ก Yggdrasil์ด ํผ์ด ๊ฐ ํธ๋ํฝ์ ์ํธํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ PKI๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น?๋ก์ปฌ๋ก ์คํ๋๋ Yggdrasil ๋คํธ์ํฌ ๋ผ์ฐํฐ๋ฅผ ํตํด ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ Yggdrasil ๋คํธ์ํฌ์ ์น ์๋น์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํด HTTPS๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
์ค์ ๋ก: Yggdrasil ์ด์ก์ ๋๋ฑํฉ๋๋ค.
Yggdarsil์ ์ธํธ๋ผ๋ท ๋ฆฌ์์ค์ ์ง์ ์ก์ธ์คํ์ง ์๊ณ ์ด์์๊ฐ ๊ด๋ฆฌํ๋ ์ค๊ฐ ๋คํธ์ํฌ ์ก์ธ์ค ํฌ์ธํธ์ธ ์ค๊ฐ ๋ ธ๋๋ฅผ ํตํด ์ก์ธ์คํ๋ฉด ์ํฉ์ ๊ธ๊ฒฉํ๊ฒ ๋ณํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ๊ทํ๊ฐ ์ ์กํ๋ ๋ฐ์ดํฐ๋ฅผ ์์์ํฌ ์ ์๋ ์ฌ๋์ ๋๊ตฌ์ ๋๊น?
- ์ก์ธ์ค ํฌ์ธํธ ์ด์์. ํ์ฌ ์คํ ๋คํธ์ํฌ ์ก์ธ์ค ํฌ์ธํธ์ ์ด์์๊ฐ ํด๋น ์ฅ๋น๋ฅผ ํต๊ณผํ๋ ์ํธํ๋์ง ์์ ํธ๋ํฝ์ ๋์ฒญํ ์ ์๋ค๋ ๊ฒ์ ๋ช ๋ฐฑํฉ๋๋ค.
- ์นจ์
์ (
์ค๊ฐ์์๋ ๋จ์ฑ ). ๋งค์ฒด์๋ ๋ค์๊ณผ ์ ์ฌํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.Tor ๋คํธ์ํฌ ๋ฌธ์ , ์ ๋ ฅ ๋ฐ ์ค๊ฐ ๋ ธ๋์ ๊ด๋ จ๋ ๊ฒฝ์ฐ์๋ง ํด๋น๋ฉ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ๊ทธ ๋ชจ์ต์ด๋ค
๊ฒฐ์ : Yggdrasil ๋คํธ์ํฌ ๋ด์ ์น ์๋น์ค์ ์ก์ธ์คํ๋ ค๋ฉด HTTPS ํ๋กํ ์ฝ(๋ ๋ฒจ 7)์ ์ฌ์ฉํ์ญ์์ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์์ฒด ์ธ์ฆ์ผํฐ๋ฅผ ์ค๋ฆฝํ์ต๋๋ค.
๋ฌผ๋ก ์ธ์ฆ ๊ธฐ๊ด์ ๋ฃจํธ ์ธ์ฆ์๊ฐ ์์๋ ๊ฐ๋ฅ์ฑ๋ ๊ณ ๋ ค๋์์ง๋ง ์ฌ๊ธฐ์๋ ๋ฐ์ดํฐ ์ ์ก์ ๋ฌด๊ฒฐ์ฑ์ ํ์ธํ๊ณ MITM ๊ณต๊ฒฉ ๊ฐ๋ฅ์ฑ์ ์ ๊ฑฐํ๊ธฐ ์ํด ์ธ์ฆ์๊ฐ ๋ ํ์ํฉ๋๋ค.
๋ค์ํ ์ด์์
์ฒด์ ์คํ ๋คํธ์ํฌ ์๋น์ค์๋ ๋ฃจํธ ์ธ์ฆ ๊ธฐ๊ด์์ ์๋ช
ํ ๋ค์ํ ๋ณด์ ์ธ์ฆ์๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฃจํธ CA ์ด์์๋ ๋ณด์ ์ธ์ฆ์์ ์๋ช
ํ ์๋น์ค์ ์ํธํ๋ ํธ๋ํฝ์ ๋์ฒญํ ์ ์์ต๋๋ค(์ฐธ์กฐ:
ํนํ ์์ ์ ๋ํด ์ฐ๋ คํ๋ ์ฌ๋๋ค์ ๋ค์๊ณผ ๊ฐ์ ์ถ๊ฐ ๋ณดํธ ์๋จ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ฌ Medium ๋คํธ์ํฌ์ ๊ณต๊ฐ ํค ์ธํ๋ผ์๋ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ธ์ฆ์ ์ํ๋ฅผ ํ์ธํ ์ ์๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
ํต์ฌ์ ์ง๋ค
์ฌ์ฉ์
์ฃผ์ TLD๋ .ygg. ๋๋ถ๋ถ์ ๋๋ฉ์ธ ์ด๋ฆ์๋ ๋ค์ ๋ ๊ฐ์ง ์์ธ๋ฅผ ์ ์ธํ๊ณ ์ด TLD๊ฐ ์์ต๋๋ค. .isp ะธ .gg.
๊ฒ์ ์์ง์ ๊ฐ๋ฐ ์ค์ด์ง๋ง ํ์ฌ ์ด๋ฏธ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ์ธ์.
ํ๋ก์ ํธ ๋ฐ์ ์ ๋์์ ์ค ์ ์์ผ๋ฉฐ,
Medium์ ์๋ก์ด ์ธ์ฆ ๊ธฐ๊ด์ธ Medium Global Root CA๋ฅผ ์ค๋ฆฝํ์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด ๋๊ฐ ์ํฅ์ ๋ฐ๋์?
์ด์ Medium Root CA ์ธ์ฆ ์ผํฐ ๊ธฐ๋ฅ์ ๋ํ ๊ณต๊ฐ ํ ์คํธ๊ฐ ์๋ฃ๋์์ต๋๋ค. ํ ์คํธ๋ฅผ ๋ง์น ๊ฒฐ๊ณผ, ๊ณต๊ฐํค ์ธํ๋ผ ์๋น์ค ์ด์ ์ค๋ฅ๋ฅผ ์์ ํ๊ณ , ์ธ์ฆ๊ธฐ๊ด 'Medium Global Root CA'์ ์๋ก์ด ๋ฃจํธ ์ธ์ฆ์๊ฐ ์์ฑ๋๋ค.
PKI์ ๋ชจ๋ ๋์์ค์ ๊ธฐ๋ฅ์ด ๊ณ ๋ ค๋์์ต๋๋ค. ์ด์ ์๋ก์ด CA ์ธ์ฆ์ "Medium Global Root CA"๋ ๋ง๋ฃ์ผ๋ก๋ถํฐ 10๋ ํ์๋ง ๋ฐ๊ธ๋ฉ๋๋ค. ์ด์ ๋ณด์ ์ธ์ฆ์๋ ์ค๊ฐ ์ธ์ฆ ๊ธฐ๊ด(์: "์ค๊ฐ ๋๋ฉ์ธ ์ ํจ์ฑ ๊ฒ์ฌ ๋ณด์ ์๋ฒ CA")์์๋ง ๋ฐ๊ธ๋ฉ๋๋ค.
์ด์ ์ธ์ฆ์ ์ ๋ขฐ ์ฒด์ธ์ ์ด๋ค ๋ชจ์ต์ธ๊ฐ์?
์ฌ์ฉ์์ธ ๊ฒฝ์ฐ ๋ชจ๋ ๊ธฐ๋ฅ์ด ์๋ํ๋ ค๋ฉด ๋ฌด์์ ํด์ผ ํฉ๋๊น?
์ผ๋ถ ์๋น์ค์์๋ HSTS๋ฅผ ์ฌ์ฉํ๋ฏ๋ก Medium ๋คํธ์ํฌ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ Medium ์ธํธ๋ผ๋ท ๋ฆฌ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํด์ผ ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ก ํญ์์ ์ด ์์ ์ ์ํํ ์ ์์ต๋๋ค.
๋ํ ํ์ํ๋ค
๋น์ ์ด ์์คํ ์ด์์๋ผ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ๋๋ก ํ๊ธฐ ์ํด ๋ฌด์์ ํด์ผ ํ ๊น์?
ํด๋น ํ์ด์ง์์ ์๋น์ค์ ๋ํ ์ธ์ฆ์๋ฅผ ์ฌ๋ฐ๊ธํด์ผ ํฉ๋๋ค.
๋ชจ๋ ๊ฐ์ ์ ๋ณด์ ์ธ์ฆ์ - Yggdrasil ๋คํธ์ํฌ์์ ์์ ๋ง์ ์๋น์ค๋ฅผ ์์ฑํ๊ณ ์ ํจํ SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๋ ๋ฐฉ๋ฒ
์คํ ๋คํธ์ํฌ์ ์ธํธ๋ผ๋ท ์๋น์ค ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๋ก์ด ๋ณด์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๊ณ SSL์ ์ง์ํ๋๋ก ์๋น์ค๋ฅผ ๊ตฌ์ฑํด์ผ ํ ํ์์ฑ์ด ์ฆ๊ฐํ์ต๋๋ค.
Habr์ ๊ธฐ์ ๋ฆฌ์์ค์ด๋ฏ๋ก ๊ฐ๊ฐ์ ์๋ก์ด ๋ค์ด์ ์คํธ์์ ์์ ํญ๋ชฉ ์ค ํ๋๊ฐ Medium ๋คํธ์ํฌ ์ธํ๋ผ์ ๊ธฐ์ ๊ธฐ๋ฅ์ ๊ณต๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์์ ์๋น์ค์ ๋ํ SSL ์ธ์ฆ์ ๋ฐ๊ธ์ ๋ํ ํฌ๊ด์ ์ธ ์ง์นจ์ ๋๋ค.
์๋ ๋๋ฉ์ธ ์ด๋ฆ์ ๋ํ๋ ๋๋ค domain.ygg๋ฅผ ์๋น์ค์ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ์ผ ํฉ๋๋ค.
1 ๋จ๊ณ. ๊ฐ์ธ ํค ๋ฐ Diffie-Hellman ๋งค๊ฐ๋ณ์ ์์ฑ
openssl genrsa -out domain.ygg.key 2048
๊ทธ๋ฐ ๋ค์
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
2 ๋จ๊ณ. ์ธ์ฆ์ ์๋ช ์์ฒญ ๋ง๋ค๊ธฐ
openssl req -new -key domain.ygg.key -out domain.ygg.csr -config domain.ygg.conf
ํ์ผ ๋ด์ฉ domain.ygg.conf:
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = v3_req
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = RU
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Moscow Oblast
localityName = Locality Name (eg, city)
localityName_default = Kolomna
organizationName = Organization Name (eg, company)
organizationName_default = ACME, Inc.
commonName = Common Name (eg, YOUR name)
commonName_max = 64
commonName_default = *.domain.ygg
[ v3_req ]
subjectKeyIdentifier = hash
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
basicConstraints = CA:FALSE
nsCertType = server
authorityKeyIdentifier = keyid,issuer:always
crlDistributionPoints = URI:http://crl.medium.isp/Medium_Global_Root_CA.crl
authorityInfoAccess = OCSP;URI:http://ocsp.medium.isp
3 ๋จ๊ณ. ์ธ์ฆ์ ์์ฒญ ์ ์ถ
์ด๋ ๊ฒ ํ๋ ค๋ฉด ํ์ผ ๋ด์ฉ์ ๋ณต์ฌํ์ธ์. domain.ygg.csr ์ฌ์ดํธ์ ํ
์คํธ ํ๋์ ๋ถ์ฌ๋ฃ์ผ์ธ์.
์น์ฌ์ดํธ์ ์ ๊ณต๋ ์ง์นจ์ ๋ฐ๋ฅธ ํ "์ ์ถ"์ ํด๋ฆญํ์ธ์. ์ฑ๊ณตํ๋ฉด ์ค๊ฐ ์ธ์ฆ ๊ธฐ๊ด์์ ์๋ช ํ ์ธ์ฆ์ ํ์์ ์ฒจ๋ถ ํ์ผ์ด ํฌํจ๋ ๋ฉ์์ง๊ฐ ์ง์ ํ ์ด๋ฉ์ผ ์ฃผ์๋ก ์ ์ก๋ฉ๋๋ค.
4 ๋จ๊ณ. ์น ์๋ฒ ์ค์
nginx๋ฅผ ์น ์๋ฒ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ญ์์ค.
ํ์ผ domain.ygg.conf ๋๋ ํ ๋ฆฌ์์ /etc/nginx/์ฌ์ดํธ-์ฌ์ฉ ๊ฐ๋ฅ/
server {
listen [::]:80;
listen [::]:443 ssl;
root /var/www/domain.ygg;
index index.php index.html index.htm index.nginx-debian.html;
server_name domain.ygg;
include snippets/domain.ygg.conf;
include snippets/ssl-params.conf;
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; allow all; }
location ~* .(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /.ht {
deny all;
}
}
ํ์ผ SSL-params.conf ๋๋ ํ ๋ฆฌ์์ /etc/nginx/์ค๋ํซ/
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
add_header Strict-Transport-Security "max-age=15552000; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ํ์ผ domain.ygg.conf ๋๋ ํ ๋ฆฌ์์ /etc/nginx/์ค๋ํซ/
ssl_certificate /etc/ssl/certs/domain.ygg.crt;
ssl_certificate_key /etc/ssl/private/domain.ygg.key;
์ด๋ฉ์ผ๋ก ๋ฐ์ ์ธ์ฆ์๋ ๋ค์ ์์น์ ๋ณต์ฌ๋์ด์ผ ํฉ๋๋ค. /etc/ssl/certs/domain.ygg.crt. ๊ฐ์ธ ํค(domain.ygg.key) ๋๋ ํ ๋ฆฌ์ ๋ฃ์ต๋๋ค. /etc/ssl/๊ฐ์ธ/.
5 ๋จ๊ณ. ์น ์๋ฒ๋ฅผ ๋ค์ ์์ํ์ธ์
sudo service nginx restart
๋ฌ์์์ ๋ฌด๋ฃ ์ธํฐ๋ท์ ๋น์ ์ผ๋ก๋ถํฐ ์์๋ฉ๋๋ค
์ค๋๋ ๋ฌ์์์์ ๋ฌด๋ฃ ์ธํฐ๋ท์ ๊ตฌ์ถํ๋ ๋ฐ ๊ฐ๋ฅํ ๋ชจ๋ ์ง์์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทํ๊ฐ ๋คํธ์ํฌ๋ฅผ ๋์ธ ์ ์๋ ์ ํํ ๋ฐฉ๋ฒ์ ๋ํ ํฌ๊ด์ ์ธ ๋ชฉ๋ก์ ์์ฑํ์ต๋๋ค.
- ์น๊ตฌ์ ๋๋ฃ์๊ฒ Medium ๋คํธ์ํฌ์ ๋ํด ์๋ ค์ฃผ์ธ์. ๊ณต์ ํ๋ค
์ฐธ๊ณ ๋ก ์์ ๋คํธ์ํฌ๋ ๊ฐ์ธ ๋ธ๋ก๊ทธ์์ ์ด ๊ธฐ์ฌ๋ฅผ ํ์ธํ์ธ์. - Medium ๋คํธ์ํฌ์ ๊ธฐ์ ์ ๋ฌธ์ ์ ๋ํ ํ ๋ก ์ ์ฐธ์ฌํ์ญ์์ค.
GitHub์์ - Yggdrasil ๋คํธ์ํฌ์์ ์น ์๋น์ค๋ฅผ ์์ฑํ๊ณ ์ฌ๊ธฐ์ ์ถ๊ฐํ์ธ์.
์คํ ๋คํธ์ํฌ์ DNS - ๋น์ ์
์ก์ธ์ค ํฌ์ธํธ ์คํ ๋คํธ์ํฌ๋ก
์ด์ ๋ฆด๋ฆฌ์ค:
์ฐธ์กฐ :
์ฐ๋ฆฌ๋ ํ
๋ ๊ทธ๋จ์ ์์ต๋๋ค:
๋ฑ๋ก๋ ์ฌ์ฉ์๋ง ์ค๋ฌธ ์กฐ์ฌ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
๋์ฒด ํฌํ: Habrรฉ์ ๋ํ ์ ์ฒด ๊ณ์ ์ด ์๋ ์ฌ๋๋ค์ ์๊ฒฌ์ ์๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
-
โ
-
โ
7๋ช
์ ์ฌ์ฉ์๊ฐ ํฌํํ์ต๋๋ค. 2๋ช
์ ์ฌ์ฉ์๊ฐ ๊ธฐ๊ถํ์ต๋๋ค.
์ถ์ฒ : habr.com