μμ νκ³ κ²©λ¦¬λ μ½λ μ€νμ μν κ°λ ₯ν λ©μ»€λμ¦μΈ μλ°μ€ν¬λ¦½νΈ μ»΄ννΈλ¨ΌνΈλ₯Ό μ΄ν΄λ³΄μΈμ. μ»΄ννΈλ¨ΌνΈκ° 보μμ κ°ννκ³ , μμ‘΄μ±μ κ΄λ¦¬νλ©°, 볡μ‘ν μ ν리μΌμ΄μ μμ κ΅μ°¨ μμ ν΅μ μ κ°λ₯νκ² νλ λ°©λ²μ λ°°μ보μΈμ.
μλ°μ€ν¬λ¦½νΈ μ»΄ννΈλ¨ΌνΈ: μ¬μΈ΅ λΆμ, μμ ν μλλ°μ€ μ½λ μ€ν
νλ μΉ κ°λ°κ³Ό Node.jsμ κ°μ μλ² μΈ‘ νκ²½μμ, μ λ’°ν μ μκ±°λ μ 3μ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μμ νκ² μ€νν΄μΌ ν νμμ±μ΄ λ§€μ° μ€μν΄μ‘μ΅λλ€. κΈ°μ‘΄μ μ κ·Ό λ°©μμ μ’ μ’ λ―Έν‘νμ¬ μ ν리μΌμ΄μ μ λ€μν 곡격μ μ·¨μ½νκ² λ§λλλ€. μλ°μ€ν¬λ¦½νΈ μ»΄ννΈλ¨ΌνΈλ μ½λ μ€νμ μν μλλ°μ€ νκ²½μ μ 곡νμ¬, μ½λλ₯Ό μ£Ό μ ν리μΌμ΄μ μΌλ‘λΆν° ν¨κ³Όμ μΌλ‘ 격리νκ³ λ―Όκ°ν 리μμ€μ λν λ¬΄λ¨ μ κ·Όμ λ°©μ§νλ κ°λ ₯ν ν΄κ²°μ± μ μ μν©λλ€.
μλ°μ€ν¬λ¦½νΈ μ»΄ννΈλ¨ΌνΈλ 무μμΈκ°?
μλ°μ€ν¬λ¦½νΈ μ»΄ννΈλ¨ΌνΈλ μ μκ³Ό ꡬν(μ: Firefoxμ μλ°μ€ν¬λ¦½νΈ μμ§μΈ SpiderMonkey λ΄ κ΅¬ν λ° SES β Secure EcmaScript β λ Έλ ₯κ³Ό μ°κ³)μ ν΅ν΄ 곡μνλ κ°λ μΌλ‘, λ³Έμ§μ μΌλ‘ λ¨μΌ μλ°μ€ν¬λ¦½νΈ λ°νμ λ΄μ 격리λ μ€ν 컨ν μ€νΈμ λλ€. λͺ μμ μΌλ‘ νμ©λμ§ μλ ν, μ½λκ° μ μ νκ²½μ΄λ λ€λ₯Έ μ»΄ννΈλ¨ΌνΈμ μ§μ μ μΈ μν₯μ λ―ΈμΉμ§ μκ³ μ€νλ μ μλ λ³λμ 컨ν μ΄λλ‘ μκ°ν μ μμ΅λλ€. μ΄λ¬ν 격리λ μ μ κ°μ²΄, νλ‘ν νμ λ° κΈ°ν ν΅μ¬ μλ°μ€ν¬λ¦½νΈ κΈ°λ₯μ λν μ κ·Όμ μ μ΄ν¨μΌλ‘μ¨ λ¬μ±λ©λλ€.
eval()
μ΄λ Function
μμ±μμ κ°μ νΉμ μΈμ΄ κΈ°λ₯μ λΉνμ±ννλ λ° μμ‘΄νλ λ¨μν μλλ°μ± κΈ°μ κ³Ό λ¬λ¦¬, μ»΄ννΈλ¨ΌνΈλ λ μΈλΆνλκ³ μμ ν μ κ·Ό λ°©μμ μ 곡ν©λλ€. μλλ°μ€ νκ²½ λ΄μμ μ κ·Όν μ μλ κ°μ²΄μ APIμ λν μ λ°ν μ μ΄λ₯Ό κ°λ₯νκ² ν©λλ€. μ΄λ μ μ¬μ μΌλ‘ μνν μμ
μ λν μ κ·Όμ μ ννλ©΄μ μμ ν μμ
μ νμ©ν μ μμμ μλ―Έν©λλ€.
μ»΄ννΈλ¨ΌνΈ μ¬μ©μ μ£Όμ μ΄μ
- ν₯μλ 보μ: μ»΄ννΈλ¨ΌνΈλ μ λ’°ν μ μλ μ½λλ₯Ό 격리νμ¬ λ―Όκ°ν λ°μ΄ν°μ μ κ·Όνκ±°λ νΈμ€νΈ μ ν리μΌμ΄μ μ μ‘°μνλ κ²μ λ°©μ§ν©λλ€. μ΄λ μ 3μ λΌμ΄λΈλ¬λ¦¬, μ¬μ©μκ° μ μΆν μ½λ λλ μ λ’°ν μ μλ μμ€μ λ°μ΄ν°λ₯Ό ν΅ν©ν λ λ§€μ° μ€μν©λλ€.
- μμ‘΄μ± κ΄λ¦¬: μ»΄ννΈλ¨ΌνΈλ 볡μ‘ν μ ν리μΌμ΄μ μμ μμ‘΄μ±μ κ΄λ¦¬νλ λ° λμμ΄ λ μ μμ΅λλ€. μλ‘ λ€λ₯Έ λͺ¨λμ΄λ κ΅¬μ± μμλ₯Ό λ³λμ μ»΄ννΈλ¨ΌνΈμμ μ€νν¨μΌλ‘μ¨ μ΄λ¦ μΆ©λμ νΌνκ³ μ ν리μΌμ΄μ μ κ° λΆλΆμ΄ μ체μ μΌλ‘ 격리λ νκ²½μ κ°λλ‘ λ³΄μ₯ν μ μμ΅λλ€.
- κ΅μ°¨ μμ ν΅μ : μ»΄ννΈλ¨ΌνΈλ λμΌν μ ν리μΌμ΄μ λ΄μ λ€λ₯Έ μμ(μ€ν 컨ν μ€νΈ) κ°μ μμ ν ν΅μ μ μ©μ΄νκ² ν©λλ€. μ΄λ₯Ό ν΅ν΄ 보μκ³Ό 격리λ₯Ό μ μ§νλ©΄μ μ ν리μΌμ΄μ μ 격리λ λΆλΆ κ°μ λ°μ΄ν°μ κΈ°λ₯μ 곡μ ν μ μμ΅λλ€.
- κ°μνλ ν μ€νΈ: μ»΄ννΈλ¨ΌνΈλ μ½λλ₯Ό 격리νμ¬ ν μ€νΈνλ κ²μ λ μ½κ² λ§λλλ€. νΉμ μμ‘΄μ± μ§ν©μ κ°μ§ μ»΄ννΈλ¨ΌνΈλ₯Ό μμ±νκ³ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμΌλ‘λΆν°μ κ°μ κ±±μ μμ΄ μ½λλ₯Ό ν μ€νΈν μ μμ΅λλ€.
- 리μμ€ μ μ΄: μΌλΆ ꡬνμμλ μ»΄ννΈλ¨ΌνΈμ 리μμ€ μ νμ μ μ©νμ¬ ν΅μ λΆκ°λ₯ν μ½λκ° κ³Όλν λ©λͺ¨λ¦¬λ CPUλ₯Ό μλΉνλ κ²μ λ°©μ§ν μ μμ΅λλ€.
μ»΄ννΈλ¨ΌνΈμ μλ λ°©μ: μ¬μΈ΅ λΆμ
μ»΄ννΈλ¨ΌνΈμ ν΅μ¬ μμ΄λμ΄λ μμ λ λ΄μ₯ κ°μ²΄ λ° νλ‘ν νμ μ§ν©μ κ°μ§ μλ‘μ΄ μ μ νκ²½μ λ§λλ κ²μ λλ€. μ½λκ° μ»΄ννΈλ¨ΌνΈ λ΄μμ μ€νλ λ, μ΄ κ²©λ¦¬λ νκ²½ λ΄μμ μλν©λλ€. μΈλΆ μΈκ³μ λν μ κ·Όμ μ’ μ’ κ°μ²΄ λνκ³Ό νλ‘μλ₯Ό ν¬ν¨νλ νλ‘μΈμ€λ₯Ό ν΅ν΄ μ μ€νκ² μ μ΄λ©λλ€.
1. λ λ¦(Realm) μμ±
첫 λ²μ§Έ λ¨κ³λ μλ‘μ΄ λ λ¦(realm)μ μμ±νλ κ²μΈλ°, μ΄λ λ³Έμ§μ μΌλ‘ μλ‘μ΄ μ μ μ€ν 컨ν
μ€νΈμ
λλ€. μ΄ λ λ¦μ μ체μ μΈ μ μ κ°μ²΄(μ: λΈλΌμ°μ νκ²½μ window
λλ Node.jsμ global
)μ νλ‘ν νμ
μ κ°μ§λλ€. μ»΄ννΈλ¨ΌνΈ κΈ°λ° μμ€ν
μμ μ΄ λ λ¦μ μ’
μ’
μΆμλκ±°λ μμ λ λ΄μ₯ κΈ°λ₯λ€λ‘ μμ±λ©λλ€.
2. κ°μ²΄ λν λ° νλ‘μ
μΈλΆ νκ²½μ κ°μ²΄ λ° ν¨μμ λν μ μ΄λ μ κ·Όμ νμ©νκΈ° μν΄, μ»΄ννΈλ¨ΌνΈλ μΌλ°μ μΌλ‘ κ°μ²΄ λνκ³Ό νλ‘μλ₯Ό μ¬μ©ν©λλ€. κ°μ²΄κ° μ»΄ννΈλ¨ΌνΈλ‘ μ λ¬λ λ, κ·Έ μμ±κ³Ό λ©μλμ λν λͺ¨λ μ κ·Όμ κ°λ‘μ±λ νλ‘μ κ°μ²΄λ‘ κ°μΈμ§λλ€. μ΄λ₯Ό ν΅ν΄ μ»΄ννΈλ¨ΌνΈ ꡬνμ 보μ μ μ± μ κ°μ νκ³ κ°μ²΄μ νΉμ λΆλΆμ λν μ κ·Όμ μ νν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, DOM μμ(λ²νΌκ³Ό κ°μ)λ₯Ό μ»΄ννΈλ¨ΌνΈλ‘ μ λ¬νλ©΄, μ»΄ννΈλ¨ΌνΈλ μ€μ DOM μμ λμ νλ‘μ κ°μ²΄λ₯Ό λ°μ μ μμ΅λλ€. μ΄ νλ‘μλ λ²νΌμ νΉμ μμ±(μ: ν μ€νΈ λ΄μ©)μλ§ μ κ·Όμ νμ©νκ³ λ€λ₯Έ μμ±(μ: μ΄λ²€νΈ 리μ€λ)μ λν μ κ·Όμ λ§μ μ μμ΅λλ€. νλ‘μλ λ¨μν 볡μ¬λ³Έμ΄ μλλΌ, 보μ μ μ½μ κ°μ νλ©΄μ μλ³Έ κ°μ²΄λ‘ νΈμΆμ μ λ¬ν©λλ€.
3. μ μ κ°μ²΄ 격리
μ»΄ννΈλ¨ΌνΈμ κ°μ₯ μ€μν μΈ‘λ©΄ μ€ νλλ μ μ κ°μ²΄μ 격리μ
λλ€. μ μ κ°μ²΄(μ: window
λλ global
)λ κ΄λ²μν λ΄μ₯ ν¨μμ κ°μ²΄μ λν μ κ·Όμ μ 곡ν©λλ€. μ»΄ννΈλ¨ΌνΈλ μΌλ°μ μΌλ‘ μΆμλκ±°λ μμ λ λ΄μ₯ κΈ°λ₯λ€λ‘ μλ‘μ΄ μ μ κ°μ²΄λ₯Ό μμ±νμ¬, μ»΄ννΈλ¨ΌνΈ λ΄ μ½λκ° μ μ¬μ μΌλ‘ μνν ν¨μλ κ°μ²΄μ μ κ·Όνλ κ²μ λ°©μ§ν©λλ€.
μλ₯Ό λ€μ΄, μμμ μ½λλ₯Ό μ€νν μ μλ eval()
ν¨μλ μ’
μ’
μ»΄ννΈλ¨ΌνΈμμ μ κ±°λκ±°λ μ νλ©λλ€. λ§μ°¬κ°μ§λ‘, νμΌ μμ€ν
μ΄λ λ€νΈμν¬ APIμ λν μ κ·Όμ μ»΄ννΈλ¨ΌνΈ λ΄ μ½λκ° λ¬΄λ¨ νμλ₯Ό μννλ κ²μ λ°©μ§νκΈ° μν΄ μ νλ μ μμ΅λλ€.
4. νλ‘ν νμ μ€μΌ λ°©μ§
μ»΄ννΈλ¨ΌνΈλ μ ν리μΌμ΄μ
μ μ
μ± μ½λλ₯Ό μ£Όμ
νλ λ° μ¬μ©λ μ μλ νλ‘ν νμ
μ€μΌ λ¬Έμ λ ν΄κ²°ν©λλ€. λ΄μ₯ κ°μ²΄(μ: Object.prototype
λλ Array.prototype
)μ λν μλ‘μ΄ νλ‘ν νμ
μ μμ±ν¨μΌλ‘μ¨, μ»΄ννΈλ¨ΌνΈλ μ»΄ννΈλ¨ΌνΈ λ΄ μ½λκ° μΈλΆ νκ²½μμ μ΄λ¬ν κ°μ²΄μ λμμ μμ νλ κ²μ λ°©μ§ν μ μμ΅λλ€.
μ»΄ννΈλ¨ΌνΈ μ€μ νμ© μμ
μ»΄ννΈλ¨ΌνΈλ₯Ό μ¬μ©νμ¬ λ³΄μμ κ°ννκ³ μμ‘΄μ±μ κ΄λ¦¬ν μ μλ λͺ κ°μ§ μ€μ μλ리μ€λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
1. μ 3μ μμ ― μ€ν
μμ λ―Έλμ΄ νΌλλ κ΄κ³ λ°°λμ κ°μ μ 3μ μμ ―μ ν΅ν©νλ μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ€κ³ μμν΄ λ³΄μμμ€. μ΄λ¬ν μμ ―μλ μ’ μ’ μμ ν μ λ’°ν μ μλ μλ°μ€ν¬λ¦½νΈ μ½λκ° ν¬ν¨λμ΄ μμ΅λλ€. μ΄ μμ ―λ€μ λ³λμ μ»΄ννΈλ¨ΌνΈμμ μ€νν¨μΌλ‘μ¨, λ―Όκ°ν λ°μ΄ν°μ μ κ·Όνκ±°λ νΈμ€νΈ μ ν리μΌμ΄μ μ μ‘°μνλ κ²μ λ°©μ§ν μ μμ΅λλ€.
μμ:
νΈμν°μ νΈμμ νμνλ μμ ―μ΄ μλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. μ΄ μμ ―μ μν μ»΄ννΈλ¨ΌνΈλ₯Ό μμ±νκ³ κ·Έ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ»΄ννΈλ¨ΌνΈμ λ‘λν μ μμ΅λλ€. μ»΄ννΈλ¨ΌνΈλ νΈμν° APIμ λν μ κ·Όμ νμ©νμ§λ§ DOMμ΄λ μ ν리μΌμ΄μ μ λ€λ₯Έ λ―Όκ°ν λΆλΆμ λν μ κ·Όμ λ°©μ§νλλ‘ κ΅¬μ±λ©λλ€. μ΄λ κ² νλ©΄ μμ ―μ΄ μ ν리μΌμ΄μ μ 보μμ μΉ¨ν΄νμ§ μκ³ νΈμμ νμν μ μμ΅λλ€.
2. μ¬μ©μ μ μΆ μ½λμ μμ ν νκ°
λ§μ μ ν리μΌμ΄μ μ μ¬μ©μκ° μ¬μ©μ μ μ μ€ν¬λ¦½νΈλ μμκ³Ό κ°μ μ½λλ₯Ό μ μΆνλλ‘ νμ©ν©λλ€. μ΄ μ½λλ₯Ό μ ν리μΌμ΄μ μμ μ§μ μ€ννλ κ²μ μνν μ μμΌλ©°, μ ν리μΌμ΄μ μ 보μμ μνν μ μλ μ μ± μ½λλ₯Ό ν¬ν¨ν μ μμ΅λλ€. μ»΄ννΈλ¨ΌνΈλ μ ν리μΌμ΄μ μ 보μ μνμ λ ΈμΆμν€μ§ μκ³ μ¬μ©μ μ μΆ μ½λλ₯Ό νκ°νλ μμ ν λ°©λ²μ μ 곡ν©λλ€.
μμ:
μ¬μ©μκ° μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μμ±νκ³ μ€νν μ μλ μ¨λΌμΈ μ½λ νΈμ§κΈ°λ₯Ό μκ°ν΄ 보μμμ€. κ° μ¬μ©μμ μ½λλ₯Ό μν μ»΄ννΈλ¨ΌνΈλ₯Ό μμ±νκ³ κ·Έ μ»΄ννΈλ¨ΌνΈ λ΄μμ μ½λλ₯Ό μ€νν μ μμ΅λλ€. μ»΄ννΈλ¨ΌνΈλ νμΌ μμ€ν , λ€νΈμν¬ API λ° κΈ°ν λ―Όκ°ν 리μμ€μ λν μ κ·Όμ λ°©μ§νλλ‘ κ΅¬μ±λ©λλ€. μ΄λ κ² νλ©΄ μ¬μ©μ μ μΆ μ½λκ° μ ν리μΌμ΄μ μ ν΄λ₯Ό λΌμΉκ±°λ λ―Όκ°ν λ°μ΄ν°μ μ κ·Όν μ μλλ‘ λ³΄μ₯ν©λλ€.
3. Node.jsμμ λͺ¨λ 격리
Node.jsμμλ μ»΄ννΈλ¨ΌνΈλ₯Ό μ¬μ©νμ¬ λͺ¨λμ 격리νκ³ μ΄λ¦ μΆ©λμ λ°©μ§ν μ μμ΅λλ€. κ° λͺ¨λμ λ³λμ μ»΄ννΈλ¨ΌνΈμμ μ€νν¨μΌλ‘μ¨, κ° λͺ¨λμ΄ μ체μ μΌλ‘ 격리λ νκ²½μ κ°μ§κ³ λ€λ₯Έ λͺ¨λκ³Ό κ°μνμ§ μλλ‘ λ³΄μ₯ν μ μμ΅λλ€.
μμ:
λ λͺ¨λμ΄ λͺ¨λ x
λΌλ μ΄λ¦μ λ³μλ₯Ό μ μνλ€κ³ μμν΄ λ³΄μμμ€. μ΄ λͺ¨λλ€μ λμΌν νκ²½μμ μ€ννλ©΄ μ΄λ¦ μΆ©λμ΄ λ°μν©λλ€. νμ§λ§ κ° λͺ¨λμ λ³λμ μ»΄ννΈλ¨ΌνΈμμ μ€ννλ©΄, κ° λͺ¨λμ΄ μ체μ μΌλ‘ 격리λ νκ²½μ κ°μ§λ―λ‘ μ΄λ¦ μΆ©λμ΄ λ°μνμ§ μμ΅λλ€.
4. νλ¬κ·ΈμΈ μν€ν μ²
νλ¬κ·ΈμΈ μν€ν μ²λ₯Ό κ°μ§ μ ν리μΌμ΄μ μ μ»΄ννΈλ¨ΌνΈλ‘λΆν° ν° μ΄μ μ μ»μ μ μμ΅λλ€. κ° νλ¬κ·ΈμΈμ μ체 μ»΄ννΈλ¨ΌνΈμμ μ€νλμ΄, μμλ νλ¬κ·ΈμΈμ΄ μ΄λν μ μλ νΌν΄λ₯Ό μ νν©λλ€. μ΄λ₯Ό ν΅ν΄ κΈ°λ₯ νμ₯μ λμ± κ²¬κ³ νκ³ μμ νκ² ν μ μμ΅λλ€.
μμ: λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨. λ§μ½ ν νμ₯ νλ‘κ·Έλ¨μ μ·¨μ½μ μ΄ μλ€λ©΄, μ»΄ννΈλ¨ΌνΈλ κ·Έκ²μ΄ λ€λ₯Έ νμ₯ νλ‘κ·Έλ¨μ΄λ λΈλΌμ°μ μ체μ λ°μ΄ν°μ μ κ·Όνλ κ²μ λ§μ΅λλ€.
νν© λ° κ΅¬ν체
μ»΄ννΈλ¨ΌνΈμ κ°λ μ κ½€ μ€λμ λΆν° μμμ§λ§, νμ€νλ ꡬνμ μμ§ λ°μ μ€μ λλ€. νμ¬ μν©μ λ€μκ³Ό κ°μ΅λλ€:
- SES (Secure EcmaScript): SESλ μμ ν μ ν리μΌμ΄μ ꡬμΆμ κΈ°λ°μ μ 곡νλ κ°νλ μλ°μ€ν¬λ¦½νΈ νκ²½μ λλ€. μ½λλ₯Ό 격리νκ³ κ³΅κ²©μ λ°©μ§νκΈ° μν΄ μ»΄ννΈλ¨ΌνΈμ λ€λ₯Έ 보μ κΈ°μ μ νμ©ν©λλ€. SESλ μ»΄ννΈλ¨ΌνΈ κ°λ°μ μν₯μ λ―Έμ³€μΌλ©° μ°Έμ‘° ꡬνμ μ 곡ν©λλ€.
- SpiderMonkey (λͺ¨μ§λΌμ μλ°μ€ν¬λ¦½νΈ μμ§): Firefoxμ μλ°μ€ν¬λ¦½νΈ μμ§μΈ SpiderMonkeyλ μμ¬μ μΌλ‘ μ»΄ννΈλ¨ΌνΈμ λν κ°λ ₯ν μ§μμ ν΄μμ΅λλ€. μ΄ μ§μμ Firefoxμ 보μ λͺ¨λΈμ λ§€μ° μ€μνμ΅λλ€.
- Node.js: Node.jsλ μμ ν λͺ¨λ 격리 λ° μμ‘΄μ± κ΄λ¦¬λ₯Ό μν΄ μ»΄ννΈλ¨ΌνΈμ μ μ¬ν κΈ°λ₯μ μ κ·Ήμ μΌλ‘ νμνκ³ κ΅¬ννκ³ μμ΅λλ€.
- Caja: Cajaλ μ 3μ HTML, CSS λ° μλ°μ€ν¬λ¦½νΈλ₯Ό μΉμ¬μ΄νΈμ μμ νκ² λ΄μ₯νκΈ° μν 보μ λꡬμ λλ€. κ°μ²΄-μλ(object-capability) 보μμ μ¬μ©νμ¬ HTML, CSS λ° μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μμ±νμ¬ λ€λ₯Έ μΆμ²μ μ½ν μΈ λ₯Ό μμ νκ² λ§€μμ ν μ μλλ‘ ν©λλ€.
κ³Όμ λ° κ³ λ €μ¬ν
μ»΄ννΈλ¨ΌνΈλ μμ ν μ½λ μ€νμ μν κ°λ ₯ν ν΄κ²°μ± μ μ 곡νμ§λ§, μΌλμ λμ΄μΌ ν λͺ κ°μ§ κ³Όμ μ κ³ λ €μ¬νλ μμ΅λλ€:
- μ±λ₯ μ€λ²ν€λ: μ»΄ννΈλ¨ΌνΈλ₯Ό μμ±νκ³ κ΄λ¦¬νλ κ²μ νΉν λ§μ μμ μ»΄ννΈλ¨ΌνΈλ₯Ό μμ±νκ±°λ μ»΄ννΈλ¨ΌνΈ κ°μ λ°μ΄ν°λ₯Ό μμ£Ό μ λ¬νλ κ²½μ° μΌλΆ μ±λ₯ μ€λ²ν€λλ₯Ό μ λ°ν μ μμ΅λλ€.
- 볡μ‘μ±: μ»΄ννΈλ¨ΌνΈλ₯Ό ꡬννλ κ²μ 볡μ‘ν μ μμΌλ©°, μλ°μ€ν¬λ¦½νΈμ μ€ν λͺ¨λΈκ³Ό 보μ μμΉμ λν κΉμ μ΄ν΄κ° νμν©λλ€.
- API μ€κ³: μ»΄ννΈλ¨ΌνΈμ μνΈ μμ©νκΈ° μν μμ νκ³ μ¬μ©νκΈ° μ¬μ΄ APIλ₯Ό μ€κ³νλ κ²μ μ΄λ €μΈ μ μμ΅λλ€. μ»΄ννΈλ¨ΌνΈμ μ΄λ€ κ°μ²΄μ ν¨μλ₯Ό λ ΈμΆν μ§, κ·Έλ¦¬κ³ μ»΄ννΈλ¨ΌνΈκ° κ²½κ³λ₯Ό λ²μ΄λλ κ²μ μ΄λ»κ² λ°©μ§ν μ§ μ μ€νκ² κ³ λ €ν΄μΌ ν©λλ€.
- νμ€ν: μμ ν νμ€νλκ³ λ리 μ±νλ μ»΄ννΈλ¨ΌνΈ APIλ μμ§ κ°λ° μ€μ λλ€. μ΄λ νΉμ ꡬν μΈλΆ μ¬νμ΄ μ¬μ© μ€μΈ μλ°μ€ν¬λ¦½νΈ μμ§μ λ°λΌ λ€λ₯Ό μ μμμ μλ―Έν©λλ€.
μ»΄ννΈλ¨ΌνΈ μ¬μ©μ μν λͺ¨λ² μ¬λ‘
μ»΄ννΈλ¨ΌνΈλ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©νκ³ λ³΄μμμ μ΄μ μ κ·Ήλννλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
- 곡격 νλ©΄ μ΅μν: μ»΄ννΈλ¨ΌνΈ λ΄ μ½λκ° μ¬λ°λ₯΄κ² μλνλ λ° νμν μ΅μνμ κ°μ²΄μ ν¨μλ§ λ ΈμΆνμμμ€.
- κ°μ²΄ μλ(Object Capabilities) μ¬μ©: μ½λλ μμ μ μννλ λ° νμν κ°μ²΄μ ν¨μμλ§ μ κ·Όν΄μΌ νλ€λ κ°μ²΄ μλ μμΉμ λ°λ₯΄μμμ€.
- μ λ ₯ λ° μΆλ ₯ κ²μ¦: μ½λ μ£Όμ 곡격 λ° κΈ°ν μ·¨μ½μ μ λ°©μ§νκΈ° μν΄ λͺ¨λ μ λ ₯ λ° μΆλ ₯ λ°μ΄ν°λ₯Ό μ μ€νκ² κ²μ¦νμμμ€.
- μ»΄ννΈλ¨ΌνΈ νλ λͺ¨λν°λ§: μμ¬μ€λ¬μ΄ νλμ νμ§νκΈ° μν΄ μ»΄ννΈλ¨ΌνΈ λ΄ νλμ λͺ¨λν°λ§νμμμ€.
- μ΅μ μν μ μ§: μ΅μ 보μ λͺ¨λ² μ¬λ‘ λ° μ»΄ννΈλ¨ΌνΈ ꡬνμ λν μ 보λ₯Ό μ΅μ μνλ‘ μ μ§νμμμ€.
κ²°λ‘
μλ°μ€ν¬λ¦½νΈ μ»΄ννΈλ¨ΌνΈλ μμ νκ³ κ²©λ¦¬λ μ½λ μ€νμ μν κ°λ ₯ν λ©μ»€λμ¦μ μ 곡ν©λλ€. μλλ°μ€ νκ²½μ μμ±ν¨μΌλ‘μ¨ μ»΄ννΈλ¨ΌνΈλ 보μμ κ°ννκ³ , μμ‘΄μ±μ κ΄λ¦¬νλ©°, 볡μ‘ν μ ν리μΌμ΄μ μμ κ΅μ°¨ μμ ν΅μ μ κ°λ₯νκ² ν©λλ€. μΌλμ λμ΄μΌ ν κ³Όμ μ κ³ λ €μ¬νμ΄ μμ§λ§, μ»΄ννΈλ¨ΌνΈλ κΈ°μ‘΄μ μλλ°μ± κΈ°μ μ λΉν΄ μλΉν κ°μ μ μ 곡νλ©° μμ νκ³ κ²¬κ³ ν μλ°μ€ν¬λ¦½νΈ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° νμμ μΈ λꡬμ λλ€. μ»΄ννΈλ¨ΌνΈμ νμ€νμ μ±νμ΄ κ³μ λ°μ ν¨μ λ°λΌ, μ΄λ€μ μλ°μ€ν¬λ¦½νΈ 보μμ λ―Έλμμ μ μ λ μ€μν μν μ ν κ²μ λλ€.
μΉ μ ν리μΌμ΄μ , μλ² μΈ‘ μ ν리μΌμ΄μ , λλ λΈλΌμ°μ νμ₯ νλ‘κ·Έλ¨μ ꡬμΆνλ , μ λ’°ν μ μλ μ½λλ‘λΆν° μ ν리μΌμ΄μ μ 보νΈνκ³ μ λ°μ μΈ λ³΄μμ κ°ννκΈ° μν΄ μ»΄ννΈλ¨ΌνΈ μ¬μ©μ κ³ λ €ν΄ λ³΄μμμ€. μ»΄ννΈλ¨ΌνΈλ₯Ό μ΄ν΄νλ κ²μ λͺ¨λ μλ°μ€ν¬λ¦½νΈ κ°λ°μ, νΉν 보μμ λ―Όκ°ν μꡬμ¬νμ΄ μλ νλ‘μ νΈμμ μμ νλ κ°λ°μμκ² μ μ λ μ€μν΄μ§κ³ μμ΅λλ€. μ΄ κΈ°μ μ μ±νν¨μΌλ‘μ¨, λμμμ΄ μ§ννλ μ¬μ΄λ² μν νκ²½μΌλ‘λΆν° λ μ 보νΈλλ, λ νλ ₯ μκ³ μμ ν μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€.