κ°λ ₯ν ν ν° κ²μ¦μΌλ‘ APIλ₯Ό μμ νκ² λ³΄νΈνμΈμ. λ€μν ν ν° μ ν, κ²μ¦ λ°©λ², λͺ¨λ² μ¬λ‘λ₯Ό ν΅ν΄ μ λ’°ν μ μλ API ꡬμΆλ²μ μμλ΄ λλ€.
API 보μ: ν ν° κ²μ¦μ λν μ’ ν© κ°μ΄λ
μ€λλ μνΈ μ°κ²°λ λμ§νΈ νκ²½μμ API(μ ν리μΌμ΄μ νλ‘κ·Έλλ° μΈν°νμ΄μ€)λ νλ μννΈμ¨μ΄ μμ€ν μ μ€μΆμ λλ€. APIλ μ ν리μΌμ΄μ , μλΉμ€, μ₯μΉ κ°μ μνν ν΅μ κ³Ό λ°μ΄ν° κ΅νμ κ°λ₯νκ² ν©λλ€. κ·Έλ¬λ μ΄λ¬ν μνΈ μ°κ²°μ±μ μ€λν 보μ μνμ μ΄λνκΈ°λ ν©λλ€. API 보μμ κ°μ₯ μ€μν μΈ‘λ©΄ μ€ νλλ ν ν° κ²μ¦μ λλ€. μ΄ κ°μ΄λλ ν ν° κ²μ¦μ λν ν¬κ΄μ μΈ κ°μλ₯Ό μ 곡νλ©°, λ€μν ν ν° μ ν, κ²μ¦ λ°©λ², API 보μμ μν λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄λ΄ λλ€.
ν ν° κ²μ¦μ΄λ 무μμΈκ°?
ν ν° κ²μ¦μ API μλν¬μΈνΈμ μ μλ ν ν°μ μ§μμ 무결μ±μ νμΈνλ κ³Όμ μ λλ€. ν ν°μ μ¬μ©μλ μ ν리μΌμ΄μ μ΄ νΉμ 리μμ€μ μ‘μΈμ€νκ±°λ νΉμ μμ μ μνν μ μλ κΆνμ λνλ΄λ λ°μ΄ν° μ‘°κ°μ λλ€. ν ν° κ²μ¦μ ν ν°μ΄ μ ν¨νκ³ , λ³μ‘°λμ§ μμμΌλ©°, λ§λ£λμ§ μμμμ 보μ₯ν©λλ€. μ΄λ λ¬΄λ¨ μ‘μΈμ€λ₯Ό λ°©μ§νκ³ λ―Όκ°ν λ°μ΄ν°λ₯Ό 보νΈνλ λ° μ€μν λ¨κ³μ λλ€.
물리μ μΈ μ΄μ λ₯Ό μκ°ν΄λ³΄μΈμ. μ§μ λ€μ΄κ°λ €κ³ ν λ, μλ¬Όμ μ μ΄μ λ₯Ό λ£μ΅λλ€. μλ¬Όμ (API μλν¬μΈνΈ)λ κ·Έ λ¬Έμ λ§λ μ¬λ°λ₯Έ μ΄μ (ν ν°)μΈμ§ νμΈν©λλ€. μ΄μ κ° μ ν¨νλ©΄ μ‘μΈμ€κ° νμ©λ©λλ€.
ν ν° κ²μ¦μ μ μ€μνκ°?
μ μ ν ν ν° κ²μ¦μ΄ μμΌλ©΄ APIλ λ€μκ³Ό κ°μ λ€μν 곡격μ μ·¨μ½ν΄μ§λλ€:
- λ¬΄λ¨ μ‘μΈμ€: 곡격μλ μ μ ν κΆν μμ΄ λ―Όκ°ν λ°μ΄ν° λ° λ¦¬μμ€μ μ‘μΈμ€ν μ μμ΅λλ€.
- λ°μ΄ν° μ μΆ: μμλ ν ν°μ λ°μ΄ν°λ₯Ό νμΉκ±°λ μμ νλ λ° μ¬μ©λ μ μμΌλ©°, μ΄λ μλΉν μ¬μ μ λ° νν μμμ μ΄λν μ μμ΅λλ€.
- κ³μ νμ·¨: 곡격μλ νμΉ ν ν°μ μ¬μ©νμ¬ ν©λ²μ μΈ μ¬μ©μλ₯Ό μ¬μΉνκ³ κ³μ μ μ΄κΆμ μ»μ μ μμ΅λλ€.
- μλΉμ€ κ±°λΆ(DoS): 곡격μλ μ ν¨νμ§ μμ ν ν°μΌλ‘ APIλ₯Ό νμ£ΌμμΌ μμ€ν μ μλνκ³ ν©λ²μ μΈ μ¬μ©μκ° μ΄μ©ν μ μκ² λ§λ€ μ μμ΅λλ€.
μΌλ°μ μΈ ν ν° μ ν
API 보μμλ μ¬λ¬ μ νμ ν ν°μ΄ μΌλ°μ μΌλ‘ μ¬μ©λ©λλ€. ν¨κ³Όμ μΈ κ²μ¦ μ λ΅μ ꡬννλ €λ©΄ κ·Έ νΉμ±μ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€.
1. JSON μΉ ν ν°(JWT)
JWTλ μ‘μΈμ€ ν ν°μ μμ±νλ λ° λ리 μ¬μ©λλ νμ€μ λλ€. JWTλ μ체 ν¬ν¨μ (self-contained)μ΄λ©°, μ΄λ μ§μμ 무결μ±μ νμΈνλ λ° νμν λͺ¨λ μ 보λ₯Ό λ΄κ³ μμμ μλ―Έν©λλ€. JWTλ μΈ λΆλΆμΌλ‘ ꡬμ±λ©λλ€:
- ν€λ: ν ν° μ ν λ° μ¬μ©λ μλͺ μκ³ λ¦¬μ¦μ λν μ 보λ₯Ό ν¬ν¨ν©λλ€.
- νμ΄λ‘λ: μ¬μ©μμ μ μ, μν , κΆνκ³Ό κ°μ μ¬μ©μ λλ μ ν리μΌμ΄μ μ λν μ€λͺ μΈ ν΄λ μ(claims)μ ν¬ν¨ν©λλ€.
- μλͺ : ν ν°μ μ§μμ 무결μ±μ νμΈνλ λ° μ¬μ©λλ μνΈν μλͺ μ λλ€.
μμ: λͺ¨λ°μΌ λ± νΉ μ ν리μΌμ΄μ μ μ¬μ©λλ JWTλ μ¬μ©μμ κ³μ’ λ²νΈ, κ±°λ νλ, μΈμ¦ μμ€μ λν ν΄λ μμ ν¬ν¨ν μ μμ΅λλ€.
2. OAuth 2.0 μ‘μΈμ€ ν ν°
OAuth 2.0μ μ 3μ μ ν리μΌμ΄μ μ΄ μ¬μ©μλ₯Ό λμ νμ¬ λ¦¬μμ€μ μ‘μΈμ€ν μ μλλ‘ νλ μΈκ° νλ μμν¬μ λλ€. μ‘μΈμ€ ν ν°μ νΉμ 리μμ€μ λν μ νλ μ‘μΈμ€λ₯Ό λΆμ¬νλ λ° μ¬μ©λ©λλ€. JWTμ λ¬λ¦¬ μ‘μΈμ€ ν ν°μ μΌλ°μ μΌλ‘ μ¬μ©μμ λν μ 보λ₯Ό ν¬ν¨νμ§ μμΌλ©°, λμ μΈκ° μλ²μ μ μ₯λ μΈκ° μ 보μ λν μ°Έμ‘° μν μ ν©λλ€.
μμ: μμ λ―Έλμ΄ μ±μ΄ μ£Όμλ‘μ μ‘μΈμ€νλλ‘ νμ©νλ©΄, ν΄λΉ μ±μ μ£Όμλ‘ λͺ©λ‘μ κ²μν μ μλ κΆνμ λΆμ¬νλ OAuth 2.0 μ‘μΈμ€ ν ν°μ λ°μ΅λλ€.
3. API ν€
API ν€λ API μμ²μ νλ μ ν리μΌμ΄μ μ΄λ μ¬μ©μλ₯Ό μλ³νλ κ°λ¨ν μμ«μ λ¬Έμμ΄μ λλ€. ꡬννκΈ°λ μ½μ§λ§, API ν€λ ν΄λΌμ΄μΈνΈ μΈ‘ μ½λμ ν¬ν¨λκ±°λ μΌλ° ν μ€νΈλ‘ μ μ₯λλ κ²½μ°κ° λ§μ JWTλ OAuth 2.0 μ‘μΈμ€ ν ν°λ³΄λ€ 보μμ±μ΄ λ¨μ΄μ§λλ€. API ν€λ κΈ°λ°λ‘ μ·¨κΈνκ³ μ κΈ°μ μΌλ‘ κ΅μ²΄ν΄μΌ ν©λλ€.
μμ: λ§μ λ μ¨ APIλ μ¬μ©λμ μΆμ νκ³ μμ²λ₯ μ νμ μ μ©νκΈ° μν΄ API ν€λ₯Ό μ¬μ©ν©λλ€.
4. μΈμ ν ν°
μΈμ ν ν°μ μλ² μΈ‘ μΉ μ ν리μΌμ΄μ μμ μ¬μ©μ μΈμ μ μ μ§νλ λ° μ¬μ©λ©λλ€. μΌλ°μ μΌλ‘ ν΄λΌμ΄μΈνΈ λΈλΌμ°μ μ μΏ ν€μ μ μ₯λλ©° νμ μμ²μμ μ¬μ©μλ₯Ό μλ³νλ λ° μ¬μ©λ©λλ€. μμ API μλ리μ€μμλ λ μΌλ°μ μ΄μ§λ§, μΈμ μ μ¬μ©νλ μΉ μ ν리μΌμ΄μ μμ μ‘μΈμ€νλ APIμ μ¬μ©λ μ μμ΅λλ€.
ν ν° κ²μ¦ λ°©λ²
ꡬ체μ μΈ κ²μ¦ λ°©λ²μ ν ν° μ νκ³Ό APIμ 보μ μꡬ μ¬νμ λ°λΌ λ€λ¦ λλ€. λ€μμ μΌλ°μ μΈ κ²μ¦ λ°©λ²μ λλ€:
1. JWT κ²μ¦
JWTλ₯Ό κ²μ¦νλ λ°λ μ¬λ¬ λ¨κ³κ° ν¬ν¨λ©λλ€:
- μλͺ νμΈ: μλͺ κΈ°κ΄μ κ³΅κ° ν€λ₯Ό μ¬μ©νμ¬ μλͺ μ΄ μ ν¨νμ§ νμΈν©λλ€. μ΄λ ν ν°μ΄ λ³μ‘°λμ§ μμμμ 보μ₯ν©λλ€.
- λ°κΈμ(Issuer) κ²μ¦: ν ν°μ λ°κΈμκ° μ λ’°ν μ μλμ§ νμΈν©λλ€. μ΄λ ν ν°μ΄ ν©λ²μ μΈ μΆμ²μμ λ°κΈλμμμ 보μ₯ν©λλ€.
- μμ μ(Audience) κ²μ¦: ν ν°μ΄ νμ¬ APIλ₯Ό λμμΌλ‘ νλμ§ νμΈν©λλ€. μ΄λ ν ν°μ΄ λ€λ₯Έ APIμμ μ¬μ©λλ κ²μ λ°©μ§ν©λλ€.
- λ§λ£ μκ° κ²μ¦: ν ν°μ΄ λ§λ£λμ§ μμλμ§ νμΈν©λλ€. μ΄λ μ ν¨ κΈ°κ°μ΄ μ§λ ν ν°μ΄ μ¬μ©λλ κ²μ λ°©μ§ν©λλ€.
- ν΄λ μ κ²μ¦: ν ν°μ ν΄λ μμ΄ μ ν¨νμ§ νμΈν©λλ€. μ΄λ μ¬μ©μλ μ ν리μΌμ΄μ μ΄ μμ²λ 리μμ€μ μ‘μΈμ€νλ λ° νμν κΆνμ κ°μ§κ³ μλμ§ λ³΄μ₯ν©λλ€. μμλ‘λ μ¬μ©μ μν , λ²μ(scopes) λλ νΉμ 리μμ€ ID κ²μ¦μ΄ μμ΅λλ€.
μμ: κΈμ΅ APIλ JWTλ₯Ό κ²μ¦νμ¬ μ¬μ©μκ° 'transaction:execute' λ²μλ₯Ό κ°μ§κ³ μκ³ ν ν°μ΄ μνμ ID 곡κΈμμ μν΄ λ°κΈλμλμ§ νμΈν μ μμ΅λλ€.
2. OAuth 2.0 μ‘μΈμ€ ν ν° κ²μ¦
OAuth 2.0 μ‘μΈμ€ ν ν°μ κ²μ¦νλ κ²μ μΌλ°μ μΌλ‘ μΈκ° μλ²μ μ°λ½νμ¬ ν ν°μ μ ν¨μ±μ νμΈνλ κ²μ ν¬ν¨ν©λλ€. μ΄λ λ€μ λ°©λ² μ€ νλλ₯Ό μ¬μ©νμ¬ μνν μ μμ΅λλ€:
- ν ν° μΈνΈλ‘μ€νμ (Token Introspection): API μλ²κ° μ‘μΈμ€ ν ν°μ μΈκ° μλ²λ‘ 보λ΄λ©΄, μΈκ° μλ²λ ν ν°μ μ ν¨μ±, λ²μ, κ΄λ ¨ μ¬μ©μ λ± ν ν°μ λν μ 보λ₯Ό λ°νν©λλ€.
- ν ν° νκΈ°(Token Revocation): ν ν°μ΄ μμλ κ²½μ°, μΈκ° μλ²μμ νκΈ°νμ¬ λ μ΄μ μ¬μ©λμ§ μλλ‘ ν μ μμ΅λλ€.
- 곡μ λΉλ° ν€ μ¬μ©: APIμ μΈκ° μλ²κ° λΉλ° ν€λ₯Ό 곡μ νλ κ²½μ°(μ΄μ νκ²½μμλ κΆμ₯λμ§ μμ), APIλ ν ν°μ λ‘컬μμ ν΄λ νμ¬ κ²μ¦ν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ APIκ° κ³΅μ λΉλ° ν€μ μ‘μΈμ€ν΄μΌ νλ―λ‘ ν ν° μΈνΈλ‘μ€νμ λ³΄λ€ λ³΄μμ±μ΄ λ¨μ΄μ§λλ€.
μμ: μ μ μκ±°λ APIλ μ¬μ©μκ° μ£Όλ¬Έμ νκΈ° μ μ μ‘μΈμ€ ν ν°μ΄ 'order:create' λ²μλ₯Ό κ°μ§κ³ μλμ§ νμΈνκΈ° μν΄ ν ν° μΈνΈλ‘μ€νμ μ μ¬μ©ν μ μμ΅λλ€.
3. API ν€ κ²μ¦
API ν€ κ²μ¦μ μΌλ°μ μΌλ‘ λ°μ΄ν°λ² μ΄μ€λ κ΅¬μ± νμΌμ μ μ₯λ μ ν¨ν ν€ λͺ©λ‘κ³Ό API ν€λ₯Ό λμ‘°νλ μμ μ ν¬ν¨ν©λλ€. λ¨μ©μ λ°©μ§νκΈ° μν΄ μμ²λ₯ μ ν λ° κΈ°ν 보μ μ‘°μΉλ₯Ό ꡬννλ κ²μ΄ νμμ μ λλ€. API ν€λ λΉλ°λ‘ μ·¨κΈνκ³ μ κΈ°μ μΌλ‘ κ΅μ²΄ν΄μΌ ν©λλ€.
μμ: μ§λ APIλ μ¬μ©μκ° μ§λ λ°μ΄ν°μ μ‘μΈμ€ν κΆνμ΄ μλμ§ νμΈνκ³ μμ²λ₯ μ νμ μ μ©νκΈ° μν΄ API ν€λ₯Ό κ²μ¦ν μ μμ΅λλ€.
4. μΈμ ν ν° κ²μ¦
μΈμ ν ν° κ²μ¦μ μΌλ°μ μΌλ‘ μΈμ μ μ₯μ(μ: λ°μ΄ν°λ² μ΄μ€ λλ μΈλ©λͺ¨λ¦¬ μΊμ)μ λν΄ μΈμ ν ν°μ νμΈνμ¬ μΈμ μ΄ μ¬μ ν νμ± μνμ΄κ³ μ¬μ©μκ° μΈμ¦λμλμ§ νμΈνλ μμ μ ν¬ν¨ν©λλ€. μ΄λ μ’ μ’ μΉ μ ν리μΌμ΄μ νλ μμν¬μμ μ²λ¦¬λ©λλ€.
ν ν° κ²μ¦μ μν λͺ¨λ² μ¬λ‘
κ°λ ₯ν ν ν° κ²μ¦μ ꡬννλ κ²μ API 보μμ νμμ μ λλ€. λ°λΌμΌ ν λͺ κ°μ§ λͺ¨λ² μ¬λ‘λ λ€μκ³Ό κ°μ΅λλ€:
1. κ°λ ₯ν μνΈν μ¬μ©
ν ν°μ μλͺ νκ³ μνΈννλ λ° κ°λ ₯ν μνΈν μκ³ λ¦¬μ¦μ μ¬μ©νμμμ€. JWTμ κ²½μ° RS256 λλ ES256κ³Ό κ°μ μκ³ λ¦¬μ¦μ μ¬μ©νμμμ€. 곡격μ μ·¨μ½ν HS256κ³Ό κ°μ΄ μ½νκ±°λ λ μ΄μ μ¬μ©λμ§ μλ μκ³ λ¦¬μ¦μ νΌνμμμ€.
2. ν ν° λ§λ£ ꡬν
ν ν°μ ν©λ¦¬μ μΈ λ§λ£ μκ°μ μ€μ νμμμ€. μ΄λ 곡격μκ° μμλ ν ν°μ μ¬μ©ν μ μλ κΈ°νμ μ°½μ μ νν©λλ€. μλͺ μ΄ μ§§μ ν ν°μ΄ λ μμ νμ§λ§, λ μ¦μ ν ν° κ°±μ μ΄ νμν μ μμ΅λλ€.
3. 리νλ μ ν ν° μ¬μ©
μ¬μ©μκ° λ€μ μΈμ¦ν νμ μμ΄ μλ‘μ΄ μ‘μΈμ€ ν ν°μ μ»κΈ° μν΄ λ¦¬νλ μ ν ν°μ μ¬μ©νμμμ€. 리νλ μ ν ν°μ μ‘μΈμ€ ν ν°λ³΄λ€ λ§λ£ μκ°μ΄ κΈΈμ΄μΌ νλ©° μμ νκ² μ μ₯λμ΄μΌ ν©λλ€. 리νλ μ ν ν° λλ μνμ μννκΈ° μν΄ μ μ ν 리νλ μ ν ν° μνμ ꡬννμμμ€.
4. ν ν°μ μμ νκ² μ μ₯
ν΄λΌμ΄μΈνΈμ μλ² μμͺ½μμ ν ν°μ μμ νκ² μ μ₯νμμμ€. ν΄λΌμ΄μΈνΈ μΈ‘μμλ λ‘컬 μ€ν 리μ§λ μΏ ν€μ ν ν°μ μ μ₯νλ κ²μ νΌνμμμ€. μ΄λ€μ κ΅μ°¨ μ¬μ΄νΈ μ€ν¬λ¦½ν (XSS) 곡격μ μ·¨μ½ν©λλ€. λΈλΌμ°μ μ IndexedDBλ μ΄μ 체μ μ ν€μ²΄μΈκ³Ό κ°μ 보μ μ μ₯ λ©μ»€λμ¦μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€. μλ² μΈ‘μμλ μνΈν λ° μ κ·Ό μ μ΄ μ‘°μΉλ₯Ό μ¬μ©νμ¬ μ μ₯λ ν ν°(at rest)μ 보νΈνμμμ€.
5. λͺ¨λ ν΄λ μ κ²μ¦
λ°κΈμ, μμ μ, λ§λ£ μκ° λ° λͺ¨λ μ¬μ©μ μ§μ ν΄λ μμ ν¬ν¨ν ν ν°μ λͺ¨λ ν΄λ μμ κ²μ¦νμμμ€. μ΄λ ν ν°μ΄ μ ν¨νκ³ μ¬μ©μλ μ ν리μΌμ΄μ μ΄ μμ²λ 리μμ€μ μ‘μΈμ€νλ λ° νμν κΆνμ κ°μ§κ³ μμμ 보μ₯ν©λλ€.
6. μμ²λ₯ μ ν ꡬν
λ¨μ© λ° μλΉμ€ κ±°λΆ κ³΅κ²©μ λ°©μ§νκΈ° μν΄ μμ²λ₯ μ νμ ꡬννμμμ€. μ΄λ μ¬μ©μλ μ ν리μΌμ΄μ μ΄ νΉμ μκ° λ΄μ ν μ μλ μμ² μλ₯Ό μ νν©λλ€.
7. ν ν° μ¬μ© λͺ¨λν°λ§ λ° λ‘κΉ
μμ¬μ€λ¬μ΄ νλμ κ°μ§νκΈ° μν΄ ν ν° μ¬μ©μ λͺ¨λν°λ§νκ³ κΈ°λ‘νμμμ€. μ΄λ₯Ό ν΅ν΄ 곡격μ μ€μκ°μΌλ‘ μλ³νκ³ λμνλ λ° λμμ΄ λ μ μμ΅λλ€. ν ν° λ°κΈ, κ²μ¦, νκΈ°μ κ°μ μ€μν μ΄λ²€νΈλ₯Ό κΈ°λ‘νμμμ€. λΉμ μμ μΈ ν ν° μ¬μ© ν¨ν΄μ λν κ²½κ³ λ₯Ό μ€μ νμμμ€.
8. μ κΈ°μ μΌλ‘ ν€ κ΅μ²΄
ν€ μμ μνμ μννκΈ° μν΄ μ κΈ°μ μΌλ‘ μνΈν ν€λ₯Ό κ΅μ²΄νμμμ€. μ΄λ μ ν€λ₯Ό μμ±νκ³ μ μ ν λΉμ¬μμκ² λ°°ν¬νλ κ²μ ν¬ν¨ν©λλ€. λ€μ΄νμμ μ΅μννκ³ μΈμ μ€λ₯μ μνμ μ€μ΄κΈ° μν΄ ν€ κ΅μ²΄ νλ‘μΈμ€λ₯Ό μλννμμμ€.
9. HTTPS μ¬μ©
ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ μ μνΈννκΈ° μν΄ νμ HTTPSλ₯Ό μ¬μ©νμμμ€. μ΄λ ν ν°μ΄ 곡격μμ μν΄ κ°λ‘μ±μ΄λ κ²μ λ°©μ§ν©λλ€.
10. μ λ ₯ κ° μ΄κ· (Sanitize)
μΈμ μ 곡격μ λ°©μ§νκΈ° μν΄ λͺ¨λ μ λ ₯ κ°μ μ΄κ· νμμμ€. μ¬κΈ°μλ ν΄λΌμ΄μΈνΈλ‘λΆν° λ°μ ν ν° λ° κΈ°ν λ°μ΄ν°μ νμκ³Ό λ΄μ©μ κ²μ¦νλ κ²μ΄ ν¬ν¨λ©λλ€.
11. μ΅μ κΆν μμΉ μ€μ
μ¬μ©μμ μ ν리μΌμ΄μ μ νμν κΆνλ§ λΆμ¬νμμμ€. μ΄λ μμλ ν ν°μΌλ‘ μΈν΄ λ°μν μ μλ μ μ¬μ νΌν΄λ₯Ό μ νν©λλ€. μΈλΆνλ λ²μ(scopes)λ μν μ μ¬μ©νμ¬ νΉμ 리μμ€ λ° μμ μ λν μ‘μΈμ€λ₯Ό μ μ΄νμμμ€.
12. μ΅μ μ 보 μ μ§
μ΅μ 보μ μν λ° μ·¨μ½μ μ λν μ 보λ₯Ό μ΅μ μνλ‘ μ μ§νμμμ€. μ¬κΈ°μλ 보μ λ©μΌλ§ 리μ€νΈ ꡬλ , 보μ λΈλ‘κ·Έ μ½κΈ°, 보μ 컨νΌλ°μ€ μ°Έμμ΄ ν¬ν¨λ©λλ€. μλ €μ§ μ·¨μ½μ μ ν¨μΉνκΈ° μν΄ μννΈμ¨μ΄μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ κΈ°μ μΌλ‘ μ λ°μ΄νΈνμμμ€.
λ€μν νκ²½μμμ ν ν° κ²μ¦
ν ν° κ²μ¦μ λ€μκ³Ό κ°μ λ€μν νκ²½μμ ꡬνλ μ μμ΅λλ€:
- λ°±μλ API: 리μμ€μ λν μ‘μΈμ€λ₯Ό νμ©νκΈ° μ μ μλ² μΈ‘μμ ν ν°μ κ²μ¦ν©λλ€.
- λͺ¨λ°μΌ μ±: λ°μ΄ν° λ° κΈ°λ₯μ λν λ¬΄λ¨ μ‘μΈμ€λ₯Ό λ°©μ§νκΈ° μν΄ ν΄λΌμ΄μΈνΈ μΈ‘μμ ν ν°μ κ²μ¦ν©λλ€. κ·Έλ¬λ νμ λ°±μλ κ²μ¦λ μνν΄μΌ ν©λλ€.
- μΉ μ ν리μΌμ΄μ : μ¬μ©μ μΈμ κ³Ό λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄ μλ² μΈ‘μμ ν ν°μ κ²μ¦ν©λλ€.
- λ§μ΄ν¬λ‘μλΉμ€: κ²μ΄νΈμ¨μ΄ λλ κ° λ§μ΄ν¬λ‘μλΉμ€ λ΄μμ ν ν°μ κ²μ¦νμ¬ λ³΄μ μ μ± μ μνν©λλ€.
μ€μ μ¬λ‘
λ€μμ ν ν° κ²μ¦μ΄ API 보μμ μ΄λ»κ² μ¬μ©λλμ§μ λν μ€μ μ¬λ‘μ λλ€:
- κΈμ΅ κΈ°κ΄: μνμ APIλ₯Ό 보νΈνκΈ° μν΄ ν ν° κ²μ¦μ μ¬μ©νμ¬ κ³ κ° κ³μ λ° κΈμ΅ λ°μ΄ν°μ λν λ¬΄λ¨ μ‘μΈμ€λ₯Ό λ°©μ§ν©λλ€. μλ₯Ό λ€μ΄, μνμ μ¬μ©μλ₯Ό μΈμ¦νκ³ κ±°λλ₯Ό μΉμΈνκΈ° μν΄ JWTλ₯Ό μ¬μ©ν μ μμ΅λλ€. λν μ 3μ κΈμ΅ μ ν리μΌμ΄μ μ΄ κ³ κ°μ λμ νμ κ³ κ° λ°μ΄ν°μ μ‘μΈμ€ν μ μλλ‘ OAuth 2.0μ μ¬μ©ν μ μμ΅λλ€.
- μμ λ―Έλμ΄ νλ«νΌ: μμ λ―Έλμ΄ νλ«νΌμ APIλ₯Ό 보νΈνκΈ° μν΄ ν ν° κ²μ¦μ μ¬μ©νμ¬ μ¬μ©μ νλ‘ν, κ²μλ¬Ό λ° κΈ°ν λ°μ΄ν°μ λν λ¬΄λ¨ μ‘μΈμ€λ₯Ό λ°©μ§ν©λλ€. OAuth 2.0μ μ 3μ μ ν리μΌμ΄μ μ΄ μ¬μ©μλ₯Ό λμ νμ¬ μ¬μ©μ λ°μ΄ν°μ μ‘μΈμ€ν μ μλλ‘ νλ λ° μΌλ°μ μΌλ‘ μ¬μ©λ©λλ€.
- μ μμκ±°λ νμ¬: μ μμκ±°λ νμ¬λ APIλ₯Ό 보νΈνκΈ° μν΄ ν ν° κ²μ¦μ μ¬μ©νμ¬ κ³ κ° μ£Όλ¬Έ, κ²°μ μ 보 λ° κΈ°ν λ°μ΄ν°μ λν λ¬΄λ¨ μ‘μΈμ€λ₯Ό λ°©μ§ν©λλ€. JWTλ μ¬μ©μλ₯Ό μΈμ¦νκ³ κ΅¬λ§€λ₯Ό μΉμΈνλ λ° μ¬μ©λ μ μμ΅λλ€.
- μλ£ μλΉμ€ μ 곡μ: μλ£ μλΉμ€ μ 곡μλ APIλ₯Ό 보νΈνκΈ° μν΄ ν ν° κ²μ¦μ μ¬μ©νμ¬ νμ λ°μ΄ν°λ₯Ό 보νΈνκ³ HIPAAμ κ°μ κ·μ μ μ€μν©λλ€. κ·Έλ€μ νμκ° μ 3μ μ ν리μΌμ΄μ μ ν΅ν΄ μμ μ μλ£ κΈ°λ‘μ μ‘μΈμ€ν μ μλλ‘ OAuth 2.0μ μ¬μ©ν μ μμ΅λλ€.
λꡬ λ° κΈ°μ
μ¬λ¬ λꡬμ κΈ°μ μ΄ ν ν° κ²μ¦ ꡬνμ λμμ΄ λ μ μμ΅λλ€:
- JWT λΌμ΄λΈλ¬λ¦¬: `jsonwebtoken`(Node.js), `PyJWT`(Python), `java-jwt`(Java)μ κ°μ λΌμ΄λΈλ¬λ¦¬λ JWTλ₯Ό μμ±, μλͺ , κ²μ¦νλ κΈ°λ₯μ μ 곡ν©λλ€.
- OAuth 2.0 λΌμ΄λΈλ¬λ¦¬: `oauth2orize`(Node.js), `OAuthLib`(Python), `Spring Security OAuth`(Java)μ κ°μ λΌμ΄λΈλ¬λ¦¬λ OAuth 2.0 μΈκ° μλ² λ° ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ ꡬνμ μ§μν©λλ€.
- API κ²μ΄νΈμ¨μ΄: Kong, Apigee, AWS API Gatewayμ κ°μ API κ²μ΄νΈμ¨μ΄λ ν ν° κ²μ¦ λ° κΈ°ν 보μ κΈ°λ₯μ λν λ΄μ₯ μ§μμ μ 곡ν©λλ€.
- ID 곡κΈμ: Okta, Auth0, Azure Active Directoryμ κ°μ ID 곡κΈμλ ν ν° λ°κΈ λ° κ²μ¦μ ν¬ν¨ν ν¬κ΄μ μΈ ID λ° μ‘μΈμ€ κ΄λ¦¬ μ루μ μ μ 곡ν©λλ€.
κ²°λ‘
ν ν° κ²μ¦μ API 보μμ ν΅μ¬ κ΅¬μ± μμμ λλ€. κ°λ ₯ν ν ν° κ²μ¦ λ©μ»€λμ¦μ ꡬννκ³ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ λ¬΄λ¨ μ‘μΈμ€, λ°μ΄ν° μ μΆ λ° κΈ°ν 보μ μνμ μνμ ν¬κ² μ€μΌ μ μμ΅λλ€. νΉμ μꡬμ λ§λ μ¬λ°λ₯Έ ν ν° μ νκ³Ό κ²μ¦ λ°©λ²μ μ ννκ³ , κ°λ ₯ν μνΈν, μμ ν μ μ₯μ λ° ν¬κ΄μ μΈ λͺ¨λν°λ§μΌλ‘ APIλ₯Ό 보νΈνμμμ€.
보μμ μ§μμ μΈ κ³Όμ μμ κΈ°μ΅νμμμ€. μ κΈ°μ μΌλ‘ 보μ κ΄νμ κ²ν νκ³ , μ΅μ μν λ° μ·¨μ½μ μ λν μ 보λ₯Ό μ΅μ μνλ‘ μ μ§νλ©°, νμμ λ°λΌ 보μ μ‘°μΉλ₯Ό μ‘°μ νμμμ€. 보μμ μ°μ μν¨μΌλ‘μ¨ μ λ’°ν μ μκ³ μμ ν APIλ₯Ό ꡬμΆν μ μμ΅λλ€.