🦁 Python Online Store λ§Œλ“€κΈ° 5편 - νŒλ§€μƒν’ˆ 등둝 API

yohan-record[web]Β·2022λ…„ 8μ›” 1일
0

python onlinestore κ°œλ°œμΌμ§€

λͺ©λ‘ 보기
5/25
post-thumbnail

🎈 Front End Developer 의 Back End 도전기 ! 🎈

이 글은 PROJECT LION : ν˜Έμ½”μΉ˜ κ°•μ‚¬λ‹˜μ˜ κ°•μ˜λ₯Ό λ“€μœΌλ©° μ°Έκ³ ν•œ κΈ€μž…λ‹ˆλ‹€.

μž‘μ—… 쀑, κ°œλ°œκ³Όμ • 정리 및 issueκ°€ λ˜μ—ˆλ˜ 뢀뢄듀을 곡유 및 κΈ°λ‘ν•˜κ³ μž μž‘μ„±ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

1. CRUDλž€?

✍ data μ €μž₯ 및 λ³΄μ—¬μ§€λŠ” 것(μ €μž₯/보여주기/μˆ˜μ •/μ‚­μ œ) -> 즉, OnlineStore λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” 4가지가 ν•„μš”ν•˜λ‹€.

μ €μž₯ν•œ μƒν’ˆ 정보λ₯Ό λ³΄μ—¬μ€ŒμœΌλ‘œμ¨, μƒν’ˆ list pageλ₯Ό ꡬ성할 수 μžˆλ‹€.

Create -> database에 Product Collection 생성 및 μƒν’ˆμ •λ³΄ μ €μž₯
Read -> Product Collection 에 μ €μž₯ν•œ dataλ₯Ό κΊΌλ‚΄μ„œ λ³΄μ—¬μ€Œ
Update -> Product Collection μ—μ„œ μˆ˜μ •ν•˜κ³  싢은 μƒν’ˆμ˜ 가격 정보 μˆ˜μ •
Delete -> Product Collection 에 μ €μž₯ν•œ document 쀑, μ‚­μ œλ₯Ό μ›ν•˜λŠ” μƒν’ˆμ„ μ‚­μ œ

2. μƒν’ˆλ“±λ‘μ„ μœ„ν•œ API κ΅¬ν˜„

✍ μƒν’ˆμ •λ³΄λ₯Ό μ €μž₯ν•  λ•Œ, ν•„μš”μ •λ³΄λ“€(μƒν’ˆ 고유번호, μƒν’ˆλͺ…, 가격, μ„€λͺ… λ“±) 정보듀을 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. 응닡 (μ €μž₯μ™„λ£Œ λ˜λŠ” μ‹€νŒ¨ν–ˆλ‹€λ©΄ μ‹€νŒ¨)

이런 둜직으둜 ν˜λŸ¬κ°„λ‹€κ³  μƒκ°ν•˜λ©΄ λ˜κ² λ‹€!!!

3. μ½”λ“œ μž‘μ„± 및 κ΅¬ν˜„

  1. μž‘μ—… μ „ local port μ—μ„œ 확인해야 ν•˜λ―€λ‘œ, terminal μ‹€ν–‰ 및 flask run

  2. local port μž‘λ™ 확인
    = app_route("/") λ’€ μ–΄λ–€ 값이 λΆ™λŠλƒμ— 따라 API μš”μ²­μ„ λ°›κ²Œ λœλ‹€.
    뒀에 /home μ΄λΌλŠ” 값이 λΆ™κ²Œ λœλ‹€λ©΄, home이 root κ²½λ‘œκ°€ λ˜λŠ” 것이닀.
    즉, localport/home -> Hello, World! κ°€ 좜λ ₯이 λœλ‹€.

  3. κ²°κ³Ό 화면을 확인할 λ•Œ, λ˜λŠ” λ‹€λ₯Έ μž‘μ—… ν›„ κ³„μ†ν•΄μ„œ 화면을 확인 ν•  λ•Œ flask run을 λ°˜λ³΅ν•΄μ„œ μ‹€ν–‰ν•΄ μ£Όμ–΄μ•Ό ν•˜λ―€λ‘œ, ν•΄λ‹Ή μ½”λ“œ 및 py-3 app.py μ‹€ν–‰
    -> (상단 img 14~15번 쀄)

    μ •μƒμ μœΌλ‘œ 싀행이 λ˜μ–΄μ•Ό ν•˜λŠ” 상황인데 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€. 😐

    flaskκ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ§€ μ•Šμ•„ 찾을 수 μ—†λ‹€λŠ” 것 κ°™μ•˜λ‹€.
    μ§€λ‚œ 3편 μ—μ„œλ„ pymongo λ₯Ό 찾을 수 μ—†μ–΄ μž¬μ„€μΉ˜ ν•΄μ£Όμ—ˆλŠ”λ°, λ˜‘κ°™μ€ 경우인 것 κ°™μ•„ μ„€μΉ˜ν•΄μ£Όλ‹ˆ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜μ—ˆλ‹€..πŸ˜’

    μ•„λ§ˆ, requirements.txt μ—μ„œ package 듀이 μ •μƒμ μœΌλ‘œ μ„€μΉ˜λ˜μ–΄ μžˆμ§€ μ•Šμ€ 것 κ°™μ•˜λ‹€. (일일이 pip install을 λ‹€ μ‹œμΌœμ£Όμ—ˆλ‹€ γ… γ… )

  1. μƒν’ˆ 등둝 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 둜 μ£Όμ†Œκ°€ μ‹œμž‘λœλ‹€.

    말둜 ν‘œν˜„ν•˜κΈ°λ³΄λ‹¨ μ—­μ‹œ 그림이 짱이닀 ^__^

  1. μƒν’ˆ 등둝 API ν•„μš” λΆ€λΆ„ μž‘μ„±
    = μƒν’ˆλ“±λ‘ registμ—μ„œ ν•„μš”ν•œ 뢀뢄은 전달받은 μƒν’ˆ 정보 , μ €μž₯ν•˜λŠ” 일 2κ°€μ§€λ‘œ ꡬ성할 수 μžˆλ‹€.
  • models/product.py 생성 μ „
  • models/product.py 생성 ν›„

