SSL ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฝค ๋ง์ต๋๋ค. (๋๋ถ๋ถ์ ์ฌ๋๋ค์๊ฒ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉ๋๋) ์ธ์ฆ์๋ฅผ ๋ง๋ค๊ณ ์ค์นํ๋ ๊ณผ์ ์ ๋ค์ ํ๋ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ๊ณต๊ธ์ ์ฒด(SSL์ ๊ตฌ๋งคํ ์ ์๋ ์ฌ์ดํธ)๋ฅผ ์ฐพ์ผ์ธ์.
- CSR์ ์์ฑํฉ๋๋ค.
- ๊ทํ์ ๊ณต๊ธ์ ์ฒด์ ๋ณด๋ด์ธ์.
- ๋๋ฉ์ธ ์์ ๊ถ์ ํ์ธํ์ธ์.
- ์ฆ๋ช ์๋ฅผ ๋ฐ์ผ์ธ์.
- ์ธ์ฆ์๋ฅผ ์ํ๋ ํ์์ผ๋ก ๋ณํํฉ๋๋ค(์ ํ ์ฌํญ). ์๋ฅผ ๋ค์ด, pem ํ์ผ์ PKCS #12 ํ์ผ๋ก ๋ณํํฉ๋๋ค.
- ์น ์๋ฒ์ ์ธ์ฆ์๋ฅผ ์ค์นํฉ๋๋ค.
๋น๊ต์ ๋น ๋ฅด๊ณ ๋ณต์กํ์ง ์์ผ๋ฉฐ ๋ช ํํฉ๋๋ค. ์ด ์ต์ ์ ํ๋ก์ ํธ๊ฐ ์ต๋ 10๊ฐ์ผ ๋ ๋งค์ฐ ์ ํฉํฉ๋๋ค. ํ์ง๋ง ํ๋ก์ ํธ ์๊ฐ ๋ ๋ง๊ณ ์ต์ ์ธ ๊ฐ์ ํ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ด๋จ๊น์? ํด๋์ ๊ฐ๋ฐ ํ๊ฒฝ - ์คํ ์ด์ง ํ๊ฒฝ - ํ๋ก๋์ ํ๊ฒฝ. ์ด ๊ฒฝ์ฐ ์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณผ ๋งํฉ๋๋ค. ๋ฌธ์ ๋ฅผ ์ข ๋ ๊น์ด ํ๊ณ ๋ค์ด ์ธ์ฆ์ ์์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ์ ์์๋๋ ์๊ฐ์ ๋์ฑ ์ต์ํํ ์ ์๋ ํด๊ฒฐ์ฑ ์ ์ฐพ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด ๊ธ์์๋ ๋ฌธ์ ์ ๋ํ ๋ถ์๊ณผ ๋ฐ๋ณต ์์ ์ ๋ํ ๊ฐ๋ตํ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ฏธ๋ฆฌ ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ ํฌ ํ์ฌ์ ์ฃผ์ ์ ๋ฌธ ๋ถ์ผ๋ .NET์ด๋ฉฐ, ๋ฐ๋ผ์ IIS ๋ฐ ๊ธฐํ Windows ๊ด๋ จ ๋ถ์ผ๋ ๋ค๋ฃน๋๋ค. ๋ฐ๋ผ์ ACME ํด๋ผ์ด์ธํธ์ ๊ทธ์ ๋ํ ๋ชจ๋ ์์ ๋ Windows ์ฌ์ฉ ๊ด์ ์์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์ด๊ฒ์ ๋๊ตฌ์ ๊ด๋ จ์ด ์์ต๋๊น? ๊ทธ๋ฆฌ๊ณ ๋ช ๊ฐ์ง ์ด๊ธฐ ๋ฐ์ดํฐ
์์ฑ์๊ฐ ๋ํํ๋ ํ์ฌ K. URL(์์): company.tld
ํ๋ก์ ํธ X๋ ์ ํฌ ํ๋ก์ ํธ ์ค ํ๋์ด๋ฉฐ, ์ธ์ฆ์ ์์ ์ ์ต๋ํ์ ์๊ฐ ์ ์ฝ์ ๋ชฉํ๋ก ํด์ผ ํ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ ๊ฐ๋ฐ, ํ ์คํธ, ์คํ ์ด์ง, ์ด์, ์ด๋ ๊ฒ ๋ค ๊ฐ์ง ํ๊ฒฝ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ๋ฐ ๋ฐ ํ ์คํธ ํ๊ฒฝ์ ์ ํฌ ์ธก์์, ์คํ ์ด์ง ๋ฐ ์ด์ ํ๊ฒฝ์ ๊ณ ๊ฐ ์ธก์์ ๊ฐ๊ฐ ๊ด๋ฆฌํฉ๋๋ค.
์ด ํ๋ก์ ํธ์ ํน์ง์ ํ์ ๋๋ฉ์ธ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ชจ๋์ ์๊ฐ ๋ง๋ค๋ ๊ฒ์ ๋๋ค.
์ฆ, ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ทธ๋ฆผ์ ์ป์ต๋๋ค.
๋ฐ๋ธ
Test
์ค๋น
์์ฐ
projectX.dev.company.tld
ํ๋ก์ ํธX.ํ
์คํธ.ํ์ฌ.tld
์คํ
์ด์ง.ํ๋ก์ ํธX.tld
ํ๋ก์ ํธX.tld
๋ชจ๋1.ํ๋ก์ ํธX.dev.ํ์ฌ.tld
๋ชจ๋1.ํ๋ก์ ํธX.ํ
์คํธ.ํ์ฌ.tld
๋ชจ๋1.์คํ
์ด์ง.ํ๋ก์ ํธX.tld
๋ชจ๋1.ํ๋ก์ ํธX.tld
๋ชจ๋2.ํ๋ก์ ํธX.dev.ํ์ฌ.tld
๋ชจ๋2.ํ๋ก์ ํธX.ํ
์คํธ.ํ์ฌ.tld
๋ชจ๋2.์คํ
์ด์ง.ํ๋ก์ ํธX.tld
๋ชจ๋2.ํ๋ก์ ํธX.tld
...
...
...
...
๋ชจ๋N.projectX.dev.company.tld
๋ชจ๋N.projectX.test.company.tld
๋ชจ๋N.์คํ
์ด์ง.ํ๋ก์ ํธX.tld
๋ชจ๋N.projectX.tld
ํ๋ก๋์ ํ๊ฒฝ์์๋ ๊ตฌ๋งคํ ์์ผ๋์นด๋ ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ฌ๊ธฐ์๋ ์๋ฌธ์ ์ฌ์ง๊ฐ ์์ต๋๋ค. ํ์ง๋ง ์ด ์ธ์ฆ์๋ ํ์ ๋๋ฉ์ธ์ ์ฒซ ๋ฒ์งธ ๋ ๋ฒจ์๋ง ์ ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ *.projectX.tld์ ๋ํ ์ธ์ฆ์๊ฐ ์๋ค๋ฉด staging.projectX.tld์๋ ์๋ํ์ง๋ง, module1.staging.projectX.tld์๋ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ๋ณ๋๋ก ์ธ์ฆ์๋ฅผ ๊ตฌ๋งคํ๊ณ ์ถ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ ํ ํ์ฌ์ ํ ํ๋ก์ ํธ ์ฌ๋ก์ ๋ถ๊ณผํฉ๋๋ค. ๋ฌผ๋ก ์ด ํ๋ก์ ํธ๊ฐ ์ ์ผํ ๊ฒ์ ์๋๋๋ค.
์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์ด ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ ค๋ ๊ณตํต์ ์ธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋น๊ต์ ์ต๊ทผ์ . ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ํ๋ฉด์์.
- ํ๋ก์ ํธ ๋ด๋ถ ๋ฐ ํ์ฌ ์ ์ฒด์ ์๊ตฌ์ ๋ง์ถฐ SSL์ ๋ฐ๊ธํ๊ณ ์ ์งํ๋ ํ๋ก์ธ์ค๋ฅผ ์ํํ๊ฒ ํด์ค๋๋ค.
- ์ธ์ฆ์ ๋ ์ฝ๋๋ฅผ ์ค์์์ ์ ์ฅํ๋ฉด DNS๋ฅผ ์ด์ฉํ ๋๋ฉ์ธ ํ์ธ ๋ฐ ์๋ ๊ฐฑ์ ๋ฌธ์ ๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ํด๊ฒฐํ๊ณ ํด๋ผ์ด์ธํธ ์ ๋ขฐ ๋ฌธ์ ๋ ํด๊ฒฐํ ์ ์์ต๋๋ค. ํ์ง๋ง ํํธ๋/์คํ์ ํ์ฌ ์๋ฒ์ ๋ํ CNAME์ ํ์ฌ ๋ฆฌ์์ค์ ๋ํ CNAME๋ณด๋ค ๋ ์ ๋ขฐํ ์ ์์ต๋๋ค.
- ๊ธ์์, ๋ง์ง๋ง์ผ๋ก ์ด ๊ฒฝ์ฐ์๋ "๊ฐ์ง ๊ฒ ์๋ ๊ฒ๋ณด๋ค ๋ซ๋ค"๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ์๋ฒฝํ๊ฒ ๋ค์ด๋ง์ต๋๋ค.
SSL ๊ณต๊ธ์ ์ ํ ๋ฐ ์ค๋น ๋จ๊ณ
๋ฌด๋ฃ SSL ์ธ์ฆ์ ์ต์
์ค Cloudflare์ Letsencrypt๊ฐ ๊ณ ๋ ค๋์์ต๋๋ค. ์ด ํ๋ก์ ํธ(๋ฐ ๋ค๋ฅธ ํ๋ก์ ํธ๋ค)์ DNS๋ Cloudflare์ ์์ง๋ง, ์ ๋ Cloudflare ์ธ์ฆ์ ์ฌ์ฉ์ ์ง์งํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Letsencrypt๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์์ผ๋์นด๋ SSL ์ธ์ฆ์๋ฅผ ์์ฑํ๋ ค๋ฉด ๋๋ฉ์ธ ์์ ๊ถ์ ํ์ธํด์ผ ํฉ๋๋ค. ์ด ์ ์ฐจ์๋ DNS ๋ ์ฝ๋(TXT ๋๋ CNAME)๋ฅผ ์์ฑํ ๋ค์ ์ธ์ฆ์ ๋ฐ๊ธ ์ ์ด๋ฅผ ํ์ธํ๋ ๊ณผ์ ์ด ํฌํจ๋ฉ๋๋ค. Linux ์ ํธ๋ฆฌํฐ๊ฐ ์์ต๋๋ค - ์ด๋ฅผ ํตํด ์ด ํ๋ก์ธ์ค๋ฅผ ๋ถ๋ถ์ ์ผ๋ก (์ผ๋ถ DNS ์ ๊ณต์
์ฒด์ ๊ฒฝ์ฐ ์์ ํ) ์๋ํํ ์ ์์ต๋๋ค. Windows ๊ฐ์ ๊ฒ ACME ํด๋ผ์ด์ธํธ ์ต์
์ค์์ ๋๋ ๋ค์์ ์ ํํ์ต๋๋ค. .
๋๋ฉ์ธ์ ๋ํ ๋ ์ฝ๋๊ฐ ์์ฑ๋์์ผ๋ฏ๋ก ์ธ์ฆ์ ์์ฑ์ผ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค.

