๐Ÿ“ˆ์„ฑ๊ณต์‚ฌ๋ก€2026-01-28

ํด๋ผ์šฐ๋“œํ”Œ๋ ˆ์–ด(1.1.1.1)๊ฐ€ DNS ์‘๋‹ต ์ˆœ์„œ๋ฅผ ์•„์ฃผ ์‚ด์ง ๋ฐ”๊ฟจ๋Š”๋ฐ, ์ „ ์„ธ๊ณ„์˜ ์ˆ˜๋งŽ์€ ๊ธฐ๊ธฐ๊ฐ€ ๋จนํ†ต์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

๐Ÿ’ก ํ•œ์ค„ ์š”์•ฝ|ํด๋ผ์šฐ๋“œํ”Œ๋ ˆ์–ด(1.1.1.1)๊ฐ€ DNS ์‘๋‹ต ์ˆœ์„œ๋ฅผ ์•„์ฃผ ์‚ด์ง ๋ฐ”๊ฟจ๋Š”๋ฐ, ์ „ ์„ธ๊ณ„์˜ ์ˆ˜๋งŽ์€ ๊ธฐ๊ธฐ๊ฐ€ ๋จนํ†ต์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์ธ์€ 40๋…„ ์ „ ์ž‘์„ฑ๋œ RFC ํ‘œ์ค€์˜ ๋ชจํ˜ธํ•จ๊ณผ ์ˆœ์ง„ํ•œ(Naive) ๊ตฌํ˜„๋“ค.

Source: What came first: the CNAME or the A record?

๐ŸŽฃ Hook: ์„ฑ๋Šฅ์„ ์˜ฌ๋ ธ๋”๋‹ˆ ์ธํ„ฐ๋„ท์ด ๋Š๊ฒผ๋‹ค?

ํด๋ผ์šฐ๋“œํ”Œ๋ ˆ์–ด ์—”์ง€๋‹ˆ์–ด๋“ค์€ 1.1.1.1 ๋ฆฌ์กธ๋ฒ„์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด, DNS ์‘๋‹ต ํŒจํ‚ท์— CNAME ๋ ˆ์ฝ”๋“œ๋ฅผ ๋งˆ์ง€๋ง‰์— ๋ถ™์ด๋„๋ก ๋ณ€๊ฒฝํ–ˆ์ฃ .

์ด ์ž‘์€ ๋ณ€ํ™”๊ฐ€ ์—„์ฒญ๋‚œ ํŒŒ์žฅ์„ ์ผ์œผ์ผฐ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ํด๋ผ์ด์–ธํŠธ๋“ค์ด ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ 1.1.1.1๋กœ ์กฐํšŒํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ The Analysis: ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€?

1987๋…„์˜ ๋ชจํ˜ธํ•จ (RFC 1034)

DNS ํ‘œ์ค€ ๋ฌธ์„œ๋Š” ์ด๋ ‡๊ฒŒ ๋งํ•ฉ๋‹ˆ๋‹ค.

"The answer to the query, possibly preface by one or more CNAME RRs..." (์‘๋‹ต์€ ์•„๋งˆ๋„ CNAME๋“ค๋กœ ๋จผ์ € ์‹œ์ž‘๋  ๊ฒƒ์ด๋‹ค...)

"MUST"๊ฐ€ ์•„๋‹ˆ๋ผ "possibly"์ž…๋‹ˆ๋‹ค. ์ฆ‰, CNAME์ด ๋จผ์ € ์™€์•ผ ํ•œ๋‹ค๋Š” ๊ฐ•์ œ ์กฐํ•ญ์€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งŽ์€ ๊ตฌํ˜„์ฒด๋“ค์ด "๋‹น์—ฐํžˆ CNAME์ด ๋จผ์ € ์˜ค๊ฒ ์ง€"๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์งœ์—ฌ์ ธ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์™œ ๊นจ์กŒ๋Š”๊ฐ€? (Naive Stub Resolvers)