= 생성 μ „κ³Ό 생성 후에 λŒ€ν•œ μ„€λͺ…은 6λ²ˆμ— !!

  1. models/product.py 생성

    = 사싀 models λ‚΄λΆ€μ˜ product.py νŒŒμΌμ€ μƒμ„±ν•˜μ§€ μ•Šμ•„λ„ 상관이 μ—†λ‹€.
    ν•˜μ§€λ§Œ, form_data의 κ°’κ³Ό insert_one의 값을 보기 μ’‹κ²Œ 효율적으둜 λ°”κΏ€ 수 μžˆκ² λ‹€λŠ” 생각이 λ“€μ–΄ λ‚˜λ¦„λŒ€λ‘œ 정리λ₯Ό ν•΄λ³΄μ•˜λ‹€.

    1. μš°μ„ , μ €μž₯ν•˜λŠ” codeλ₯Ό models > product.py νŒŒμΌμ— μƒμ„±ν•œλ‹€.
    2. mongodb include
    3. product 에 λŒ€ν•œ 정보 λ°›μŒ
    4. controllers > product 의 정보듀을 models > product 둜 λ„˜κ²¨μ€€λ‹€. (각각의 정보λ₯Ό κΊΌλ‚΄μ„œ λ„£μ–΄μ£Όλ˜κ±Έ form_data둜 ν•œλ²ˆμ— λ„˜κ²¨μ€„ 수 있게 λ˜μ—ˆλ‹€.)
  2. API ν…ŒμŠ€νŠΈ

    1. Insomnia program μ„€μΉ˜
    2. Create -> Request Collection
    3. products
    4. New request -> regist/방식은 Post/ κ΅¬μ‘°λŠ” multipart-form
    5. μ£Όμ†Œ μž‘μ„± (http://127.0.0.1:5000 포트)
      http:://127.0.0.1
    6. name/price/description μƒν’ˆμ •λ³΄ 전달

    🎲 Insomnia ν™”λ©΄

    1. MongoDB Compass 접속
      = online_store DB에 μ§€λ‚œμ‹œκ°„ testλ₯Ό μœ„ν•΄ λ§Œλ“  test_connection 만 μžˆμ„ν…Œμ§€λ§Œ, products collection이 μƒμ„±λ˜μ–΄ μžˆμ„ 것이닀.
      click μ‹œ μ „μ†‘μ‹œν‚¨ documents 도 μƒμ„±λ˜μ–΄ μžˆμ„ 것이닀.

    🎲 MongoDB ν™”λ©΄

μƒν’ˆ 등둝에 κ΄€ν•œ λ‚΄μš©μ€ λ§ˆλ¬΄λ¦¬λ˜μ—ˆλ‹€!

κ³„νšμ€ 8μ›” 막바지 κ°œκ°• 전에 온라인 μŠ€ν† μ–΄λ₯Ό 마무리 μ‹œν‚€λ € ν•˜μ˜€λŠ”λ°, 쒋은 κΈ°νšŒκ°€ 생겨 3μ§Έμ£ΌλΆ€ν„° 업무 μ™Έμ˜ μƒˆλ‘œμš΄ 개인 ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•˜κ²Œ λ˜μ—ˆλ‹€.

속도λ₯Ό λ‚΄μ–΄ 온라인 μŠ€ν† μ–΄λΆ€ν„° λΉ¨λ¦¬πŸ˜‚ 끝내도둝 ν•΄μ•Όκ² λ‹€ !

λ‹€μŒ μ‹œκ°„μ—λŠ” μƒν’ˆ 이미지 μ—…λ‘œλ“œ κΈ°λŠ₯을 κ΅¬ν˜„ν•΄ 보도둝 ν•˜κ² λ‹€. 😎

profile
πŸ±β€πŸ Front End Developer

0개의 λŒ“κΈ€