<aside>
</aside>
μ! λλμ΄ λλ§μ 6λΆ: μΈμ¦ λ° λ³΄μ κ°μμ 첫 μκ°, 27κ°μ λλ€! π μ¬λ¬λΆ, μ λ§ μ€μν ννΈκΉμ§ μ μ€μ ¨μ΄μ!
μ§λ 5λΆμμλ SQLAlchemyμ Alembicμ μ¬μ©νμ¬ μ°λ¦¬ ToDo APIμ λ°μ΄ν°λ² μ΄μ€ μ°λ λ° λ§μ΄κ·Έλ μ΄μ κΈ°λ₯μ μΆκ°νμ΅λλ€. μ΄μ λ°μ΄ν°λ μꡬμ μΌλ‘ μ μ₯λμ£ ! π
νμ§λ§ μ§κΈ μ°λ¦¬ APIμλ μμ£Ό ν° λ¬Έμ κ° λ¨μμμ΅λλ€. λ°λ‘ μ무λ λ€μ΄μμ λͺ¨λ ν μΌμ λ³΄κ³ , μμ νκ³ , μμ ν μ μλ€λ μ μ λλ€! λ§μΉ λ¬Έμ΄ νμ§ μ΄λ €μλ μ§κ³Ό κ°μμ. π μ€μ μλΉμ€μμλ μ¬μ©μλ₯Ό μλ³νκ³ , νκ°λ μ¬λλ§ νΉμ μμ μ μνν μ μλλ‘ λ³΄μ μ₯μΉλ₯Ό λ§λ ¨νλ κ²μ΄ νμμ μ λλ€.
μ΄λ² 6λΆμμλ λ°λ‘ μ΄ **μΈμ¦(Authentication)**κ³Ό μΈκ°(Authorization) κΈ°λ₯μ μ°λ¦¬ ToDo APIμ ꡬννλ λ°©λ²μ λ°°μλλ€. λκ° APIλ₯Ό μ¬μ©νλμ§ νμΈνκ³ (μΈμ¦), κ·Έ μ¬μ©μκ° νΉμ μμ μ ν κΆνμ΄ μλμ§ κ²μ¬νλ(μΈκ°) κ³Όμ μ ꡬννμ¬ APIλ₯Ό μμ νκ² λ³΄νΈν κ²μ λλ€.
κ·Έ 첫 λ¨κ³μΈ μ΄λ² 27κ°μμλ μΈμ¦κ³Ό μΈκ°μ κΈ°λ³Έ κ°λ μ λͺ νν μ΄ν΄νκ³ , μ°λ¦¬κ° μ¬μ©ν νλμ μΈ μΉ μΈμ¦ νμ€μΈ OAuth2μ **JWT(JSON Web Token)**μ λν΄ μμ보며 μμΌλ‘ μ§νλ 보μ κΈ°λ₯ ꡬνμ ν° κ·Έλ¦Όμ κ·Έλ €λ³΄κ² μ΅λλ€. 보μμ κΈ°μ΄λ₯Ό ννν λ€μ Έλ΄ μλ€! πͺ
μ΄λ² 27κ°μ 6λΆ 'μΈμ¦ λ° λ³΄μ'μ μμμΌλ‘, μΉ μ ν리μΌμ΄μ 보μμ κ°μ₯ κΈ°λ³Έμ μΈ λ κΈ°λ₯μΈ **μΈμ¦(Authentication)**κ³Ό **μΈκ°(Authorization)**μ κ°λ μ λͺ νν ꡬλΆνκ³ μ΄ν΄νλ λ° μ€μ μ λ‘λλ€. "λΉμ μ λꡬμ κ°μ?"λ₯Ό 묻λ μΈμ¦κ³Ό "μ΄ μμ μ ν κΆνμ΄ μλμ?"λ₯Ό 묻λ μΈκ°μ μ°¨μ΄λ₯Ό μμλ΄ λλ€.
λ€μμΌλ‘, νλμ μΈ μΉ API μΈμ¦μμ λ리 μ¬μ©λλ νμ€ νλ μμν¬μΈ OAuth2μ κΈ°λ³Έ κ°λ κ³Ό μν μ μκ°νκ³ , μ°λ¦¬κ° μ΄λ² νλ‘μ νΈμμ μ¬μ©μ λ‘κ·ΈμΈ λ° ν ν° λ°κΈμ μν΄ μ¬μ©ν OAuth2 μνΈ(Password) κ·ΈλνΈ νμ νλ¦μ λν΄ κ°λ΅ν μ΄ν΄λ΄ λλ€.
λν, μΈμ¦ μνλ₯Ό μ μ§νκ³ API μμ² μ μ¬μ©μλ₯Ό μλ³νλ λ° μ¬μ©ν **JWT(JSON Web Token)**μ ꡬ쑰μ νΉμ§(νΉν Stateless νΉμ±)μ μμλ΄ λλ€.
λ§μ§λ§μΌλ‘, FastAPIκ° μ΄λ¬ν νμ€ λ³΄μ ν¨ν΄ ꡬνμ λκΈ° μν΄ μ 곡νλ 보μ μ νΈλ¦¬ν°λ€(OAuth2PasswordBearer
λ±)μ κ°λ΅ν μκ°νκ³ , μμΌλ‘ μ΄μ΄μ§ κ°μλ€(μ¬μ©μ λ±λ‘, λ‘κ·ΈμΈ κ΅¬ν, κ²½λ‘ λ³΄νΈ λ±)μ ꡬν λ‘λλ§΅μ μ μνμ¬ μ 체μ μΈ λ³΄μ κΈ°λ₯ κ°λ° νλ¦μ νμ
ν μ μλλ‘ ν©λλ€.
μ΄ κ°μλ₯Ό λ§μΉλ©΄ μ¬λ¬λΆμ λ€μμ ν μ μκ² λ©λλ€:
OAuth2PasswordBearer
λ±)μ μ‘΄μ¬μ λͺ©μ μ μ΄ν΄ν©λλ€.