๐Ÿฆ Python Online Store ๋งŒ๋“ค๊ธฐ 20ํŽธ - ์ƒํ’ˆ ๊ฒฐ์ œ(1)

yohan-record[web]ยท2022๋…„ 8์›” 22์ผ
0

python onlinestore ๊ฐœ๋ฐœ์ผ์ง€

๋ชฉ๋ก ๋ณด๊ธฐ
20/25
post-thumbnail

๐ŸŽˆ Front End Developer ์˜ Back End ๋„์ „๊ธฐ ! ๐ŸŽˆ

์ด ๊ธ€์€ PROJECT LION : ํ˜ธ์ฝ”์น˜ ๊ฐ•์‚ฌ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ์ฐธ๊ณ ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์ž‘์—… ์ค‘, ๊ฐœ๋ฐœ๊ณผ์ • ์ •๋ฆฌ ๋ฐ issue๊ฐ€ ๋˜์—ˆ๋˜ ๋ถ€๋ถ„๋“ค์„ ๊ณต์œ  ๋ฐ ๊ธฐ๋กํ•˜๊ณ ์ž ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

1. ๊ตฌ๋งค ํ”„๋กœ์„ธ์Šค

โœ ์šฐ์„ , ์ƒํ’ˆ์„ ๊ตฌ๋งค ํ›„ ๊ฒฐ์ œํ•˜๋Š” ๊ณผ์ •์— ์žˆ์–ด์„œ ํ•ด๋‹น ๋กœ์ง์„ ์ƒ๊ฐ๋‚˜๋Š”๋Œ€๋กœ ์ ์–ด๋ณด๊ฒ ๋‹ค.

๊ฒฐ์ œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๊ฒฐ์ œ ์š”์ฒญ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜ค๊ณ  -> ๊ฒฐ์ œ ์ฐฝ์ด ์˜คํ”ˆ ๋˜๋ฉฐ(ํ†ต์ƒ์ ์œผ๋กœ popup์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค) -> ๊ตฌ๋งค์ž๊ฐ€ ๊ฒฐ์ œ๋ฅผ ์™„๋ฃŒํ•  ์‹œ -> ๊ฒฐ์ œ ํ™•์ธ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๊ณ  -> ์ฃผ๋ฌธ์ด ์™„๋ฃŒ๋˜๋ฉฐ (๊ฒฐ์ œ ๊ธˆ์•ก ๋ฐ ์ฃผ์†Œ ํ™•์ธ) -> ์ƒํ’ˆ์„ ๊ตฌ๋งค ์™„๋ฃŒ ์‹œํ‚จ๋‹ค.

๊ฒฐ์ œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ์— ์žˆ์–ด์„œ๋Š” iamport๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ฉฐ,

iamport -> ๊ฒฐ์ œ ์š”์ฒญ ์‹œ ๊ฒฐ์ œ ์ฐฝ์„ ์—ด์–ด์ฃผ๊ณ ,
์‚ฌ์šฉ์ž -> ๊ฒฐ์ œ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ฒฐ์ œ ํ›„ ๊ฒฐ์ œํ™•์ธ ๋‹จ๊ณ„์—์„œ๋„ iamport API๋ฅผ ํ†ตํ•ด ๊ฒฐ์ œ๊ฐ€ ์ œ๋Œ€๋กœ ๋œ ์ง€ ํ™•์ธ ํ•  ๊ฒƒ์ด๋ฉฐ,

์ฃผ๋ฌธ์ด ์™„๋ฃŒ ๋˜์—ˆ๋‹ค๋ฉด, ์ฃผ๋ฌธ ์ƒํƒœ๋ฅผ update ์‹œ์ผœ์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ๊ฒฐ์ œ๊ฐ€ ํฌํ•จ๋œ ์ฃผ๋ฌธ์ด ์™„๋ฃŒ ๋  ๊ฒƒ์ด๋‹ค.

์ด์ „ ์‹œ๊ฐ„์—๋Š” ์ฃผ๋ฌธํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญ ์‹œ ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์™„๋ฃŒ ํŽ˜์ด์ง€๋กœ ๋„˜๊ฒผ๋‹ค๋ฉด, ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ฒฐ์ œ ์š”์ฒญ ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑ ํ›„ ๊ณ ์œ  id๊ฐ’์„ ๋„˜๊ฒจ ๋ฐ›๋Š” ๊ฒƒ ๊นŒ์ง€ ํ•ด๋ณด๊ฒ ๋‹ค.

  1. ์•„์ž„ํฌํŠธ ํšŒ์›๊ฐ€์ž…

  1. PG์‚ฌ(๋‹ค๋‚  ์ด์šฉ) ํ…Œ์ŠคํŠธ๋ชจ๋“œ ์ €์žฅ

  1. controllers > payment.py ์ƒ์„ฑ
    = ์šฐ์„ , ํŒŒ์ผ๋งŒ ์ƒ์„ฑ ํ•œ ํ›„ blueprint์—์„œ payment ๊ฐ’์œผ๋กœ ๋“ฑ๋ก์‹œ์ผœ์ค€๋‹ค(payment/filename)

  1. ๊ฒฐ์ œ ์š”์ฒญ API ์ƒ์„ฑ
    = payment๋ฅผ ์ด์šฉํ•˜์—ฌ /request ๊ฐ’์œผ๋กœ route ์‹œ์ผœ ๋Œ๋ ค์ฃผ๊ณ , request_payment ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ๋‹ค.
    = ๊ฒฐ์ œ ์š”์ฒญ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋กœ๊ทธ์ธ์ด ๋‹น์—ฐ์‹œ ๋˜์–ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋ฏ€๋กœ, ๋กœ๊ทธ์ธ์„ check ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ธฐ์กด์— ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์ค€๋‹ค.
    = ์–ด๋–ค ์ฃผ๋ฌธ์— ๋Œ€ํ•œ ๊ฒฐ์ œ์ธ์ง€์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ, order์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

