ESNI๋กœ ๊ณต๊ฐœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•

์•ˆ๋…•ํ•˜์„ธ์š” Habr. ์ œ ์ด๋ฆ„์€ Ilya์ž…๋‹ˆ๋‹ค. ์ €๋Š” Exness์˜ ํ”Œ๋žซํผ ํŒ€์—์„œ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ œํ’ˆ ๊ฐœ๋ฐœ ํŒ€์ด ์‚ฌ์šฉํ•˜๋Š” ํ•ต์‹ฌ ์ธํ”„๋ผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ๊ณต๊ฐœ ์›น์‚ฌ์ดํŠธ ์ธํ”„๋ผ์— ์•”ํ˜ธํ™”๋œ SNI(ESNI) ๊ธฐ์ˆ ์„ ๊ตฌํ˜„ํ•œ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ESNI๋กœ ๊ณต๊ฐœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณต๊ฐœ ์›น์‚ฌ์ดํŠธ ์ž‘์—… ์‹œ ๋ณด์•ˆ ์ˆ˜์ค€์ด ํ–ฅ์ƒ๋˜๊ณ  ํšŒ์‚ฌ๊ฐ€ ์ฑ„ํƒํ•œ ๋‚ด๋ถ€ ๋ณด์•ˆ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์šฐ์„  ํ•ด๋‹น ๊ธฐ์ˆ ์ด ํ‘œ์ค€ํ™”๋˜์ง€ ์•Š์•„ ์•„์ง ์ดˆ์•ˆ ๋‹จ๊ณ„์— ์žˆ์ง€๋งŒ CloudFlare์™€ Mozilla์—์„œ๋Š” ์ด๋ฏธ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ดˆ์•ˆ01). ์ด๊ฒƒ์ด ์šฐ๋ฆฌ์—๊ฒŒ ๊ทธ๋Ÿฌํ•œ ์‹คํ—˜์„ ํ•˜๊ฒŒ ๋œ ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•ฝ๊ฐ„์˜ ์ด๋ก 

์—์Šค๋‹ˆ TLS ํ•ธ๋“œ์…ฐ์ดํฌ "ํด๋ผ์ด์–ธํŠธ Hello" ๋ฉ”์‹œ์ง€์—์„œ SNI ์•”ํ˜ธํ™”๋ฅผ ํ—ˆ์šฉํ•˜๋Š” TLS 1.3 ํ”„๋กœํ† ์ฝœ์˜ ํ™•์žฅ์ž…๋‹ˆ๋‹ค. ESNI๋ฅผ ์ง€์›ํ•˜๋Š” Client Hello๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค(์ผ๋ฐ˜์ ์ธ SNI ๋Œ€์‹  ESNI๋กœ ํ‘œ์‹œ๋จ).

ESNI๋กœ ๊ณต๊ฐœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•

 ESNI๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • DNS; 
  • ํด๋ผ์ด์–ธํŠธ ์ง€์›;
  • ์„œ๋ฒ„ ์ธก ์ง€์›.

DNS

๋‘ ๊ฐœ์˜ DNS ๋ ˆ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. A๊ณผ TXT (TXT ๋ ˆ์ฝ”๋“œ์—๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ SNI๋ฅผ ์•”ํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐœ ํ‚ค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.) - ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ฒŒ๋‹ค๊ฐ€ ์ง€์›์ด ์žˆ์–ด์•ผ์ง€ DoH (HTTPS๋ฅผ ํ†ตํ•œ DNS) ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํด๋ผ์ด์–ธํŠธ(์•„๋ž˜ ์ฐธ์กฐ)๊ฐ€ DoH ์—†์ด๋Š” ESNI ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ESNI๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์˜ ์•”ํ˜ธํ™”๋ฅผ ์˜๋ฏธํ•˜๋ฏ€๋กœ ์ด๋Š” ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, UDP๋ฅผ ํ†ตํ•ด DNS์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์šฉ๋„๋Š” DNSSEC ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์บ์‹œ ์ค‘๋… ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋Ÿฌ DoH ์ œ๊ณต์—…์ฒด, ๊ทธ์ค‘ :

CloudFlare ์„ ์–ธํ•˜๋‹ค (๋‚ด ๋ธŒ๋ผ์šฐ์ € ํ™•์ธ โ†’ ์•”ํ˜ธํ™”๋œ SNI โ†’ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ) ํ•ด๋‹น ์„œ๋ฒ„๊ฐ€ ์ด๋ฏธ ESNI๋ฅผ ์ง€์›ํ•˜๋Š”์ง€, ์ฆ‰ DNS์˜ CloudFlare ์„œ๋ฒ„์— ๋Œ€ํ•ด A์™€ TXT๋ผ๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์•„๋ž˜ ์˜ˆ์—์„œ๋Š” HTTPS๋ฅผ ํ†ตํ•ด Google DNS๋ฅผ ์ฟผ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 

ะ ๊ธฐ๋ก :

