λͺ©λ‘νλ‘μ νΈ/[Web] μν μμ± μ¬μ΄νΈ (10)
Study Anything π§
νλ‘ νΈμλμΈ λ¦¬μ‘νΈμ λ°±μλμΈ μ₯κ³ λ₯Ό μ°λν λ 리μ‘νΈμ build λ°°ν¬ νμΌλ€μ μ΄μ©ν΄λ³΄λ €κ³ νλ‘μ νΈ μ΄κΈ°λΆν° μ¬λ¬ λ¬Έμλ€μ μ°Ύμ보며 κ³ κ΅°λΆν¬ νμλ€. κ·Έλ¬λ€κ° κ²°κ΅ κ·Έ λ°©λ²μ μ¬μ©νλ κ²μ λ©μΆ°λκ³ κΈ°λ₯λ€μ λ¨Όμ ꡬννλ€κ° μΌλ§ μ μ νλ‘μ νΈλ₯Ό λͺ¨λ λλ΄κ³ μλ²μ λ±λ‘νλ €κ³ λ€μ μλν΄λ³΄λ μν©μ΄μλ€. ( μμΈν κ³Όμ μ μ΄μ κΈ μ°Έκ³ > https://edorrr.tistory.com/18 ) νλ‘μ νΈ μμ± λΉμμ λ°°ν¬ λ²μ μμ λ°μνλ μ€λ₯λ ν¬κ² λ κ°μ§μλ€. [1] κΈμ°κΈ°λ₯Ό λ§μΉ ν λμ°λ μν νμΈ νμ΄μ§μ μν λͺ©λ‘μ λ³Ό μ μλ μν κ³΅κ° νμ΄μ§κ° ν° μ°½μΌλ‘ λ¨λ μ€λ₯ [2] μΉνμ΄μ§μμ μ¬μ©νλ μ΄λ―Έμ§ νμΌλ€μ 404 not found μ€λ₯ λ¨Όμ 첫 λ²μ§Έ μ€λ₯λ νλ‘ νΈμλ λ΄λΉ νμμ΄ ν΄..
μ€λλ‘μ 'κ³ μμ΄μ μ± μ' νλ‘μ νΈμ μν μμ± κ΄λ ¨ κΈ°λ₯μ λͺ¨λ λ§μ³€λ€! λ‘κ·ΈμΈ, νμ μ 보, κ²μ, μν μμ± μ κΈ°λ₯λ€μ κ°μ§ νλ‘μ νΈμλλ° κ·Έ μ€ λλ μν μμ± κΈ°λ₯μ 맑μκ³ μνμ CRUD, μ¦ μμ±νκ³ (Create) λΆλ¬μ€κ³ (Read) μμ νκ³ (Update) μμ νλ(Delete) κΈ°λ₯μ λͺ¨λ ꡬννλ€. μ₯κ³ νλ μμν¬λ₯Ό μ²μ μ¬μ©ν΄λ³΄λκ±°λΌ μ ν μ μμκΉ νλ λ§μλ λ€μμ§λ§ λͺ¨λ₯΄λλ§νΌ μ΄μ¬ν 곡λΆνλ©° νλ‘μ νΈλ₯Ό μ§ννκ³ λλ λλ΄κ³ λμλ λΏλ―ν λ§μμ΄ λ¨λλ€. ν λ¬ λ°μ κΈΈλ€λ©΄ κΈΈκ³ , 짧λ€λ©΄ 짧μ μκ°λμ νλ‘μ νΈλ₯Ό μ§ννλ©΄μ (κΈμ μ±κ³΅ν κ²½μ°λ§ μμ±νλ€λ³΄λ λ΄μ©μ΄ λ§μ§λ μμ§λ§) κ°μ’ μνμ°©μ€μ μ€λ₯λ€μ κ²ͺμΌλ©΄μ μ₯κ³ μ 리μ‘νΈμ κ΄ν΄ ν λ°μ§ λμκ° μ μμλ€. νλ‘ νΈμλ ν΄μΈ ..
μ λ² ν¬μ€νΈμμλ μνμ μμ±νκ³ λΆλ¬μ€λ(μ‘°ννλ) ν¨μλ₯Ό μμ±νλ€. μ΄λ²μλ CRUD μ€ Update, Delete κΈ°λ₯μ ꡬννλ PUT, DELETE ν¨μλ₯Ό μμ±ν΄λ³΄λ €κ³ νλ€. κΈ°λ³Έ ꡬ쑰λ μ΄μ μ μμ±ν ν¬μ€νΈμμ νμΈν μ μλ€. (1) app/urls.py μμ post, get κ³Ό λ§μ°¬κ°μ§λ‘ νΈμΆλλ url μ ν¨μμ μ°κ²°νλ€. path('edit/', views.ReviewView.as_view()), path('delete/', views.ReviewView.as_view()) (2) app/views.py νμΌμ ν¨μ μμ± APIView ν΄λμ€λ₯Ό μμλ°μ μμ±ν ν΄λμ€ μμ put, delete ν¨μλ₯Ό μμ±νλ€. ... def put(self, request): data = reques..
μ§λ ν¬μ€νΈκΉμ§ ꡬννλ μν μμ± κΈ°λ₯λ€μ μ₯κ³ κΈ°λ³Έ κΈ°λ₯μ μ΄μ©ν΄μ ꡬννλ€. κ·Έλ¬λ μ°λ¦¬ νλ‘μ νΈκ° νλ‘ νΈμ λ°±μλκ° λλ μ ΈμκΈ° λλ¬Έμ νλ‘ νΈμ λ°±μλλ₯Ό μ°κ²°νλ λ°©λ²μ μ¬λ¬ λ°©λ©΄μΌλ‘ λͺ¨μνλ€. κ·Έλ¬λ©΄μ μ΅μ’ μ μΌλ‘ μ₯κ³ λ μ€νΈ νλ μμν¬ (DRF: Django REST Framework) λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ νλ‘ νΈμΈ 리μ‘νΈμ λ°±μλμΈ μ₯κ³ λ₯Ό μ°κ²°νκ³ μ νμλ€. κ·Έλ¬λ μ€ μ€λ λλμ΄!! νλ‘ νΈμΈ 리μ‘νΈ νμ΄μ§μμ μμ±ν μνμ λ΄μ©μ λ°±μλμΈ μ₯κ³ λͺ¨λΈμ μ μ₯νκ³ λΆλ¬μ€λ κ²μ μμ±ν΄μ κ·Έ κ³Όμ μ κ°λ¨νκ² ν¬μ€ν ν΄λ³΄λ €κ³ νλ€. (1) μ₯κ³ : review/urls.py urls.py νμΌμμλ μ₯κ³ μλ²μ url λ€μ views.py μ ν¨μλ€κ³Ό μ°κ²°νλ λ΄μ©μ λ΄κ³ μλ€. path('', vie..
μ΄μ ν¬μ€νΈμμ 리μ‘νΈμ μ₯κ³ λ₯Ό μ°κ²°νλ λ°©λ² μ€μ REST APIλ₯Ό μ΄μ©ν΄ json κ°μ²΄λ₯Ό μ»κ³ , κ·Έκ²μ 리μ‘νΈμμ μ¬μ©νλλ‘ νλ λ°©λ²μ΄ μλ€κ³ μΈκΈνλ€. νμ§λ§ μ΄νμ κ³μ νμλ₯Ό μ§ννλ©΄μ μ΄ λ°©λ²κ³Ό μ μ©ν μ μλ λ°©λ²μ μ°Ύμλλ€. λ°λ‘ Axiosλ₯Ό νμ©ν λ°©λ²μΈλ° Axiosλ λΈλΌμ°μ , Node.jsλ₯Ό μν HTTP λΉλκΈ° ν΅μ λΌμ΄λΈλ¬λ¦¬μ΄λ€. Promise APIλ₯Ό μ¬μ©νλ©° μμ²(Request)κ³Ό μλ΅(Response)μ json ννλ‘ λ³κ²½ν΄μ€λ€. μ΄ λ λΉλκΈ° λ°©μμ΄λ νμ΄μ§μ μμ²(Request)μ 보λ΄κ³ μλ΅(Response)μ λ°λ νμκ° 1:1 κ΄κ³λ‘ μ΄λ€μ§λ κ²μ΄ μλ, νμ΄μ§λ₯Ό 리λ‘λ(Reload)νμ§ μμλ μλ²μ κ³μν΄μ μμ²μ 보λ΄λ λ°©μμ΄λ€. Requestλ₯Ό 보λ΄κΈ° λλ¬Έ..
μ°λ¦¬ νλ‘μ νΈλ λ°±μλλ‘ μ₯κ³ (Django)λ₯Ό μ¬μ©νκ³ νλ‘ νΈμλλ‘ λ¦¬μ‘νΈ(React)λ₯Ό μ¬μ©νλ€. λλ¬Έμ λμ μ°λνλ κ³Όμ μ΄ νμνλ°, μ΄λ² μ£Όμ μμλ μ΄ κ³Όμ μ λ€λ€λ³΄λ €κ³ νλ€. λ¨Όμ μ°λ¦¬ νλ‘μ νΈμ μν©μ μ€λͺ ν΄μΌ νκ² λ€. μ°λ¦¬ νλ‘μ νΈλ νλ‘ νΈμλλ₯Ό λ΄λΉνλ νμκ³Ό λ°±μλλ₯Ό λ΄λΉνλ νμμ΄ λλ μ Έμλ€. μ¦, ν κ°λ°νκ²½μμ 리μ‘νΈμ μ₯κ³ λ₯Ό λμμ μ¬μ©νμ§ μλλ€. λλ¬Έμ 리μ‘νΈμ μ₯κ³ λ₯Ό μ°λν μ μλ λ°©λ²μ λ¨Όμ μ΄ν΄λ³΄μ. (1) μ₯κ³ -> 리μ‘νΈ : json κ°μ²΄λ‘ λ°μ΄ν° 보λ΄κΈ° μ΄ λ°©λ²μ μ₯κ³ μ 리μ‘νΈ μ°λμ μμλ³Ό λ κ°μ₯ λ§μ΄ λμλ λ΄μ©μ΄λ€. μ₯κ³ μ Django REST Framework(DRF) λ₯Ό μ΄μ©ν΄ μ₯κ³ μ λͺ¨λΈμ json κ°μ²΄λ‘ μ»μ μ μλ€. μ΄ κ³Όμ μ μλ£νλ©΄ μΉνμ΄μ§μμ..
μ§κΈκΉμ§ μν λͺ©λ‘λ€μ 리μ€νΈλ‘ μ 체 μ‘°ννλ νμ΄μ§μ κΈμ°κΈ° νμ΄μ§λ₯Ό ꡬννλ€. μ΄λ²μλ μν λͺ©λ‘μμ νλλ₯Ό μ ννμ λ ν΄λΉνλ μνμ μμΈ νμ΄μ§λ₯Ό ꡬννλ €κ³ νλ€. (1) list νμΌ λ³΄κΈ° νμΌ > templates/review/list.html ... DBμμ μν λͺ©λ‘μ λ°μμμ νμ΄μ§μ λμ°λ list.html μ½λ μ€ μΌλΆμ΄λ€. κ°κ°μ μνμ νκ·Έλ‘ κ°μΈ ν΄λΉ λ΄μ©μ μ ννλ©΄ μνμ μμΈ νμ΄μ§λ‘ μ΄λνλλ‘ κ΅¬ννλ €κ³ νλ€. ν΄λΉ μμΈνμ΄μ§μ url μ "http://κΈ°λ³Έμ£Όμ/review/detail/μνId" λ‘ μ€μ νλ€. (2) urls.py νμΌ μμ νμΌ > review/urls.py urlpatterns = [ ... path('detail//', views.detail, na..
μν μμ± ννΈμ 첫λ²μ§Έ λ¨κ³μμ μ₯κ³ λͺ¨λΈλ‘ μν DBλ₯Ό λ§λ ν κ·Έ DB μμ μνλ€μ μΉνμ΄μ§μμ μ‘°ννλ κΈ°λ₯κΉμ§ ꡬννλ€. μ΄λ²μ κ·Έ λ€μ λ¨κ³λ‘ μμ±ν μνμ DBμ λ±λ‘νλλ‘ νλ κΈ°λ₯μ ꡬννλ€. μΉνμ΄μ§μμ μνμ μ΄ ν κ·Έ λ΄μ©μ μν DBμ λ£κ³ μ 체 λͺ©λ‘μΌλ‘ μ‘°ννλ κΈ°λ₯μ΄λ€. (1) μν λͺ©λ‘μ μ‘°ννλ νμ΄μ§μ κΈμ°κΈ° νμ΄μ§λ‘ μ΄λν μ μλ μμλ₯Ό μΆκ°νλ€. νμΌ > templates/review/list.html ... κΈμ°κΈ° ... (2) urls.py νμΌμ write νμ΄μ§μ κ΄λ ¨λ λ΄μ©μ μΆκ°νλ€. νμΌ > review/urls.py urlpatterns = [ ... path('write/', views.write, name='write'), ... ] urls.py..
νλ‘μ νΈ λ΄μ©λ€ μ€μ μν μμ± ννΈλ₯Ό μμνλ€. μν μμ± μμλ μ¬λ¬κ°μ§ κΈ°λ₯λ€μ΄ μλλ°, μ΄λ²μλ μνμ μ 체 λͺ©λ‘μ μ‘°ννλ κΈ°λ₯μ μννλ€. μνμ μ μ₯ν DBλ₯Ό λ§λ€κ³ λλ―Έ λ°μ΄ν°λ₯Ό λ£μ λ€μ, κ·Έ λ΄μ©λ€μ μλ‘μ΄ νμ΄μ§μμ μ‘°ννλ κ³Όμ μΌλ‘ μ§ννλ€. DBλ₯Ό λ§λ€κΈ° μν΄μ μ₯κ³ μ κΈ°λ³Έ κΈ°λ₯μΈ λͺ¨λΈμ μ΄μ©νκ³ λͺ¨λΈ μ‘°ν κΈ°λ₯μ μ΄μ©ν΄ κ°λ¨νκ² μν λͺ©λ‘μ μ‘°ννλλ‘ νλ€. λ€λ§ μμ§ νλ‘ νΈμ μ°κ²°νλ λ°©λ²μ μ°Ύμ§λ λͺ»ν΄μ ui μμμ λͺ©λ‘μ΄ λ³΄μ΄λ κ²μ΄ μλλΌ UIλ₯Ό μ μ©νμ§ μμ HTML κΈ°λ³Έ UIμ λ΄μ©λ§ 보μ΄κ³ , ν΄λΉ λ΄μ©μ ν΄λ¦νλ©΄ μλ‘μ΄ νμ΄μ§(μΆν μν μμΈνμ΄μ§)λ‘ μ΄λνλ κ²κΉμ§ μμ±νλ€. μμ§ λΆμ‘±ν μ μ΄ μμ΄μ μ½λλ₯Ό νλ‘μ νΈ μμ λ¨μ λ°λ‘ μ¬λ¦¬μ§ μκ³ ν μ€νΈ ν΄λμ git ..
μ§λ μ£Όμ μ²μ μκΈ°κ° λμ¨ μ΄ν μ€λλΆν° 'κ³ μμ΄μ μ± μ' νλ‘μ νΈμ μ°Έμ¬νκ² λμλ€. λλ΅μ μΈ νλ‘μ νΈ κ°μλ μ± μ μν μμ±μ μ 곡νλ μΉμ¬μ΄νΈ μ μμΌλ‘, μ΄ νλ‘μ νΈμμ λ°±μλ κ°λ°μλ‘ μ°Έμ¬νκ² λμλ€. μΈμ΄λ μ₯κ³ (Django)λ₯Ό μ¬μ©ν μμ . μ₯κ³ λ‘λ μ²μ κ°λ°μ ν΄λ³΄λ κ²μ΄λΌ μμΌλ‘ λ§μ 곡λΆκ° νμν κ² κ°λ€. μ€κ°λΆν° μ°Έμ¬νκ² λ κ²μ΄λΌ μΌλ¨ λ©°μΉ κ°μ 곡λΆμ νλ‘μ νΈ νμ μ νμ°κ³ κ·Έ λ€μμΌλ‘λ μν μμ± κΈ°λ₯λΆν° κ°λ°μ μμν μμ μ΄λ€. μ€λμ νμμ μ²μ μ°Έμνκ³ κ°λ¨ν μΈμ¬μ μμΌλ‘μ μΌμ μ 곡μ νλ€. νλ‘μ νΈ μΉ΄ν κ³ λ¦¬μλ νλ‘μ νΈ μΌμ§μ²λΌ λ¨κΈ°κ³ 리뷰ν λ§ ν κΈ°λ₯λ€μ λ°λ‘ κΈμ μμ±ν νμ λ§ν¬νλ μμΌλ‘ μ΄μ μμ μ΄λ€.