์ฐ๋ฆฌ๋ ๋ง์ง๋ง ์ถ๋ ฅ, ์ฆ ์์ผ๋์นด๋ ์ธ์ฆ์ ๋ฐ๊ธ์ ์ํ ๋๋ฉ์ธ ์์ ๊ถ ํ์ธ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ์ ๊ด์ฌ์ด ์์ต๋๋ค.
- DNS ๋ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑ(์๋ ์ ๋ฐ์ดํธ๋ ์ง์๋์ง ์์)
- acme-dns ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ DNS ๋ ์ฝ๋ ๋ง๋ค๊ธฐ(์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ์์ ์ฝ์ ์ ์์) .
- ์์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ DNS ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค(Certbot์ฉ Cloudflare ํ๋ฌ๊ทธ์ธ๊ณผ ์ ์ฌ).
์ธ๋ป ๋ณด๊ธฐ์๋ ์ธ ๋ฒ์งธ ํญ๋ชฉ์ด ๋งค์ฐ ์ ํฉํด ๋ณด์ด์ง๋ง, DNS ์ ๊ณต์ ์ฒด๊ฐ ์ด ๊ธฐ๋ฅ์ ์ง์ํ์ง ์๋๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ด ์๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ CNAME ๋ ์ฝ๋์ด๋ฉฐ, ๋ชจ๋๊ฐ ์ง์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ ๋ฒ์งธ ํญ๋ชฉ์์ ๋ฉ์ถ๊ณ ACME-DNS ์๋ฒ๋ฅผ ๊ตฌ์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
ACME DNS ์๋ฒ ์ค์ ๋ฐ ์ธ์ฆ์ ๋ฐ๊ธ
์๋ฅผ ๋ค์ด, ์ ๋ 2nd.pp.ua ๋๋ฉ์ธ์ ๋ง๋ค์๊ณ , ์์ผ๋ก๋ ๊ณ์ ์ฌ์ฉํ ์์ ์ ๋๋ค.
์๋ฒ๊ฐ ์ ๋๋ก ์๋ํ๋ ค๋ฉด ํด๋น ๋๋ฉ์ธ์ ๋ํ NS ๋ ์ฝ๋์ A ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ ๊ฐ ์ฒ์ ๋ถํธํ๊ฒ ๋๋ ์ ์ Cloudflare(์ ์ด๋ ๋ฌด๋ฃ ์ฌ์ฉ ๋ชจ๋์์๋)๊ฐ ๋์ผํ ํธ์คํธ์ ๋ํด NS ๋ ์ฝ๋์ A ๋ ์ฝ๋๋ฅผ ๋์์ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ด์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์์๋ ๊ฒ์ ์๋์ง๋ง, bind์์๋ ๊ฐ๋ฅํฉ๋๋ค. ์ง์ํ์ ํจ๋์์ ์ด๋ฅผ ํ์ฉํ์ง ์๋๋ค๊ณ ๋ต๋ณํ์ต๋๋ค. ๋ฌธ์ ์์ต๋๋ค. ๋ ๊ฐ์ ๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
acmens.2nd.pp.ua. IN A 35.237.128.147
acme.2nd.pp.ua. IN NS acmens.2nd.pp.ua.์ด ์์ ์์ ํธ์คํธ๊ฐ ํด๊ฒฐ๋์ด์ผ ํฉ๋๋ค. acmens.2nd.pp.ua.
$ ping acmens.2nd.pp.ua
PING acmens.2nd.pp.ua (35.237.128.147) 56(84) bytes of dataํ์ง๋ง acme.2nd.pp.ua ํด๋น ์๋น์ค๋ฅผ ์ ๊ณตํ๋ DNS ์๋ฒ๊ฐ ์์ง ์์๋์ง ์์๊ธฐ ๋๋ฌธ์ ํด๊ฒฐ๋์ง ์์ต๋๋ค.
๋ ์ฝ๋๊ฐ ์์ฑ๋์์ผ๋ ์ด์ ACME-DNS ์๋ฒ ์ค์ ๋ฐ ์คํ์ผ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค. ์ ๋ ๋ค์ ์์น์ ์๋ฒ๋ฅผ ํธ์คํ ํ ์์ ์ ๋๋ค. ubuntu ์๋ฒ ์ปจํ ์ด๋์์ ์คํ๋์ง๋ง, Go ์ธ์ด๊ฐ ์ค์น๋ ๊ณณ์ด๋ผ๋ฉด ์ด๋์์๋ ์คํํ ์ ์์ต๋๋ค. Windows ์ด๊ฒ๋ ๊ฝค ๊ด์ฐฎ์ง๋ง, ์ ๋ ์ฌ์ ํ ๋ ์ ํธํฉ๋๋ค. Linux ์๋ฒ.
ํ์ํ ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ๋ง๋ญ๋๋ค.
$ mkdir config
$ mkdir data
$ touch config/config.cfg์ข์ํ๋ ํ ์คํธ ํธ์ง๊ธฐ์ธ vim์ ์ฌ์ฉํ์ฌ ์ํ์ config.cfg์ ๋ถ์ฌ๋ฃ์ด ๋ณด๊ฒ ์ต๋๋ค. .
์ฑ๊ณต์ ์ธ ์์ ์ ์ํด์๋ ์ผ๋ฐ ๋ฐ API ์น์ ์ ์์ ํ๋ฉด ๋ฉ๋๋ค.
[general]
listen = "0.0.0.0:53"
protocol = "both"
domain = "acme.2nd.pp.ua"
nsname = "acmens.2nd.pp.ua"
nsadmin = "admin.2nd.pp.ua"
records =
"acme.2nd.pp.ua. A 35.237.128.147",
"acme.2nd.pp.ua. NS acmens.2nd.pp.ua.", ]
...
[api]
...
tls = "letsencrypt"
โฆ๋ํ ์ํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์๋น์ค ๋๋ ํ ๋ฆฌ์ docker-compose ํ์ผ์ ๋ง๋ญ๋๋ค.
version: '3.7'
services:
acmedns:
image: joohoi/acme-dns:latest
ports:
- "443:443"
- "53:53"
- "53:53/udp"
- "80:80"
volumes:
- ./config:/etc/acme-dns:ro
- ./data:/var/lib/acme-dns์๋ฃ. ๋ฐ์ฌํ ์ ์์ต๋๋ค.
$ docker-compose up -d์ด ์์ ์์ ํธ์คํธ๊ฐ ํ์ธ์ ์์ํด์ผ ํฉ๋๋ค. acme.2nd.pp.ua, ๊ทธ๋ฆฌ๊ณ 404๊ฐ ๋ํ๋ ๊ฒ์
๋๋ค https://acme.2nd.pp.ua
$ ping acme.2nd.pp.ua
PING acme.2nd.pp.ua (35.237.128.147) 56(84) bytes of data.
$ curl https://acme.2nd.pp.ua
404 page not found์ด๊ฒ์ด ๋ํ๋์ง ์์ผ๋ฉด - docker logs -f <container_name> ๋คํํ๋ ๋ก๊ทธ๋ ์ฝ๊ธฐ ์ฝ์ต๋๋ค.
์ธ์ฆ์ ์์ฑ์ ์์ํ ์ ์์ต๋๋ค. PowerShell์ ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ์คํํ๊ณ winacme๋ฅผ ์คํํ์ธ์. ๋ค์ ์ ํ ์ฌํญ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- M: ์ ์ธ์ฆ์ ๋ง๋ค๊ธฐ(์ ์ฒด ์ต์ )
- 2: ์๋ ์ ๋ ฅ
- 2: [dns-01] acme-dns๋ก ๊ฒ์ฆ ๋ ์ฝ๋ ์์ฑ()
- ACME-DNS ์๋ฒ ๋งํฌ์ ๋ํ ์ง๋ฌธ์ด ์์ผ๋ฉด ์์ฑ๋ ์๋ฒ์ URL(https)์ ์๋ต์ผ๋ก ์ ๋ ฅํ์ธ์. acme-dns ์๋ฒ์ URL:
์ด์ ๋ํ ์๋ต์ผ๋ก ํด๋ผ์ด์ธํธ๋ ๊ธฐ์กด DNS ์๋ฒ์ ์ถ๊ฐํด์ผ ํ๋ ๋ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค(ํ ๋ฒ๋ง ์ํ๋๋ ์ ์ฐจ).
[INFO] Creating new acme-dns registration for domain 1nd.pp.ua
Domain: 1nd.pp.ua
Record: _acme-challenge.1nd.pp.ua
Type: CNAME
Content: c82a88a5-499f-464f-96e4-be7f606a3b47.acme.2nd.pp.ua.
Note: Some DNS control panels add the final dot automatically.
Only one is required.
์ฐ๋ฆฌ๋ ํ์ํ ๊ธฐ๋ก์ ๋ง๋ค๊ณ ๊ทธ๊ฒ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ง๋ค์ด์ก๋์ง ํ์ธํฉ๋๋ค.
![]()
$ dig CNAME _acme-challenge.1nd.pp.ua +short
c82a88a5-499f-464f-96e4-be7f606a3b47.acme.2nd.pp.ua.winacme์ ํ์ํ ํญ๋ชฉ์ ์์ฑํ๋์ง ํ์ธํ๊ณ ์ธ์ฆ์ ์์ฑ ํ๋ก์ธ์ค๋ฅผ ๊ณ์ ์งํํฉ๋๋ค.

certbot์ ํด๋ผ์ด์ธํธ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. .
์ธ์ฆ์ ์์ฑ ๊ณผ์ ์ด ์๋ฃ๋์์ต๋๋ค. ์น ์๋ฒ์ ์ค์นํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ธ์ฆ์๋ฅผ ์์ฑํ ๋ ์ค์ผ์ค๋ฌ์ ์์ ์ ์ถ๊ฐํ๋ฉด ํฅํ ์ธ์ฆ์ ๊ฐฑ์ ๊ณผ์ ์ด ์๋์ผ๋ก ์งํ๋ฉ๋๋ค.
์ถ์ฒ : habr.com