curl 'https://dns.google.com/resolve?name=www.cloudflare.com&type=A' 
-s -H 'accept: application/dns+json'
{
  "Status": 0,
  "TC": false,
  "RD": true,
  "RA": true,
  "AD": true,
  "CD": false,
  "Question": [
    {
      "name": "www.cloudflare.com.",
      "type": 1
    }
  ],
  "Answer": [
    {
      "name": "www.cloudflare.com.",
      "type": 1,
      "TTL": 257,
      "data": "104.17.210.9"
    },
    {
      "name": "www.cloudflare.com.",
      "type": 1,
      "TTL": 257,
      "data": "104.17.209.9"
    }
  ]
}

TXT ๊ธฐ๋ก, ์š”์ฒญ์€ ํ…œํ”Œ๋ฆฟ์— ๋”ฐ๋ผ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. _esni.FQDN:

curl 'https://dns.google.com/resolve?name=_esni.www.cloudflare.com&type=TXT' 
-s -H 'accept: application/dns+json'
{
  "Status": 0,
  "TC": false,
  "RD": true,
  "RA": true,
  "AD": true,
  "CD": false,
  "Question": [
    {
    "name": "_esni.www.cloudflare.com.",
    "type": 16
    }
  ],
  "Answer": [
    {
    "name": "_esni.www.cloudflare.com.",
    "type": 16,
    "TTL": 1799,
    "data": ""/wEUgUKlACQAHQAg9SiAYQ9aUseUZr47HYHvF5jkt3aZ5802eAMJPhRz1QgAAhMBAQQAAAAAXtUmAAAAAABe3Q8AAAA=""
    }
  ],
  "Comment": "Response from 2400:cb00:2049:1::a29f:209."
}

๋”ฐ๋ผ์„œ DNS ๊ด€์ ์—์„œ DoH(๋ฐ”๋žŒ์งํ•˜๊ฒŒ๋Š” DNSSEC์™€ ํ•จ๊ป˜)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‘ ๊ฐœ์˜ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

๊ณ ๊ฐ ์ง€์›

๋ธŒ๋ผ์šฐ์ €์— ๊ด€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ํ˜„์žฌ๋กœ์„œ๋Š” ์ง€์›์€ FireFox์—์„œ๋งŒ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.. ์—ฌ๊ธฐ์— FireFox์—์„œ ESNI ๋ฐ DoH ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ตฌ์„ฑ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ESNI๋กœ ๊ณต๊ฐœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•

๋งํฌ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ESNI๋Š” TLS 1.3์˜ ํ™•์žฅ์ด๋ฏ€๋กœ ESNI๋ฅผ ์ง€์›ํ•˜๋ ค๋ฉด TLS 1.3์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ESNI ์ง€์›์œผ๋กœ ๋ฐฑ์—”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ค์Œ ์œ„์น˜์— ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. go, ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜์ค‘์— ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธก ์ง€์›

ํ˜„์žฌ ESNI๋Š” nginx/apache ๋“ฑ๊ณผ ๊ฐ™์€ ์›น ์„œ๋ฒ„์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ณต์‹์ ์œผ๋กœ ESNI๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” OpenSSL/BoringSSL์„ ํ†ตํ•ด TLS์™€ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ESNI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ TLS 1.3 ์ข…๋ฃŒ๋ฅผ ์ง€์›ํ•˜๊ณ  ESNI๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์—…์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ํ”„๋ก์‹œ HTTP(S) ํŠธ๋ž˜ํ”ฝ์„ ์ง€์›ํ•˜๋Š” ์ž์ฒด ํ”„๋ŸฐํŠธ ์—”๋“œ ๊ตฌ์„ฑ ์š”์†Œ(ESNI ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ)๋ฅผ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ์ฆ‰ ESNI๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ˜„์žฌ ์›น ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ธํ”„๋ผ์—์„œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ๋‹ค์Œ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ESNI๋กœ ๊ณต๊ฐœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ”„๋ก์‹œ๋Š” ESNI ์—†์ด TLS ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ณ  ESNI๊ฐ€ ์—†๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์—…์ŠคํŠธ๋ฆผ์˜ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์€ TLS ๋ฒ„์ „์ด 1.3๋ณด๋‹ค ๋‚ฎ์€ HTTP ๋˜๋Š” HTTPS์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์—…์ŠคํŠธ๋ฆผ์ด 1.3์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ). ์ด ๊ตฌ์„ฑํ‘œ๋Š” ์ตœ๋Œ€์˜ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ESNI ์ง€์› ๊ตฌํ˜„ go ์šฐ๋ฆฌ๋Š” ๋นŒ๋ ธ๋‹ค CloudFlare. ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ณ€๊ฒฝ์ด ํฌํ•จ๋˜๋ฏ€๋กœ ๊ตฌํ˜„ ์ž์ฒด๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ ์„ ์ฆ‰์‹œ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•”ํ˜ธํ™”/TLS ๋”ฐ๋ผ์„œ "ํŒจ์น˜"๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ ๋ฃจํŠธ ์กฐ๋ฆฝ ์ „.

