π Front End Developer μ Back End λμ κΈ° ! π
μ΄ κΈμ PROJECT LION : νΈμ½μΉ κ°μ¬λμ κ°μλ₯Ό λ€μΌλ©° μ°Έκ³ ν κΈμ λλ€.
μμ μ€, κ°λ°κ³Όμ μ 리 λ° issueκ° λμλ λΆλΆλ€μ 곡μ λ° κΈ°λ‘νκ³ μ μμ±νκ² λμμ΅λλ€.
β data μ μ₯ λ° λ³΄μ¬μ§λ κ²(μ μ₯/보μ¬μ£ΌκΈ°/μμ /μμ ) -> μ¦, OnlineStore λ₯Ό ꡬννκΈ° μν΄μλ 4κ°μ§κ° νμνλ€.
μ μ₯ν μν μ 보λ₯Ό 보μ¬μ€μΌλ‘μ¨, μν list pageλ₯Ό ꡬμ±ν μ μλ€.
Create -> databaseμ Product Collection μμ± λ° μνμ 보 μ μ₯
Read -> Product Collection μ μ μ₯ν dataλ₯Ό κΊΌλ΄μ 보μ¬μ€
Update -> Product Collection μμ μμ νκ³ μΆμ μνμ κ°κ²© μ 보 μμ
Delete -> Product Collection μ μ μ₯ν document μ€, μμ λ₯Ό μνλ μνμ μμ
β μνμ 보λ₯Ό μ μ₯ν λ, νμμ 보λ€(μν κ³ μ λ²νΈ, μνλͺ , κ°κ²©, μ€λͺ λ±) μ 보λ€μ MongoDB μ μ μ₯ν κ²μ΄λ€.
μ¦, ProductλΌλ Collectionμ document λ‘ μν μ 보λ₯Ό νλνλ μ μ₯ν κ²μ΄λ€.
document -> μν κ³ μ λ²νΈ, μνλͺ , κ°κ²©, μ€λͺ λ± μ 보λ€μ΄ κ°κ° key-value ννλ‘ μ μ₯λ κ²μ΄λ€.
id : 101
name: μ λ°
price: 10000
description: νμ μ λ°μ λλ€.
μμ
μ νλ¬κ°λ λ‘μ§μ μκ°ν΄λ³΄μλ©΄,
1. μν λ±λ‘μ νκΈ°μν form λ° λ΄λΆ input λ€(μ 보 κΈ°μ
λ) μ΄ νμν κ²μ΄κ³ ,
2. μνμ μ₯ λ²νΌμ ν΄λ¦ μ μνλ±λ‘μ΄ λμ΄μΌ νλ€.
-> post λ°©μ([POST]/product/regist) μ£Όμλ‘ μνλ±λ‘ APIλ₯Ό ꡬνν΄ λμλ€λ©΄, μνλ±λ‘ λ²νΌμ λλ₯Όλ post λ°©μ μ£Όμλ‘ νμν dataμ ν¨κ» μμ²μ 보λ΄λ©΄ flaskμμ μνμ λ±λ‘, μ μ₯ ν μλ΅μ 보λ΄μ€ κ²μ΄λ€.
머리 μμ ꡬμμ κ·Έλλ‘ λ΄λ±μΌλ μ€λͺ μ΄ μ₯ν©ν κ±° κ°λ€.. π
κ·Έλ λ€λ©΄ κ·Έλ¦Όμ κ·Έλ €λ³΄μ(?)
1. inputμ dataκ° μ λ ₯
2. λ±λ‘λ²νΌ click
3. μνλ±λ‘ apiλ‘ κ΅¬νν΄λ postλ°©μ μ£Όμλ‘ νμν data μμ²(μ μ‘)
4. μν λ±λ‘ λ° μ μ₯ (db)
5. μλ΅ (μ μ₯μλ£ λλ μ€ν¨νλ€λ©΄ μ€ν¨)
μ΄λ° λ‘μ§μΌλ‘ νλ¬κ°λ€κ³ μκ°νλ©΄ λκ² λ€!!!
μμ μ local port μμ νμΈν΄μΌ νλ―λ‘, terminal μ€ν λ° flask run
local port μλ νμΈ
= app_route("/") λ€ μ΄λ€ κ°μ΄ λΆλλμ λ°λΌ API μμ²μ λ°κ² λλ€.
λ€μ /home μ΄λΌλ κ°μ΄ λΆκ² λλ€λ©΄, homeμ΄ root κ²½λ‘κ° λλ κ²μ΄λ€.
μ¦, localport/home -> Hello, World! κ° μΆλ ₯μ΄ λλ€.
κ²°κ³Ό νλ©΄μ νμΈν λ, λλ λ€λ₯Έ μμ
ν κ³μν΄μ νλ©΄μ νμΈ ν λ flask runμ λ°λ³΅ν΄μ μ€νν΄ μ£Όμ΄μΌ νλ―λ‘, ν΄λΉ μ½λ λ° py-3 app.py μ€ν
-> (μλ¨ img 14~15λ² μ€)
μ μμ μΌλ‘ μ€νμ΄ λμ΄μΌ νλ μν©μΈλ° μ€λ₯κ° λ°μνλ€. π
flaskκ° μ€μΉλμ΄ μμ§ μμ μ°Ύμ μ μλ€λ κ² κ°μλ€.
μ§λ 3νΈ μμλ pymongo λ₯Ό μ°Ύμ μ μμ΄ μ¬μ€μΉ ν΄μ£Όμλλ°, λκ°μ κ²½μ°μΈ κ² κ°μ μ€μΉν΄μ£Όλ μ μμ μΌλ‘ μ€νλμλ€..π
μλ§, requirements.txt μμ package λ€μ΄ μ μμ μΌλ‘ μ€μΉλμ΄ μμ§ μμ κ² κ°μλ€. (μΌμΌμ΄ pip installμ λ€ μμΌμ£Όμλ€ γ
γ
)
μν λ±λ‘ API μμ±
4-1. controllers folder μμ±
4-2. controllers > product.py μμ±
= μνκ³Ό κ΄λ ¨λ API λ€μ μ μν΄ λμ νμΌ(μν λ±λ‘, μΆκ°, μμ λ±λ±)
4-3. controllers > blueprint.py μμ±
= μν λ° μ¬μ©μμ κ΄λ ¨λ API λ€μ μ μν ν
λ°
ex)
[μν]
/products/regist
/products/list
...
[μ¬μ©μ]
/users/signup
/users/signin
/ κ²°μ
/ μ£Όλ¬Έ λ±λ±..
μ΄λ° apiλ€μ κ°κ° κ΅¬λΆ λ° λλμ΄ λκΈ° μν΄ blueprint νμΌ μ¬μ©
μλ app.pyμμλ /κ°μΌλ‘ μ μ μ return κ° ("Hello, World") κ° λ°νλμλλ° -> blueprint μ¬μ© λ° register_blueprint λ±λ‘ ν controllers > product μ API λ€μ products λ‘ μ£Όμκ° μμλλ€.
λ§λ‘ νννκΈ°λ³΄λ¨ μμ κ·Έλ¦Όμ΄ μ§±μ΄λ€ ^__^
= μμ± μ κ³Ό μμ± νμ λν μ€λͺ μ 6λ²μ !!
models/product.py μμ±
= μ¬μ€ models λ΄λΆμ product.py νμΌμ μμ±νμ§ μμλ μκ΄μ΄ μλ€.
νμ§λ§, form_dataμ κ°κ³Ό insert_oneμ κ°μ 보기 μ’κ² ν¨μ¨μ μΌλ‘ λ°κΏ μ μκ² λ€λ μκ°μ΄ λ€μ΄ λλ¦λλ‘ μ 리λ₯Ό ν΄λ³΄μλ€.
- μ°μ , μ μ₯νλ codeλ₯Ό models > product.py νμΌμ μμ±νλ€.
- mongodb include
- product μ λν μ 보 λ°μ
- controllers > product μ μ 보λ€μ models > product λ‘ λ겨μ€λ€. (κ°κ°μ μ 보λ₯Ό κΊΌλ΄μ λ£μ΄μ£Όλκ±Έ form_dataλ‘ νλ²μ λκ²¨μ€ μ μκ² λμλ€.)
API ν μ€νΈ
- Insomnia program μ€μΉ
- Create -> Request Collection
- products
- New request -> regist/λ°©μμ Post/ ꡬ쑰λ multipart-form
- μ£Όμ μμ± (http://127.0.0.1:5000 ν¬νΈ)
http:://127.0.0.1- name/price/description μνμ 보 μ λ¬
π² Insomnia νλ©΄
- MongoDB Compass μ μ
= online_store DBμ μ§λμκ° testλ₯Ό μν΄ λ§λ test_connection λ§ μμν μ§λ§, products collectionμ΄ μμ±λμ΄ μμ κ²μ΄λ€.
click μ μ μ‘μν¨ documents λ μμ±λμ΄ μμ κ²μ΄λ€.
π² MongoDB νλ©΄
μν λ±λ‘μ κ΄ν λ΄μ©μ λ§λ¬΄λ¦¬λμλ€!
κ³νμ 8μ λ§λ°μ§ κ°κ° μ μ μ¨λΌμΈ μ€ν μ΄λ₯Ό λ§λ¬΄λ¦¬ μν€λ € νμλλ°, μ’μ κΈ°νκ° μ겨 3μ§Έμ£ΌλΆν° μ 무 μΈμ μλ‘μ΄ κ°μΈ νλ‘μ νΈλ₯Ό μμνκ² λμλ€.
μλλ₯Ό λ΄μ΄ μ¨λΌμΈ μ€ν μ΄λΆν° 빨리π λλ΄λλ‘ ν΄μΌκ² λ€ !
λ€μ μκ°μλ μν μ΄λ―Έμ§ μ λ‘λ κΈ°λ₯μ ꡬνν΄ λ³΄λλ‘ νκ² λ€. π