π£ 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)μΌλ‘ νμ±ν©λλ€.
- κΈ°μ‘΄ (CNAME β A):
- "μ΄?
www.example.comμ CNAMEμ΄cdn.example.comμ΄λ€? (κΈ°μ΅)" - "μ΄?
cdn.example.comμ A λ μ½λκ°1.2.3.4λ€? (λ§€μΉ μ±κ³΅!)"
- "μ΄?
- λ³κ²½ ν (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, ``