AI κ°λ°μ λ°λΉκ³Ό μ€ννΈλ: βνΌμ μ½λ©βμμ βνμ²λΌ μΌνλ AIβλ‘
AI κ°λ°μ λ°λΉκ³Ό μ€ννΈλ: βνΌμ μ½λ©βμμ βνμ²λΌ μΌνλ AIβλ‘ μμ¦ κ°λ° νμ₯μμλ βAIκ° μ½λ μ‘°κ°μ μ μνλ μμ€βμ λμ΄...
AI κ°λ°μ λ°λΉκ³Ό μ€ννΈλ: βνΌμ μ½λ©βμμ βνμ²λΌ μΌνλ AIβλ‘
μμ¦ κ°λ° νμ₯μμλ βAIκ° μ½λ μ‘°κ°μ μ μνλ μμ€βμ λμ΄, μμ μ λ§‘κΈ°κ³ κ²°κ³Όλ₯Ό κ²ν νλ λ°©μμΌλ‘ νλ¦μ΄ λ°λκ³ μμ΅λλ€. κ·Έ μ€μ¬μ μμ£Ό μΈκΈλλ λ μΆμ΄ μμ΄μ. νλλ AI κ°λ°μ λ°λΉ(Devin) κ°μ μμ΄μ νΈν μ½λ© AI, λ€λ₯Έ νλλ μ€ννΈλ(OpenHands)μ²λΌ κ°λ° μμ μ μ€μ λ‘ μννλλ‘ λλ μ€νμμ€ κΈ°λ° λꡬ/νλ μμν¬ κ³μ΄μ λλ€. λ λ€ βκ°λ°βμ λ λΉ λ₯΄κ² λ§λλ κ³΅ν΅ λͺ©νκ° μμ§λ§, μ κ·Ό λ°©μκ³Ό μ΄μ κ°κ°μ΄ κ½€ λ€λ¦ λλ€.
νλμ 보λ ν΅μ¬ μ°¨μ΄
λ°λΉ: μμ μ βμ§μ μνβνλ μμ΄μ νΈ κ²½ν
πΉ λͺ©ν: μ΄μλ₯Ό μ£Όλ©΄ κ³νμ μΈμ°κ³ μ½λλ₯Ό λ§λ€κ³ ν μ€νΈ/μμ κΉμ§ μ΄μ΄κ°λ λλ¨ μ§ν₯ πΉ κ°μ : βν μΌβ λ¨μλ‘ λ§‘κΈ°κΈ° μ¬μ(μ: λ²κ·Έ μ¬νβμμ PR μμ€μ κΈ°λ) πΉ μ£Όμμ : κ²°κ³Όλ¬Όμ κ·Έλλ‘ ν©μΉκΈ°λ³΄λ€, 리뷰·보μΒ·νμ§ κ²μ΄νΈκ° νμ
μ€ννΈλ: λ΄ νκ²½μ λ§μΆ° βꡬμ±βνλ μλνΒ·μμ΄μ νΈ κΈ°λ°
πΉ λͺ©ν: λ΄ λ¦¬ν¬μ§ν 리/μν¬νλ‘μ°μ λ§κ² ν΄λ§μ μ‘°ν©νκ³ μ€ν νλ¦μ μ€κ³ πΉ κ°μ : ν κ·μΉ(λΈλμΉ μ λ΅, ν μ€νΈ κ·μ½, λ¦°νΈ κ·μΉ)μ κ°μ νκΈ° μ¬μ πΉ μ£Όμμ : μ΄κΈ° μΈν κ³Ό μ΄μ μ€κ³(κΆν, 격리, λ‘κ·Έ)κ° μ±ν¨λ₯Ό μ’μ°
μ λ¬Έκ°μ© κ΄μ : κ°λ° νμ λ£μμ λ μκΈ°λ μ°¨μ΄
1) μ± μ κ²½κ³κ° λ€λ¦ λλ€
πΉ λ°λΉμ βμ΄ κΈ°λ₯ λ§λ€μ΄μ€β κ°μ ν°μΌ λ¨μ μμμ΄ μμ°μ€λ½μ΅λλ€. πΉ μ€ννΈλλ βμ΄ μ‘°μ§μ μ΄λ κ² κ°λ°νλ€βλ₯Ό λ°μν΄ νλ‘μΈμ€ μ€μ¬ μλνλ‘ νμ λ λλ€.
2) νμ§κ΄λ¦¬ μ§μ μ΄ λ€λ¦ λλ€
πΉ λ°λΉ κ³μ΄μ κ²°κ³Όλ¬Όμ΄ λΉ λ₯΄κ² λμ€λ β μ½λ리뷰 체ν¬λ¦¬μ€νΈμ β ν μ€νΈ κ²μ΄νΈλ₯Ό μ΄μ΄ν λλ κ² μ€μν©λλ€. πΉ μ€ννΈλ κ³μ΄μ μ€ν νμ΄νλΌμΈμ β μ μ λΆμ, β ν μ€νΈ, β κΆν μ νμ μμ λ Ήμ¬λλ μ€κ³κ° ν΅μ¬μ λλ€.
3) 보μ/격리 λͺ¨λΈμ λ¨Όμ μ‘μμΌ ν©λλ€
πΉ 곡ν΅μΌλ‘, AIκ° μ€ννλ λͺ λ Ήμ΄ βλ΄ PC/λ΄ μλ²βμ μν₯μ μ€ μ μμ΅λλ€. πΉ μ€λ¬΄μμλ β 컨ν μ΄λ 격리, β μ½κΈ° μ μ© ν ν°, β λΉλ°κ° λ―Έλ ΈμΆ κ°μ μ΄μ μμΉμ΄ λ¨Όμ μμ.
μ€μ λΉκ΅: κ°μ κ³Όμ λ₯Ό 맑겨보면?
μμ κ³Όμ : βλ‘κ·ΈμΈ APIμμ νΉμ 쑰건μμ 500μ΄ λλ€. μ¬νβμμΈ νμ βμμ βν μ€νΈ μΆκ°β
λ°λΉμ κΈ°λνλ νλ¦
1οΈβ£ μ¬ν μλλ¦¬μ€ κ΅¬μ±(μμ²/μλ΅ λ‘κ·Έ μ 리) 2οΈβ£ μμΈ ν보(Null μ²λ¦¬, DB νΈλμμ , μμΈ λλ½) μ’νκΈ° 3οΈβ£ μμ μ½λ μμ± + λ¨μ ν μ€νΈ/ν΅ν© ν μ€νΈ μΆκ° 4οΈβ£ PR ννλ‘ λ³κ²½ μμ½κ³Ό μν₯ λ²μ μ€λͺ
πΉ μ₯μ : μλκ° λΉ λ₯΄κ³ , λ¬Έμ ν΄κ²° μ€ν λ¦¬κ° ν λ²μ μ΄μ΄μ§ κ°λ₯μ±μ΄ νΌ πΉ 리μ€ν¬: βμ¬νμ΄ λμλ€βκ° μ€μ μ΄μ 쑰건과 λ€λ₯Ό μ μμ΄ κ²μ¦ νκ²½μ΄ μ€μ
μ€ννΈλμ κΈ°λνλ νλ¦
1οΈβ£ 리ν¬μ§ν 리 κ·μΉμ λ§μΆ° λΈλμΉ/컀λ°/ν μ€νΈ μ€νμ μλν 2οΈβ£ μλ¬ λ‘κ·Έ μμ§κ³Ό μ¬ν μ€ν¬λ¦½νΈλ₯Ό μ νν(νμ΄ λ€μμλ μ¬μ¬μ©) 3οΈβ£ μμ μ΄ λ€μ΄μ€λ©΄ λ¦°νΈ/ν μ€νΈ/보μ κ²μ¬λ₯Ό ν΅κ³Όν΄μΌλ§ λ€μ λ¨κ³λ‘ μ§ν
πΉ μ₯μ : ν λ² νμ μ‘μΌλ©΄ μ΄ν κ°μ μ νμ λ²κ·Έ λμμ΄ λ°λ³΅ μλνλ¨ πΉ 리μ€ν¬: μ΄κΈ° μ€μ μ΄ λΆμ€νλ©΄ βμ λμκ°λ λ― λ³΄μ΄μ§λ§ μ€μ λ‘ λλ½βμ΄ μκΈΈ μ μμ
μ¬μ©λ² μκ°: λ°λ‘ μ¨λ¨Ήλ μ΄μ ν¨ν΄ 3κ°μ§
ν¨ν΄ A) βAIλ μ΄μ, κ°λ°μλ μΉμΈβ
πΉ AIμκ²λ β μ½λ μ΄μκ³Ό β ν μ€νΈ μ΄μκΉμ§λ§ λ§‘κΉλλ€. πΉ μ¬λμ β μν€ν μ² μ ν©μ±, β μμΈμ²λ¦¬, β μ±λ₯ μν₯λ§ μ§μ€ 리뷰ν©λλ€. β μΆμ² μν©: λ κ±°μ νλ‘μ νΈ, μ₯μ λ―Όκ° μλΉμ€
ν¨ν΄ B) βμμ λ¨μλ‘ μͺΌκ°μ λ§‘κΈ°κΈ°β
πΉ βκΈ°λ₯ μ 체β λμ 1οΈβ£ ν μ€νΈ μΆκ° 2οΈβ£ 리ν©ν°λ§ 3οΈβ£ ν«ν½μ€ μ²λΌ λΆλ¦¬ν©λλ€. πΉ λ³κ²½λμ΄ μμμ§λ©΄ κ²ν λΉμ©μ΄ κΈκ°νκ³ , μ€ν¨ν΄λ λλ리기 μ½μ΅λλ€. β μΆμ² μν©: μ κ· κΈ°λ₯ κ°λ°, νμμ΄ λ§μ νλ‘μ νΈ
ν¨ν΄ C) βμ€ν νκ²½μ μ κ·Έκ³ λ‘κ·Έλ₯Ό λ¨κΈ°κΈ°β
πΉ AIκ° μ€ννλ 컀맨λλ 컨ν μ΄λ/μλλ°μ€μμλ§ λ립λλ€. πΉ β μ€ν λ‘κ·Έ, β μμ νμΌ λͺ©λ‘, β ν μ€νΈ κ²°κ³Όλ₯Ό μλ μ μ₯ν΄ κ°μ¬ κ°λ₯νκ² λ§λλλ€. β μΆμ² μν©: μ¬λ΄ 보μ μκ΅¬κ° μλ μ‘°μ§, μΈλΆ μμ‘΄μ±μ΄ ν° μλΉμ€
μ€μ© μ½λ μμ: βAIκ° λ§λ λ³κ²½βμ μ΅μ κ²μ¦νλ ν μ€νΈ μ€μΊν΄λ©(νμ΄μ¬)
μλλ API λ 벨μμ μλ¬ μ¬νκ³Ό νκ· λ°©μ§λ₯Ό λΉ λ₯΄κ² κ±°λ ννμ μμμ λλ€.
import pytest
def call_login(client, payload):
return client.post("/api/login", json=payload)
@pytest.mark.parametrize("payload", [
{"email": "a@b.com", "password": "wrong"},
{"email": "", "password": "x"},
{"email": "a@b.com", "password": ""},
])
def test_login_never_500(client, payload):
res = call_login(client, payload)
assert res.status_code != 500, f"Unexpected 500 with payload={payload}"
def test_login_invalid_credentials(client):
res = call_login(client, {"email": "a@b.com", "password": "wrong"})
assert res.status_code in (400, 401)
πΉ ν¬μΈνΈ: AIκ° μμ ν λ‘μ§μ΄ μμ΄λ, μ΅μν β500μ μ λ λ΄μ§ λ§μβ κ°μ μμ λ§ ν μ€νΈλ₯Ό λ¨Όμ κΉλ©΄ μ΄μ μ¬κ³ λ₯Ό μ€μΌ μ μμ΅λλ€.
κ²°λ‘ : 무μμ μ νν κΉ?
πΉ βν°μΌ λ¨μλ‘ λ§‘κΈ°κ³ κ²°κ³Όλ¬Όμ λ°λ κ²½νβμ΄ νμνλ©΄ λ°λΉν μμ΄μ νΈκ° λ§€λ ₯μ μ λλ€. πΉ βμ°λ¦¬ ν λ°©μμ λ§μΆ μλνΒ·ν΅μ Β·μ¬νμ±βμ΄ μ°μ μ΄λ©΄ μ€ννΈλ κ°μ ꡬμ±ν μ κ·Όμ΄ κ°ν©λλ€. 무μμ μ°λ , ν΅μ¬μ κ°λ° μλκ° μλλΌ κ²μ¦ κ°λ₯ν λ³κ²½μ λ§λλ μ΄μ 체κ³λ₯Ό κ°μ΄ κ°μΆλ κ²μ λλ€.
#κ°λ° #AIκ°λ° #Devin #λ°λΉ #OpenHands #μ€ννΈλ #κ°λ°μλν #μ½λ리뷰 #ν μ€νΈ #μμ΄μ νΈκ°λ°
β¬οΈ μ΄ κΈμ΄ λμμ΄ λμ ¨λ€λ©΄, μλ κ΄κ³ λ₯Ό ν λ²λ§ ν΄λ¦ν΄μ£ΌμΈμ! μ μκ² ν° νμ΄ λ©λλ€ πββοΈ β¬οΈ