๐ Front End Developer ์ Back End ๋์ ๊ธฐ ! ๐
์ด ๊ธ์ PROJECT LION : ํธ์ฝ์น ๊ฐ์ฌ๋์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ฐธ๊ณ ํ ๊ธ์ ๋๋ค.
์์ ์ค, ๊ฐ๋ฐ๊ณผ์ ์ ๋ฆฌ ๋ฐ issue๊ฐ ๋์๋ ๋ถ๋ถ๋ค์ ๊ณต์ ๋ฐ ๊ธฐ๋กํ๊ณ ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
โ ์ํ ๊ตฌ๋งค์ ๋ํ ์ ๋ฐ์ ์ธ ์์๋ฅผ ๊ทธ๋ ค๋ณด๊ณ ์ดํดํ ํ ๋์ด๊ฐ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ ๋๋ต์ ์ธ ์์๋ฅผ ๊ตฌ์ฑํด๋ณด์๋ค.
์ฐ์ (1) ์ํ ์์ธ ํ์ด์ง ์ ์ ํ -> (2)๊ตฌ๋งคํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํ ์ -> (3)์ฃผ๋ฌธ์ ์ ๋ณด ์ ๋ ฅ page๊ฐ ๋์ค๊ฒ ๋๊ณ ,
(4)์ฃผ๋ฌธ์ ์ ๋ณด ์ ๋ ฅ ํ ๊ฒฐ์ ๋ฅผ ํด๋ฆญ ์ -> (5)๊ฒฐ์ ์ฐฝ ๋ฐ ๊ฒฐ์ ์๋ฃ ํ์ด์ง๊ฐ ํธ์ถ๋๋ค.
๊ทธ ํ, (6)์ํ๊ตฌ๋งค์๋ฃ ํ์ด์ง๊ฐ ํธ์ถ๋๋ฉฐ -> (7)๊ตฌ๋งค์ํ๋ชฉ๋ก์ ํ์ธํ ์ ์๋ ํ์ด์ง๊ฐ ํธ์ถ๋๊ณ -> (8)๊ตฌ๋งค ๊ฒฐ๊ณผ ํ์ด์ง๊ฐ ํธ์ถ๋๋ ํ์์ด๋ค.
์ ์ฅํ๋ ์๊ณ ๋ฆฌ์ฆ ์ญ์ ํฌ๊ฒ ์๊ฐํด ๋ณธ๋ค๋ฉด,
(1) ๊ฒฐ์ ๋ฒํผ ํด๋ฆญ ์ ์ฃผ๋ฌธ์ ๋ณด๊ฐ ์์ฑ๋๊ณ -> (2)์ํ ๊ตฌ๋งค ์๋ฃ ์ ์ฃผ๋ฌธ ์ ๋ณด์์ ์ฃผ๋ฌธ ์ํ ๊ฐ์ update ์์ผ์ค๋ค.
(3)๊ทธ ํ, ๊ฒฐ์ ๊ด๋ จ ์ ๋ณด ๋ฐ์์ -> (4)์ ์ฅ๋ ์ฃผ๋ฌธ ์ ๋ณด๋ก ๊ตฌ๋งค ์ํ ๋ชฉ๋ก ๋ฐ ๊ฒฐ๊ณผ ํ์ด์ง๋ฅผ ํธ์ถํ๋ค.
๋์๊ฐ๋ ๋ก์ง์ ์ ๋ฐ์ ์ผ๋ก ์ดํดํ์๊ณ , ์ง์ ์ฝ๋๋ฅผ ์ง๋ณด๋ฉด์ ๊น๊ฒ ์ดํดํด ๋ณด๋๋ก ํ๊ฒ ๋ค.
๐ html ์ฝ๋ ๋ฐ bootstrap์ ํ์ฉํ ์คํ์ผ ์์ ์ ์์ธํ ์ค๋ช ์ ํ๊ธฐํ์ง ์๊ฒ ๋ค.
- ์์ธํ์ด์ง > ๊ตฌ๋งคํ๊ธฐ ๋ฒํผ ์์ฑ
= ํด๋น ๊ตฌ๋งคํ๊ณ ์ ํ๋ ์ํ์ ๊ณ ์ id๊ฐ์ ๊ฐ์ง๊ณ order ์ฃผ์(๊ตฌ๋งค ํ์ด์ง)๋ก ์ด๋
- ๋ฒํผ ๋๋ฆด ์ ์ฃผ๋ฌธ ๊ฐ๋ฅํ ํ์ด์ง API ์์ฑ(controllers > product.py)
๊ฐ์ ๊ฐ์ง๊ณ render_template ์ฃผ์๋ฅผ order_form.html page๋ก ์ด๋์ํจ๋ค. (์ฃผ๋ฌธ ํ์ด์ง์๋ ์ํ ์ ๋ณด๊ฐ ํ์ํ๋ฏ๋ก product ๋๊ฒจ์ค)
order_form.html ์์ฑ ๋ฐ ๊ตฌ์กฐ์์ฑ
= html ์ฝ๋ ๊ตฌ์กฐ ๋ฐ bootstrap class๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ํผ์ ์์ฑํ๋ค.๐ ์ฃผ์ํ ์ ์, ๊ฐ input์๋ ๊ณ ์ id๊ฐ ๋ฐ name๊ฐ์ ์ด์ฉํด ๊ฐ์ ์ ์ก์์ผ์ผ ํ๋ค.
์ฌ๊ธฐ์, ์ฐํธ๋ฒํธ ์ฐพ๊ธฐ๋ฅผ ํด๋ฆญ ์ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ API์ ๋ค์์์ ์ ๊ณตํด์ค๋ค.
๋ค์ API ์์ ์ฝ๋๋ฅผ ๋ณต์ฌํ์ฌ(์ฌ์ฉ์๊ฐ ์ ํํ ๊ฐ ์ด์ฉํ๊ธฐ -> ์์ ์ฝ๋๋ณด๊ธฐ), onlinestore ์ฃผ๋ฌธ ํผ์ ๋ง์ถฐ input๊ฐ ๋ฐ button์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด ๋๋ค. (script๋ ๊ฑด๋๋ฆด ๊ฒ์ด ์๋ค.)
์ฃผ๋ฌธ ์์ฑ api
= product์ ๋ณด๊ฐ ํ์ํ๋ฏ๋ก product_id๋ฅผ ๋ฐ์ ํ/order ๋ฐ post ๋ฐฉ์ ์ด์ฉorder ํจ์ํ ์ ์ธ ๋ฐ product_id๋ฅผ ์ฃผ์์์ ๋ฐ์์จ๋ค.
๊ทธ ํ product์ ๋ํ ์ ๋ณด๋ฅผ product_id๋ฅผ ๊ฐ์ง๊ณ ์ฐพ์์ฌ ๊ฒ์ด๋ฏ๋ก, ์ฃผ๋ฌธ์ ๋ณด๋ฅผ ์ ์ฅํ ๋ ์ํ์ ๋ํ ์ ๋ณด ์ญ์ ์ ์ฅํ๋ค.(์ด๋ค ์ํ์ ๊ตฌ๋งคํ์ง ํ์ธํด์ผํจ)
= input์ผ๋ก ๋ค์ด์ค๋ ๋ฐฐ์ก์ง ์ ๋ณด์ ์ฃผ๋ฌธ์ ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ๋ ์ฌ์ฉ
= order collection์ insert_one์ด๋ผ๋ ํจ์๋ก product์ form_data, user์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ ๊ฒ์ด๋ค. (order.py file์ models ์ ์์ฑํ์ฌ ์ฌ์ฉํ ๊ฒ์ด๋ค. ์ฐ์ Order ์ฌ์ฉ)
์ด user๋ check_login์ ํ ๋ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก(๋ก๊ทธ์์์์ ์ฌ์ฉ) ๊ทธ๋๋ก ๊ฐ์ ธ์จ๋ค.
= ๋ง์ฝ ๋ก๊ทธ์ธ์ด ๋์ด์๋ค๋ฉด user์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ฌ์ฉํ ๊ฒ์ด๊ณ , ๋ก๊ทธ์ธ์ด ๋์ด์์ง ์๋ค๋ฉด return ๊ฐ์ผ๋ก ๋๋ ค๋ณด๋ผ ๊ฒ์ด๋ค.๐ check_login ๋ฐ redirect_to_signin_form ์ฌ์ฉ์ํด import ํ์
- models > order.py ์์ฑ
= order class ์์ฑ ํ db์ฐ๊ฒฐ, insert_one method์ ์ฌ์ฉํ์ฌ product, form, user๊ฐ์ ๋ฐ์์จ๋ค.๊ทธ ํ, form์์ ์ ์ก๋ data๋ค์ ๋ฐ์์์ db์ ์ ์ฅ์ํจ๋ค.
order ํ์ฑํ
= ์์ฑ์ ํ๋ค๋ฉด, ์ฌ์ฉ์ ์ํด์๋ ๋ฐ๋์ import๊ฐ ํ์ํ๋ค.์์ ์ ํ๋ฉด์ ์์ฃผ ๊น๋จน๋ ์ํฉ์ด ๋ฐ์ํ๊ณ , ๋ฐ๋์ import๊ฐ ํ์ํ๋ค!!!!
์ฃผ๋ฌธ ์์ฑ API > return ๊ฐ ์์ฑ
๐ ํ์ฌ ์ฃผ๋ฌธํ ์คํธ๋ ์ฃผ๋ฌธ์์ฒญ ์ db์ ๊ฐ์ด ์ ์ฅ๋๋ ๊ฒ์ ํ์ธํ๋ ์ฉ๋์ด๋ฏ๋ก, ๊ฐ๋ง ์ ๋๋ก ์ ์ก๋๋ค๋ฉด ์ฃผ๋ฌธ์๋ฃ ํ์ด์ง๋ก ์ด๋์ํฌ ๊ฒ์ด๋ค.render_template ์์ฒญ ํ payment_complete.html page๋ก ์ด๋์์ผ์ค๋ค.
- payment_complete.html ์์ฑ
= ์ฃผ๋ฌธ์๋ฃ title๋ฐ ๋ด์ฉ์ผ๋ก ๊ฐ๋จํ๊ฒ ํ์ด์ง ์ด๋ ํ์ธ ์ฉ๋๋ก ์ฒ๋ฆฌํด์ค๋ค.
- form ์ ์ก ๊ฐ ๋ณ๊ฒฝ
= ์ด๋ค ์ํ์ ๊ตฌ๋งคํ ๊ฒ์ธ์ง์ ๋ํ ๊ณ ์ id๊ฐ๊ณผ /order ๋ก action๊ฐ์ ์์ฒญ์ํจ๋ค.
- ์ฃผ๋ฌธ ์ ๋น๋ก๊ทธ์ธ ์ฒ๋ฆฌ ํ์ธ
= ๋น๋ก๊ทธ์ธ ์ ์ ๊ฐ ์ฃผ๋ฌธ ์ ์ฃผ๋ฌธ ํ์ด์ง๋ก ์ด๋ํ ์ ์๋๋ก API์์ check๋ฅผ ํด๋์์ผ๋ฏ๋ก, ๋ก๊ทธ์ธ ํ ์ฃผ๋ฌธ์ ํด์ผํ๋ค.
- ์ค์ ์ฃผ๋ฌธ ํ ์คํธ
= ์ฃผ์, ๊ตฌ๋งค์ ์ด๋ฆ, ์ฐ๋ฝ์ฒ ์ ๋ณด๋ฅผ ๋ด์์ ์ฃผ๋ฌธํ๊ธฐ(form ์ ์ก) ๋ฒํผ์ ํด๋ฆญ ์ db์ data๋ค์ด ์ ์ฅ๋๋ค.
= ์ฃผ๋ฌธ ์์ฒญ ์ ์ฃผ๋ฌธ์ฑ๊ณต ํ์ด์ง๋ก ์ด๋
= ์ค์ ๋ก db์ order.py ์์ ๋ด์ data๋ค์ ํ์ธํ ์ ์๋ค.
์ด์ฒ๋ผ ์ฃผ๋ฌธ์๊ฐ ์์ ์ ์ ๋ณด๋ฅผ ์ ๋ ฅ ํ ์ฃผ๋ฌธ์ ์์ฒญํ ์ ์์ฒญ๋ data๊ฐ๋ค์ด db์ ์ ์์ ์ผ๋ก ๋ด๊ธฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฒฐ์ ๋ชจ๋์ ์ฃผ๋ฌธ์๋ฃ๋ ๋ชฉ๋ก๊ณผ ์์ธ์ ๋ณด๋ฅผ ํ์ธํ๋ ํ์ด์ง๊น์ง ์์ฑ ํ, ์์ ํด๋ณด๊ฒ ๋ค.
๋ค์ ์๊ฐ์๋ ์ฃผ๋ฌธ์๋ฃ ๋ชฉ๋ก ๋ฐ ์์ธ์ ๋ณด ํ์ธ ํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ๋ค.