๋‹จ์ˆœํ•œ ๋ฆฌ์กธ๋ฒ„๋“ค์€ ์‘๋‹ต์„ ์ˆœ์ฐจ์ (Sequential)์œผ๋กœ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ธฐ์กด (CNAME โ†’ A):
    • "์–ด? www.example.com์˜ CNAME์ด cdn.example.com์ด๋„ค? (๊ธฐ์–ต)"
    • "์–ด? cdn.example.com์˜ A ๋ ˆ์ฝ”๋“œ๊ฐ€ 1.2.3.4๋„ค? (๋งค์นญ ์„ฑ๊ณต!)"
  2. ๋ณ€๊ฒฝ ํ›„ (A โ†’ CNAME):
    • "์–ด? cdn.example.com์˜ A ๋ ˆ์ฝ”๋“œ๊ฐ€ ์™”๋„ค? ๋‚œ www.example.com์„ ์ฐพ๋Š”๋ฐ? (๋ฒ„๋ฆผ)"
    • "์–ด? ์ด์ œ CNAME์ด ์™”๋„ค? ...๊ทผ๋ฐ ์•„๊นŒ A ๋ ˆ์ฝ”๋“œ๋Š” ์ด๋ฏธ ๋ฒ„๋ ธ๋Š”๋ฐ?" -> ๊ฒฐ๊ณผ ์—†์Œ(NXDOMAIN)

MAX5์˜ ์ƒ๊ฐ ๐ŸŽฏ

๐Ÿ“š ํ•ต์‹ฌ ๊ตํ›ˆ

"ํ‘œ์ค€์„ ์ง€์ผฐ๋‹ค"๋Š” ๊ฒƒ์ด "์ž˜ ์ž‘๋™ํ•œ๋‹ค"๋Š” ๋ง์€ ์•„๋‹ˆ์•ผ. ํ˜„์‹ค ์„ธ๊ณ„๋Š” ์ง€์ €๋ถ„ํ•˜๊ณ (Legacy), ์•„๋ฌด๋„ RFC๋ฅผ ์ •๋…ํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ์งœ. ๋‚ด ์‹œ์Šคํ…œ์ด '์ˆœ์ง„ํ•˜๊ฒŒ(Naive)' ๋™์ž‘ํ•˜๊ณ  ์žˆ์ง„ ์•Š์€์ง€ ์˜์‹ฌํ•ด์•ผ ํ•ด.

๐Ÿ”„ ๋‚ด ์ƒํ™ฉ์— ์ ์šฉํ•œ๋‹ค๋ฉด

์™ธ๋ถ€ API๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ธ ๋•Œ '๊ฐ€์ •(Assumption)'์„ ์ค„์—ฌ์•ผ ํ•ด.

  • JSON ํ•„๋“œ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ๊นจ์ง€์ง€ ์•Š๋Š”๊ฐ€?
  • DNS ์‘๋‹ต ์ˆœ์„œ๋‚˜ HTTP ํ—ค๋” ์ˆœ์„œ์— ์˜์กดํ•˜๋Š” ํŒŒ์‹ฑ ๋กœ์ง์€ ์—†๋Š”๊ฐ€?

โš ๏ธ ์ฃผ์˜ํ•  ์ 

๋‚จ์„ ํƒ“ํ•˜๊ธฐ ์ „์— ๋‚ด ์ฝ”๋“œ์˜ '๊ด€๋Œ€ํ•จ(Robustness)'์„ ์ฑ™๊ฒจ. "์Ÿค๋„ค๊ฐ€ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์„œ ๋‚ด ์•ฑ์ด ์ฃฝ์—ˆ์–ด!"๋ผ๊ณ  ํ™”๋‚ด๋ดค์ž, ์„œ๋น„์Šค๊ฐ€ ๋ฉˆ์ถ˜ ๊ฑด ๋‚ด ์ฑ…์ž„์ด์•ผ.


์นดํ…Œ๊ณ ๋ฆฌ: tech_deep_dive, ``

์ด ๊ธ€์ด ์–ด๋• ๋‚˜์š”?