-
μλ‘μ΄ νλ‘μ νΈ μμ: κ°μμ λͺ©ννλ‘μ νΈ 2022. 1. 2. 20:26
π μλ‘μ΄ νλ‘μ νΈ μμ
μ§λ μ¬λ¦μ μ λ§ λ§μμ΄ μ λ§λ λλ£λ€μ λ§λμ λ무 μ¦κ²κ² μ§ννλ νλ‘μ νΈκ° μμλλ°, μ·¨μ€/ν΄μΈ/μ§μ₯ λ± λ€λ€ μκ°μ μ¬μ κ° μμ΄ νμ§λΆμ§ λμλλ¬λ€. κ·Έλ₯ μκ³ λ¦¬μ¦μλ μ§μ€νμ νκ³ κ·Ό νλλ¬κ° κ³΅λΆ μ€μ΄μλλ°, μ°μ°ν μλ‘μ΄ νλ‘μ νΈλ₯Ό μμνκ² λμλ€.
DRF κΈ°λ°μ backend API μ€κ³μ μλ² κ΅¬μΆμ 맑μ μμ μ΄λ€.
νλ‘μ νΈ μμ μ μ λ΄κ° μ΄ νλ‘μ νΈ κ²½νμ ν΅νμ¬ μ§μμ μΌλ‘ μ±μ₯νκ³ μ νλλ°μ λͺ©νμ λνμ¬ κΈ°μ ν΄λ³΄λ €νλ€.π₯ λͺ©ν μ€μ νκΈ°
1. μ κ·ν κ·μΉμ λ°λ₯΄λ DB μ€κ³
νμ μμ μΌν΄λ³Έ κ²½νμ΄ μμ΄μ μ’μ DBꡬ쑰/νμ₯μ± μλ μ€κ³μ λν μ νν κΈ°μ€μ μΈμΈ μ μμ§λ§ μ€μ€λ‘ μ€μ ν κ·μΉμ μ§ν€λ©΄μ λͺ¨λΈλ§μ μ§νν΄λ³΄λ € νλ€. (λ³΄ν΅ μ κ·ν 3λ¨κ³κΉμ§λ₯Ό νλ‘λμ μ λ§μ΄ μ μ©νλ€κ³ νλ€) μ΄κΈ° μ€κ³ μ΄ν, κ°λ°μ μ§ννλ©° λ§μ£Όνλ λΉμ κ·ν, transaction λ±μ λ¬Έμ λ₯Ό κ°μ ν΄λκ°λ©° λ°μ μν¬ μμ .
2. λ‘κ·Έ μμ€ν μ¬μ©
μ΄μ νλ‘μ νΈμμλ .txt νμΌλ‘ μμ² λ‘κ·Έλ₯Ό λ¨κΈ°λ λ°©μμ μ¬μ©νμλ€.
λ‘κ·Έ μμ€ν μ μ€κ³ν κ²μ μλμκΈ° λλ¬Έμ μλ²μ μ§μ μ΄μ΄κ°μ λ‘κ·Έ νμΌμ λ―μ΄λ³΄μ§ μλ μ΄μ, μ΄λ ν μλ¬κ° λ°μνλμ§ νμ νκΈ°κ° μ΄λ €μ λ€. κ·Έλμ νλ‘ νΈμνΈ νμλΆκ³Όμ μ¦κ°μ μΈ μν΅μμ μ΄λ €μμ κ²ͺμμλ€. μλ¬ μλ΅μ΄ λ μμ€λ©΄, νμλΆμ΄ λμκ² λ©μΈμ§λ₯Ό 보λ΄κ³ .. λλ νμ°Έ λ€μ νμΈνκ³ ... κ·Έλ¬λ©΄ νμλΆμ μμ μλλ λλ €μ§κ³ .. νμ μ΄ λλμ§κ³ ... λ κ·Έλ°.
ꡬκΈλ§ν΄λ³΄λ μλ¬ λ‘κ·Έ μμ€ν μΌλ‘λ Sentry κ° κ°μ₯ λ§μ΄ μ°μ΄λ λ―νμ¬, μ΄ ν΄μ μ¬μ©ν΄λ³Ό μμ μ΄λ€.3. TDD κ°λ°μ κ°λ°
PostmanμΌλ‘λ§ λμ μ¬λΆλ₯Ό κ²μ¦νκ³ , μ΄ν νλ‘ νΈ λ¨μμ μ΄μμ μΈ μλΉμ€ μ μ νλ‘μ°μ λν ν μ€νΈ(happy path testingμ΄λΌ νλ€)λ§ μ§ννλ©° κ°λ°μ ν΄μλ€. λ²κ·Έκ° λ°μν κ²½μ°λ, κΉ¨μ§ λΆλΆμ μ½λλ₯Ό λ§λΆμ΄λ λ°©μμΌλ‘ μ€λ₯λ₯Ό ν΄κ²°νμλ€. μ½λμ μ¬μ¬μ©μ±μ΄ λ¨μ΄μ§κ³ μΈμ μ΄λ ν μΌμ΄μ€μ λνμ¬ μλ¬κ° λ°μν μ§ μμΈ‘ν μ μμ΄ λΆμμ νλ€.
μ΄λ² νλ‘μ νΈμμλ λ°λμ ν μ€νΈ μ½λλ₯Ό μμ±νμ¬ TDD κΈ°λ°μ κ°λ°μ μ§ννλ € νλ€. (μΌλ¨ κΉνλΈμ issueλΆν° μμ±ν΄λλ€γ κ³μ λμ λ°νμ λ―Έλ£° μλ μκ² λ§λ€μ΄λ²λ¦΄ κ±°λ€)4. λ°°ν¬ μλν
CircleCIλ AWS CodeDeployλ₯Ό μ¬μ©νμ¬ CI/CD νμ΄νλΌμΈμ ꡬμΆν΄λ³Ό κ².
μ΄μ νλ‘μ νΈλ μ 립λ λ°°ν¬ νλ‘μΈμ€ μμ΄ docker 컨ν μ΄λλ§ λμκ°κ³ μλ ꡬ쑰μλ€. μλ‘μ΄ PRμ΄ mergeλλ©΄, κ°μκΈ° 컨ν μ΄λκ° ν°μ§κΈ°λ νκ³ λ‘κ·Έκ° λ€ λ μκ°κΈ°λ νκ³ λ κ·Έλ¬μλ€. κ·Έ λλ dockerμ κ°λ μ μ΅νλλ°λ κΈκΈνκΈ°μ μλ‘μ΄ ν΄μ λμ ν μ¬μ μ‘°μ°¨ μμλ κ² κ°λ€.
μ λλ‘λ λ°°ν¬ νλ‘μΈμ€λ₯Ό ꡬμΆν΄λ³΄κ³ μΆλ€. μ΄ λΆλΆμ λν΄μλ λ΄ μ§μμ΄ κ·Έλ¦¬ κΉμ§ μλ€κ³ νλ¨λμ΄, μ‘°κΈ λ 곡λΆν λ€μ ꡬ체ννλ κ²μΌλ‘.5. API λ¬Έμ μλν
μλνλ API λ¬Έμλ₯Ό κ΄λ¦¬ν κ².
λ³λμ λ¬Έμλ₯Ό ν΅ν΄ κ΄λ¦¬νλ©΄ λκΈ°νκ° μ λμ λ λμ§ μμ νλ‘μ νΈμ μμ°μ±μ΄ μ νλλ€. λ Έμ ν μ΄λΈλ‘ μ²μ api λ¬Έμλ₯Ό μμ±ν μκ°λΆν° μ΄λ¬ν λ¬Έμ λ₯Ό λκ»΄μ λ°λ‘ λμ νμλ€. κ°μΈμ μΌλ‘ 컀μ€ν°λ§μ΄μ§μ΄ μ©μ΄νμ¬ swagger보λ€λ drf-yasgλ₯Ό μ νΈνλ€. field-level, response format/errorκΉμ§ 컀μ€ν°λ§μ΄μ§νλ μμμ΄λ€. μ μΈμ κ°λ μ±μ μλνλ€... λ무μ’μ6. git issueμ PRμ ν΅ν task κ΄λ¦¬
githubλ΄μμ issueμ PRμ νμ©νμ¬ taskλ₯Ό 체κ³μ μΌλ‘ κ΄λ¦¬ν μμ μ΄λ€. μ΄κ±΄ μ΄λ―Έ νκ³ μλ€. μμ°¨μ μΌλ‘ taskλ₯Ό μ²λ¦¬νκΈ°μλ μ©μ΄νκ³ κ΅¬μ‘°ννκΈ°λ λ§€μ° μ’μ κ² κ°λ€. λ³λμ λ¬Έμ(λ Έμ )μ μ΄μ©νλ©΄ μ’ μ’ μ½λ μμ μ§νμν©κ³Ό λκΈ°νκ° λμ§ μμ λκ° μμλλ° κ·Έλ΄ μΌμ΄ μλ€λ κ²λ ν° μ₯μ μ΄λ€.
μΆκ°μ μΌλ‘ Projectμ μΉΈλ°μ°¨νΈλ μ¬μ©μ€μΈλ° μμ£Ό μ§κ΄μ μ΄κ³ λ§μμ λ λ€. taskκ° μμΌμλ‘ μ§κ°λ₯Ό λ°νν κ² κ°λ€.task κΈ°λ°μ issueλ₯Ό μμ±, label μ§μ issueκΈ°λ°μ PRμμ± μΉΈλ°μ°¨νΈ(todo, inprogress, done) 7. κ°λ° νκ²½ λ° μ½λ© 컨벀μ μ λν νκ·μΉ μ€μ νκΈ°
νμλ€. ν΅μ¬λ§ κ°μ§κ³ κ°κΈ°λ‘ νλ€.
리뷰λ₯Ό νμ±ννκ³ μΆμ§λ§, νμμ΄ νλ‘ νΈ1+λ°±2μΌλ‘ ꡬμ±λμ§λΌ μ½μ§ μμ κ² κ°μμ μ°μ ν΅μ κ·μ½, github μ¬μ©κ·μΉ, django μ½λ©μ»¨λ²€μ μ λν΄μλ§ λ¬Έμλ₯Ό μμ±νμλ€.8. ν¬κ³ μμ μμ¬κ²°μ κ³Όμ μμ νμ€ν κ·Όκ±° μΈμ°κΈ°
ꡬκΈμ μ³λ³΄λ λλΆλΆμ μ¬λλ€μ΄ μ΄λ¬ν λ°©ν₯μΌλ‘ μ§ννκΈΈλ, λ¨μν μ΄ κΈ°μ μ μ¬μ©ν΄λ³΄κ³ μΆμ΄μ λ±λ±
νμΈμκ² 'λ΄κ° μΈμ΄ λ Όλ¦¬μ νλ¦'μ λ§λ‘ μ€λͺ ν΄λΌ μ μλ μμ¬κ²°μ μ νμ§ μμΌλ €κ³ λ Έλ ₯νλ € νλ€. κ³μ μ§λ¬Έμ λμ ΈμΌ νλ€!'ν΄/λͺ¨λμ λμ ν μ΄μ λ 무μμΈκ°'
'쿼리λ₯Ό μ΄λ»κ² μ§μΌ μνμκ°μ μ΅μ νν μ μμκΉ'
'리ν©ν λ§μ΄ νμνλ€κ³ μκ°νλ€. μ? μ½λμ κ°λ μ±μ΄ λ¨μ΄μ§λκ°? λΆνμν μΏΌλ¦¬κ° μλκ°?'
'λ΄μ₯ λͺ¨λμ μ¬μ©νλ€κ³ ν λ, μ₯κ³ κ° μ 곡νλ κΈ°λ₯μ 100λΆ μ΄ν΄νκ³ λ΄κ° μνλ λλ‘ μ»€μ€ν°λ§μ΄μ§ν μ μμ κ²μΈκ°'
'κ³Όμ° μ΄ μ½λλ νμ΄μ μ΄λΌλ μΈμ΄μ, μ₯κ³ λΌλ νλ μμν¬μ νΉμ₯μ μ μ λ°μνλ€κ³ λ³Ό μ μλκ°'π©π»π» μν΄λ³΄μ!
무μΈκ°λ₯Ό μλ‘ λ§λ€μ΄λκ°λ κ³Όμ μ λ μ¬λμ μ€λ μ΄κ² νλ€.
μ΄λ² κ²½νμ ν΅ν΄μ λ λλ μλ‘μ΄ κ²λ€μ λ°°μ°λ©° μλ§μ λκ΄λ€μ λ§μ£Όνκ³ λ 극볡ν΄λκ° κ²μ΄λ€.
μ½μ§ μκ² μ§λ§! λ€μ μλ‘μ΄ λλ ₯μ μ»μ μ μκ² λμ΄ κΈ°μλ€.