๐ Front End Developer ์ Back End ๋์ ๊ธฐ ! ๐
์ด ๊ธ์ PROJECT LION : ํธ์ฝ์น ๊ฐ์ฌ๋์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ฐธ๊ณ ํ ๊ธ์ ๋๋ค.
์์ ์ค, ๊ฐ๋ฐ๊ณผ์ ์ ๋ฆฌ ๋ฐ issue๊ฐ ๋์๋ ๋ถ๋ถ๋ค์ ๊ณต์ ๋ฐ ๊ธฐ๋กํ๊ณ ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
โ ์ฐ์ , ์ํ์ ๊ตฌ๋งค ํ ๊ฒฐ์ ํ๋ ๊ณผ์ ์ ์์ด์ ํด๋น ๋ก์ง์ ์๊ฐ๋๋๋๋ก ์ ์ด๋ณด๊ฒ ๋ค.
๊ฒฐ์ ๋ฒํผ ํด๋ฆญ ์ ๊ฒฐ์ ์์ฒญ ํ์ด์ง๊ฐ ๋์ค๊ณ -> ๊ฒฐ์ ์ฐฝ์ด ์คํ ๋๋ฉฐ(ํต์์ ์ผ๋ก popup์ด ๋ ๊ฒ ๊ฐ๋ค) -> ๊ตฌ๋งค์๊ฐ ๊ฒฐ์ ๋ฅผ ์๋ฃํ ์ -> ๊ฒฐ์ ํ์ธ ํ๋ฉด์ด ๋ํ๋๊ณ -> ์ฃผ๋ฌธ์ด ์๋ฃ๋๋ฉฐ (๊ฒฐ์ ๊ธ์ก ๋ฐ ์ฃผ์ ํ์ธ) -> ์ํ์ ๊ตฌ๋งค ์๋ฃ ์ํจ๋ค.
๊ฒฐ์ ๋ฅผ ๊ตฌํํ๋๋ฐ์ ์์ด์๋ iamport๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ฉฐ,
iamport -> ๊ฒฐ์ ์์ฒญ ์ ๊ฒฐ์ ์ฐฝ์ ์ด์ด์ฃผ๊ณ ,
์ฌ์ฉ์ -> ๊ฒฐ์ ๋ฅผ ํ๊ฒ ๋๋ฉด ๊ฒฐ์ ํ ๊ฒฐ์ ํ์ธ ๋จ๊ณ์์๋ iamport API๋ฅผ ํตํด ๊ฒฐ์ ๊ฐ ์ ๋๋ก ๋ ์ง ํ์ธ ํ ๊ฒ์ด๋ฉฐ,
์ฃผ๋ฌธ์ด ์๋ฃ ๋์๋ค๋ฉด, ์ฃผ๋ฌธ ์ํ๋ฅผ update ์์ผ์ฃผ๋ฉด ์ ์์ ์ผ๋ก ๊ฒฐ์ ๊ฐ ํฌํจ๋ ์ฃผ๋ฌธ์ด ์๋ฃ ๋ ๊ฒ์ด๋ค.
์ด์ ์๊ฐ์๋ ์ฃผ๋ฌธํ๊ธฐ ๋ฒํผ์ ํด๋ฆญ ์ ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ์๋ฃ ํ์ด์ง๋ก ๋๊ฒผ๋ค๋ฉด, ์ด๋ฒ ์๊ฐ์๋ ๊ฒฐ์ ์์ฒญ ํ์ด์ง๋ฅผ ์์ฑ ํ ๊ณ ์ id๊ฐ์ ๋๊ฒจ ๋ฐ๋ ๊ฒ ๊น์ง ํด๋ณด๊ฒ ๋ค.
- PG์ฌ(๋ค๋ ์ด์ฉ) ํ ์คํธ๋ชจ๋ ์ ์ฅ
- controllers > payment.py ์์ฑ
= ์ฐ์ , ํ์ผ๋ง ์์ฑ ํ ํ blueprint์์ payment ๊ฐ์ผ๋ก ๋ฑ๋ก์์ผ์ค๋ค(payment/filename)
- ๊ฒฐ์ ์์ฒญ API ์์ฑ
= payment๋ฅผ ์ด์ฉํ์ฌ /request ๊ฐ์ผ๋ก route ์์ผ ๋๋ ค์ฃผ๊ณ , request_payment ํจ์๋ฅผ ํ๋ ์์ฑํ๋ค.
= ๊ฒฐ์ ์์ฒญ์ ํ๊ธฐ ์ํด์๋ ๋ก๊ทธ์ธ์ด ๋น์ฐ์ ๋์ด์ผ ํ๋ ๋ถ๋ถ์ด๋ฏ๋ก, ๋ก๊ทธ์ธ์ check ํ๋ ์ฝ๋๋ฅผ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ ์์ฑํด์ค๋ค.
= ์ด๋ค ์ฃผ๋ฌธ์ ๋ํ ๊ฒฐ์ ์ธ์ง์ ๋ํด ์๊ณ ์์ด์ผ ํ๋ฏ๋ก, order์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๋ค.find_one์ ์ด์ฉํ์ฌ order์ id๋ฅผ ๊ฐ์ ธ์ค๋๋ฐ, ์ด๋์ ๋ฐ์์ค๋์ง์ ๋ํด ๋ช ์๋์ด ์์ด์ผ ํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก, order_id ๋ณ์๋ฅผ ์์ฑ ํ, .argument.get ์ผ๋ก ๊ฐ์ ๋ฐ์์จ๋ค.
์ฆ, ์ด ๊ฐ์ request api ๋ก ๋ค์ด์ฌ ๋ ? ๋ค์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.
๋ฐ์์จ ๊ฐ์ payment.html ๋ก ์ด๋์์ผ์ค๋ค.
- app.py -> blueprint ๋ฑ๋ก
- payment.html file ์์ฑ
= ํ์ฌ ๋๊ฒจ์จ ๊ฐ์ ํ์ธํ๊ธฐ ์ํด order ๊ฐ๋ง ๋ฐ์์จ ์ํ์ด๋ค.๋ค๋ฅธ ์์ ๋ค์ ๊ฑฐ์น ํ, ๋ง์ง๋ง์ ์ฃผ๋ฌธ ํผ์ ์์ฑํ ํ ๊ฐ์ ์ ์กํ๋ค๋ฉด, ํด๋น ํผ์ ๋ด์ฉ๋ค์ด ์ถ๋ ฅ ๋ ๊ฒ์ด๋ค. (๋ง์ง๋ง์ ํ์ธ ํด ๋ณด๊ฒ ๋ค.)
- request_payment api๋ฅผ ํธ์ถ์ํฌ ๋ถ๋ถ ์์ฑ
= ์ฃผ๋ฌธํ๊ธฐ ๋ฒํผ์ ํด๋ฆญ ์ ํด๋น ์ฃผ์๊ฐ์ผ๋ก post๊ฐ์ด ์ ์ก๋๋๋ฐ, ๊ฐ์ด ์ ์ก๋ ๋ request_payment API ๊ฐ ํธ์ถ์ด ๋์ด์ผ ํ๋ค.
= ๊ทธ๋ฌ๋ฏ๋ก, controllers > product.py file ์์ redirect ๊ฐ์ ์ด์ฉํ์ฌ ํธ์ถ ์์ผ ์ฃผ๊ณ , order_id parameter๋ฅผ ์ด์ฉํ๋ค.๐ api ๋ค order_id๋ insert_one, ์ฆ ์๋ก ์์ฑ ์ order_id๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ฏ๋ก, order_id ๋ณ์๋ฅผ ์์ฑํ์ฌ insert_one ์์ฑ ๊ตฌ๋ฌธ์ ๊ฐ์ผ๋ค.
- models > order.py file ์์ return ์ฒ๋ฆฌ
= ์์ฑ๋์์ ๋, ๊ณ ์ ๋ฒํธ๋ฅผ return ์์ผ์ค๋ค.์ฆ, ์๋ก ์์ฑํ๋ ์์๋ค์ new_order_doc ๋ณ์๋ก ๊ฐ์ธ๊ณ , ๊ทธ ๊ฐ์ผ ๊ฐ์ return ์์ผ์ค ํ, product.py์ order_id๋ฅผ ๋ฐ์์ redirect ์ order_id๋ฅผ parameter ๋ก ๋๊ฒจ์ค๋ค.
- payment import(controllers > product.py)
- ์ฃผ๋ฌธ ํผ ์์ฑ ๋ฐ ๋๊ฒจ์ค ๊ฐ ํ์ธ
= ๊ฐ์ ๋ด์์, post๊ฐ์ผ๋ก ์ ์ก ์ ํด๋น ๊ฐ๋ค์ด ์ถ๋ ฅ๋์ด์ผ ํ๋ค. (ํ์ฌ payment.html file์์ order ๊ฐ ์ถ๋ ฅ๋๋๋ก ์์ {{order}} )= form ๋ด๋ถ์ ์์ฑํ ๊ฐ๋ค๊ณผ ๊ณ ์ id๊ฐ์ด ์ ์์ ์ผ๋ก ๋์ด์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์์ ์ ํ๋ค ๋ณด๋, ์ค์ ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ PG์ฌ ์ฌ์ฌ ๋ฐ ์ฌ๋ฌ๊น์ง ๊น๋ค๋ก์ด ์ ์ฐจ๋ค์ด ๋ง์ ๊ฒ์ผ๋ก ์์๋๋ค ๐
ํ์ง๋ง, ์ค์ง์ ์ผ๋ก ์ง์ ์ฌ์ฉํ ์ฌ์
์๋ฅผ ์ด๋น(?) ํ์ฌ ์ฌ์ฌ ๋ฐ ๊ฒฐ์ ์์คํ
์ ๋์
ํ์ฌ ์ฌ์ฉํด ๋ณธ๋ค๋ฉด ์ ์ฐจ์ ์ผ๋ก type ์ด ๋ค๋ฅธ ์ฌ๋ฌ ์ผํ๋ชฐ์ ๋ง๋ค์ด ๋ผ ์ ์๊ฒ ๋ค๋ ํ๋จ์ด ๋ค์๋ค. (๊ณง ๊ฐ๊ฐ์ด๋ผ ์๊ฐ์ด ๋ฌธ์ ๋ค ์๊ฐ์ด ใ
ใ
)
์๋ฌด์ชผ๋ก ๋ชฉํ์ ์ ์ ๊ฐ๊น์์ง๊ณ ์๋ค !!
๋ค์ ์๊ฐ์๋ ๊ฒฐ์ ์์ฒญ์ ๊ตฌํํด ๋ณด๋๋ก ํ๊ฒ ๋ค.