ESNI ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์—์Šค๋‹ˆํˆด (CloudFlare์˜ ์•„์ด๋””์–ด์ด๊ธฐ๋„ ํ•จ) ์ด ํ‚ค๋Š” SNI ์•”ํ˜ธํ™”/์•”ํ˜ธ ํ•ด๋…์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
Linux(Debian, Alpine) ๋ฐ MacOS์—์„œ go 1.13์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. 

์šด์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ช‡ ๋งˆ๋””

ESNI ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋Š” rps, ์—…์ŠคํŠธ๋ฆผ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐ ์‘๋‹ต ์ฝ”๋“œ, ์‹คํŒจ/์„ฑ๊ณต TLS ํ•ธ๋“œ์…ฐ์ดํฌ ๋ฐ TLS ํ•ธ๋“œ์…ฐ์ดํฌ ๊ธฐ๊ฐ„๊ณผ ๊ฐ™์€ Prometheus ํ˜•์‹์˜ ๋ฉ”ํŠธ๋ฆญ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์–ธ๋œป ๋ณด๊ธฐ์— ์ด๋Š” ํ”„๋ก์‹œ๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ‰๊ฐ€ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. 

์‚ฌ์šฉ ์ „ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ฒฐ๊ณผ:

wrk -t50 -c1000 -d360s 'https://esni-rev-proxy.npw:443' --timeout 15s
Running 6m test @ https://esni-rev-proxy.npw:443
  50 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.77s     1.21s    7.20s    65.43%
    Req/Sec    13.78      8.84   140.00     83.70%
  206357 requests in 6.00m, 6.08GB read
Requests/sec:    573.07
Transfer/sec:     17.28MB 

์šฐ๋ฆฌ๋Š” ESNI ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์ •์„ฑ์ ์ธ ๋กœ๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐ„ ๊ตฌ์„ฑ ์š”์†Œ์˜ "๊ฐ„์„ญ"์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ๋กœ ํŠธ๋ž˜ํ”ฝ์„ "์Ÿ์•˜์Šต๋‹ˆ๋‹ค".

๋”ฐ๋ผ์„œ ESNI ์ง€์› ๋ฐ HTTP์—์„œ ์—…์ŠคํŠธ๋ฆผ์œผ๋กœ์˜ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ESNI ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ์˜ ํ‰๊ท  CPU/RAM ์†Œ๋น„์™€ ํ•จ๊ป˜ ํ•œ ์ธ์Šคํ„ด์Šค์—์„œ ์•ฝ 550rps๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

  • 80% CPU ์‚ฌ์šฉ๋Ÿ‰(vCPU 4๊ฐœ, 4GB RAM ํ˜ธ์ŠคํŠธ, Linux)
  • 130MB ๋ฉ”๋ชจ๋ฆฌ RSS

ESNI๋กœ ๊ณต๊ฐœ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•

๋น„๊ต๋ฅผ ์œ„ํ•ด TLS(HTTP ํ”„๋กœํ† ์ฝœ) ์ข…๋ฃŒ๊ฐ€ ์—†๋Š” ๋™์ผํ•œ nginx ์—…์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ RPS๋Š” ~ 1100์ž…๋‹ˆ๋‹ค.

wrk -t50 -c1000 -d360s 'http://lb.npw:80' โ€“-timeout 15s
Running 6m test @ http://lb.npw:80
  50 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.11s     2.30s   15.00s    90.94%
    Req/Sec    23.25     13.55   282.00     79.25%
  393093 requests in 6.00m, 11.35GB read
  Socket errors: connect 0, read 0, write 0, timeout 9555
  Non-2xx or 3xx responses: 8111
Requests/sec:   1091.62
Transfer/sec:     32.27MB 

์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ(vCPU 4๊ฐœ, RAM ํ˜ธ์ŠคํŠธ 4GB, Linux ์‚ฌ์šฉ) ์‹ค์ œ๋กœ ์ž ์žฌ์ ์ธ RPS๋Š” ๋” ๋†’์Šต๋‹ˆ๋‹ค(๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ ๋ฆฌ์†Œ์Šค์—์„œ ์ตœ๋Œ€ 2700RPS๋ผ๋Š” ์ˆ˜์น˜๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค).

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด ESNI ๊ธฐ์ˆ ์€ ๋งค์šฐ ์œ ๋งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณต๊ฐœ ESNI ํ‚ค๋ฅผ DNS์— ์ €์žฅํ•˜๊ณ  ESNI ํ‚ค๋ฅผ ์ˆœํ™˜ํ•˜๋Š” ๋ฌธ์ œ์™€ ๊ฐ™์€ ๋ฏธํ•ด๊ฒฐ ์งˆ๋ฌธ์ด ์—ฌ์ „ํžˆ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ํ™œ๋ฐœํžˆ ๋…ผ์˜๋˜๊ณ  ์žˆ์œผ๋ฉฐ (์ž‘์„ฑ ๋‹น์‹œ) ESNI ์ดˆ์•ˆ์˜ ์ตœ์‹  ๋ฒ„์ „์ด ์ด๋ฏธ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 7.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€