find_one์„ ์ด์šฉํ•˜์—ฌ order์˜ id๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ, ์–ด๋””์„œ ๋ฐ›์•„์˜ค๋Š”์ง€์— ๋Œ€ํ•ด ๋ช…์‹œ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ, order_id ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑ ํ›„, .argument.get ์œผ๋กœ ๊ฐ’์„ ๋ฐ›์•„์˜จ๋‹ค.
์ฆ‰, ์ด ๊ฐ’์€ request api ๋กœ ๋“ค์–ด์˜ฌ ๋•Œ ? ๋’ค์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ›์•„์˜จ ๊ฐ’์€ payment.html ๋กœ ์ด๋™์‹œ์ผœ์ค€๋‹ค.


  1. app.py -> blueprint ๋“ฑ๋ก

  1. payment.html file ์ƒ์„ฑ
    = ํ˜„์žฌ ๋„˜๊ฒจ์˜จ ๊ฐ’์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด order ๊ฐ’๋งŒ ๋ฐ›์•„์˜จ ์ƒํƒœ์ด๋‹ค.

๋‹ค๋ฅธ ์ž‘์—…๋“ค์„ ๊ฑฐ์นœ ํ›„, ๋งˆ์ง€๋ง‰์— ์ฃผ๋ฌธ ํผ์„ ์ž‘์„ฑํ•œ ํ›„ ๊ฐ’์„ ์ „์†กํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ํผ์˜ ๋‚ด์šฉ๋“ค์ด ์ถœ๋ ฅ ๋  ๊ฒƒ์ด๋‹ค. (๋งˆ์ง€๋ง‰์— ํ™•์ธ ํ•ด ๋ณด๊ฒ ๋‹ค.)


  1. 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 ์ƒ์„ฑ ๊ตฌ๋ฌธ์„ ๊ฐ์‹ผ๋‹ค.


  1. models > order.py file ์—์„œ return ์ฒ˜๋ฆฌ
    = ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ, ๊ณ ์œ ๋ฒˆํ˜ธ๋ฅผ return ์‹œ์ผœ์ค€๋‹ค.

์ฆ‰, ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋Š” ์š”์†Œ๋“ค์„ new_order_doc ๋ณ€์ˆ˜๋กœ ๊ฐ์‹ธ๊ณ , ๊ทธ ๊ฐ์‹ผ ๊ฐ’์„ return ์‹œ์ผœ์ค€ ํ›„, product.py์— order_id๋ฅผ ๋ฐ›์•„์„œ redirect ์‹œ order_id๋ฅผ parameter ๋กœ ๋„˜๊ฒจ์ค€๋‹ค.


  1. payment import(controllers > product.py)

  1. ์ฃผ๋ฌธ ํผ ์ž‘์„ฑ ๋ฐ ๋„˜๊ฒจ์ค€ ๊ฐ’ ํ™•์ธ
    = ๊ฐ’์„ ๋‹ด์•„์„œ, post๊ฐ’์œผ๋กœ ์ „์†ก ์‹œ ํ•ด๋‹น ๊ฐ’๋“ค์ด ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•œ๋‹ค. (ํ˜„์žฌ payment.html file์—์„œ order ๊ฐ’ ์ถœ๋ ฅ๋˜๋„๋ก ์ž‘์—… {{order}} )

= form ๋‚ด๋ถ€์— ์ž‘์„ฑํ•œ ๊ฐ’๋“ค๊ณผ ๊ณ ์œ  id๊ฐ’์ด ์ •์ƒ์ ์œผ๋กœ ๋„˜์–ด์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž‘์—…์„ ํ•˜๋‹ค ๋ณด๋‹ˆ, ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” PG์‚ฌ ์‹ฌ์‚ฌ ๋ฐ ์—ฌ๋Ÿฌ๊นŒ์ง€ ๊นŒ๋‹ค๋กœ์šด ์ ˆ์ฐจ๋“ค์ด ๋งŽ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋œ๋‹ค ๐Ÿ˜‚

ํ•˜์ง€๋งŒ, ์‹ค์งˆ์ ์œผ๋กœ ์ง์ ‘ ์‚ฌ์šฉํ•  ์‚ฌ์—…์ž๋ฅผ ์ดˆ๋น™(?) ํ•˜์—ฌ ์‹ฌ์‚ฌ ๋ฐ ๊ฒฐ์ œ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜์—ฌ ์‚ฌ์šฉํ•ด ๋ณธ๋‹ค๋ฉด ์ ์ฐจ์ ์œผ๋กœ type ์ด ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์‡ผํ•‘๋ชฐ์„ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ํŒ๋‹จ์ด ๋“ค์—ˆ๋‹ค. (๊ณง ๊ฐœ๊ฐ•์ด๋ผ ์‹œ๊ฐ„์ด ๋ฌธ์ œ๋‹ค ์‹œ๊ฐ„์ด ใ… ใ… )

์•„๋ฌด์ชผ๋ก ๋ชฉํ‘œ์— ์ ์  ๊ฐ€๊นŒ์›Œ์ง€๊ณ ์žˆ๋‹ค !!

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ๊ฒฐ์ œ์š”์ฒญ์„ ๊ตฌํ˜„ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

profile
๐Ÿฑโ€๐Ÿ Front End Developer

0๊ฐœ์˜ ๋Œ“๊ธ€