๐ Front End Developer ์ Back End ๋์ ๊ธฐ ! ๐
์ด ๊ธ์ PROJECT LION : ํธ์ฝ์น ๊ฐ์ฌ๋์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ฐธ๊ณ ํ ๊ธ์ ๋๋ค.
์์ ์ค, ๊ฐ๋ฐ๊ณผ์ ์ ๋ฆฌ ๋ฐ issue๊ฐ ๋์๋ ๋ถ๋ถ๋ค์ ๊ณต์ ๋ฐ ๊ธฐ๋กํ๊ณ ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
โ ๊ฒฐ์ ๊ฐ ์๋ฃ๋๋ค๋ฉด, ์๋ฃ์ ๋จ๋ฉด์ ์ธ ๋ถ๋ถ์ด ์๋ ์ฌ๋ฌ ์ ์ฐจ๋ฅผ ์๊ฐํด ๋ณด์์ผ ํ๋ค. ์ฐ์ , ๊ฐ๋จํ ๋ก์ง์ ์๊ฐํด๋ณด๋ฉด
(1) ๊ฒฐ์ ๊ฐ ์๋ฃ๋๊ณ
(2) ๊ฒฐ์ ๊ฐ ์ค์ ๋ก ์ ์์ ์ผ๋ก ์๋ฃ๋์๋์ง ํ์ธํ๋ ์ ์ฐจ๊ฐ ํ์ํ๋ฉฐ
(3) ๊ฒฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ
(4) ์ฃผ๋ฌธ document status๋ฅผ ์๋ฃ ์ํ๋ก ์
๋ฐ์ดํธ ์ํค๋ API๊ฐ ํ์ํ๋ค.
๊ฐ ์์๋ณ๋ก ์ฝ๋๋ฅผ ์ง์ API๋ฅผ ์ถ๊ฐ์์ผ ๋ณด๊ฒ ๋ค.
- route ๋ฐ ํจ์ ์์ฑ
= complete ์ฃผ์๋ก ๋ฐ๊ณ , ํจ์๋ฅผ ์์ฑํ์ผ๋ฉฐ ๊ฒฐ์ ์ฑ๊ณต ๋ํ ๋ก๊ทธ์ธ์ด ๋์ด์๋ค๋ ์ ์ ํ์ ์งํ๋๋ฏ๋ก ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐ์์ผฐ๋ค.
- request data ๋ฐ ๊ฒฐ์ ๊ด๋ จ id๊ฐ ๋ฐ์์ค๊ธฐ
= request_data์ ๊ฒฝ์ฐ์๋ payment.html file ๋ด๋ถ์ ajax๊ฐ ์์ data๋ฅผ ๋ปํ๊ณ , ๊ทธ data ์์๋ imp_uid๋ฐ merchant_uid์(๊ฒฐ์ ์ ํ์ํ data๊ฐ๋ค)์ ๋ด์๋ ๊ฒ์ด๋ค. ์ด ๊ฐ๋ค์ ๋ฐ์์์ ์ ์ฅํด์ผ ํ๋ฏ๋ก ๊ฐ์ ธ์จ๋ค.๐ payment.html ์ฐธ๊ณ
- ๊ฒฐ์ ๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋์๋์ง ํ์ธ
= ํ์ธ์ ์ํด์๋ iamport API๋ฅผ ์ด์ฉํด์ ํ์ธํด์ผ ํ๋๋ฐ, API site์์๋ node๋ฅผ ํ์ฉํ์ฌ ์์ ์ ํด๋์๋ค.๐ตโ๐ซ
๊ทธ๋ฌ๋ฏ๋ก, node ์ฝ๋๋ฅผ ํ์ธํ์ฌ python code ๋ก ์๋ง๊ฒ ์์ ์ ํด ๋ณด๊ฒ ๋ค.(1) ์ฐ์ , API ์์ url์ ์ฌ์ฉํ๋ค.
(2) data key(iamport ๊ด๋ฆฌ์ ํํ์ด์ง ์ฐธ์กฐ)
(3) headers ์ ์ headers = {'Content-Type': 'application/json'}
= application/json type์ผ๋ก ๋ณด๋ด๊ฒ ๋ค๊ณ ์ ์ธ(4) ์์ฒญ ๋ณด๋ด๊ธฐ = ๋๋ฌด ์ ์ ์ด ์๋ค. ํ์ง๋ง ์ดํด๋ฅผ ์ํด์๋ ์ด์ฉ ์ ์์๋ค(?)
๊ฐ์ ๋ณ์์ ๋ด๊ณ , ๊ทธ ๋ณ์๊ฐ ์ด๋์ ์ ์ฅ๋๊ณ ์ด๋์ ๋ฟ๋ ค์ง๋์ง ์ ํํ ์ดํดํ๊ณ ๋์ด๊ฐ์ผ ํผ๋์ ์ค์ผ ์ ์๋ค.์ฐ์ url, headers, data ๊ฐ์ res ๋ณ์์ ๋ด์๋ค.
= request ๋ฐ json์ด import ๋์ด ์์ง ์์ผ๋ฏ๋ก, ์ฌ์ฉ์ ์ํด์ import ์์ผ์ค๋ค.res = res.json()
๊ทธ ํ, response๋ฅผ json์ผ๋ก ๋ณํํ์ฌ ๋ค์ res ๋ณ์์ ๋ด์์ค๋ค.
= API๋ฅผ ์ดํด๋ณด๋ฉด, data๋ฅผ ๊ฐ์ผ getToken์ data.response์ access token ์ผ๋ก ๋ฐ์์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด ์ฝ๋๋ฅผ ๋์ผํ๊ฒ ์์ ํ๋, python์ผ๋ก ๋ณ๊ฒฝํ๋ฉด
= response๋ก ์ ๊ทผํ์ฌ access_token์ ๊ฐ์ ธ์จ๋ค.= ๊ฒฐ์ ์ ๋ณด๋ฅผ ์กฐํํ ์ ์๋ API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ token์ ๋ฐ๊ธ๋ฐ์๊ณ , ๊ทธ ๋ฐ๊ธ๋ฐ์ token์ ์ด์ฉํ์ฌ ์กฐํํ ์ ์๊ฒ๋ ์์ ํด ์ค ์ฝ๋์ด๋ค.
๋ฌผ๋ก API ์์์ ํด๋น ์ฝ๋๊ฐ node๋ก ์์ ๋์ด ์๊ณ , python ํ์์ ๋ง๊ฒ ๋ณํ์์ผ ์ฃผ์๋ค.
๐ ์ฐธ๊ณ )
= ๊ทธ ํ, request๋ฅผ get๋ฐฉ์์ผ๋ก ์คํํ์ฌ json์ผ๋ก ๋ถ๋ฌ์จ๋ค. ( url ๋ฐ headers)
๊ฐ์ ธ์จ ํ response key๊ฐ์ผ๋ก payment_data๋ฅผ ๊บผ๋ด์จ๋ค.
= payment data์ payment_data ๋ด๋ถ์ ์ค์ ๊ฒฐ์ ํ ๊ฐ(amount) ์ ์ํ๊ฐ๊ฒฉ(product > price) ๊ฐ ๊ฐ๋ค๋ฉด -> ์ ์์ ์ผ๋ก ๊ฒฐ์ ๊ฐ ์๋ฃ๋ ๊ฒ์ด๋ค.
(status ๊ฐ์ success๋ก ์ธํ ํด์ค๋ค.)= ๊ทธ ๊ฐ๊ฒฉ์ order์์ ์ฐพ์์ค๋ค. order ๊ฐ ์๋ค๋ฉด return ๊ฐ์ ๋์์ค๋ค.
= ๊ฒฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด insert_one์ ์ด์ฉํ์ฌ ์ฃผ๋ฌธ ์ ๋ณด์, ๊ฒฐ์ ์ ๋ณด์, ์ํ๋ฅผ ์ ์ฅํด ์ค๋ค.
payment class๋ ํ์ฌ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก, ์์ฑํด ์ฃผ์ด์ผ ํ๋ค.
(5) models > payment.py ์์ฑ
= ์ฃผ๋ฌธ์ ๋ณด, ๊ฒฐ์ ์ ๋ณด, ์ํ๋ฅผ ๋ฐ์์จ๋ค.
(6) payment ์์ฑ ํ import
(7) ๋น ์ ์์ ์ธ ๊ฒฐ์ ์ผ ๊ฒฝ์ฐ
= ์ด๋ ๊ฒ ๊ฒฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์น ํ, ์ฃผ๋ฌธ document status ์ํ๋ก update ์์ผ์ฃผ์ด์ผ ํ๋ค.
(8) ์ฃผ๋ฌธ document status ์ํ๋ก update
= status ๊ฐ์ complete๋ก ์ง์ ํด์ฃผ๊ณ , status ๊ฐ๊ณผ merchant_uid ๊ฐ์ update ์์ผ์ค๋ค.
๋ค ์๋ฃ๊ฐ ๋์๋ค๋ฉด, order_id๋ merchant_uid ๊ฐ์ผ๋ก, message๋ success ๊ฐ์ผ๋ก return ์ํจ๋ค.
(9) order update_one ( models > order.py )
= ์ด๋ค ์ฃผ๋ฌธ์ ๋ณด๋ฅผ update ํ ๊ฒ์ธ์ง ํ์ธ
payment.html ajax ๋ด๋ถ์์ ๊ฒฐ์ ๊ฐ ์ฑ๊ณต๋ ๊ฒฝ์ฐ ์์ฒญ ์ ์์ฑํ API๋ก ๋ค์ด์์ ๊ฒฐ์ ํ์ธ ๋ฐ ๊ฒฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ฃผ๋ฌธ์ํ๋ฅผ update ํด์ฃผ๊ฒ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค ๐
๊ธฐ์กด API๋ฅผ ํ์ฉํ์ฌ python ํ์์ ๋ง๊ฒ ์์ ํ๋ค๋ณด๋ ์๊ฐ๋ ๋ฐฐ๋ก ๊ฑธ๋ฆฌ๊ณ ๊ตฌ๋ฌธ์ด ์์ง ์ต์์น ์๋ค.
์ด๋ฒ ์์ ์ด ๋ง๋ฌด๋ฆฌ๋๋ฉด, ์ฌ๋ฌ type์ ์ผํ๋ชฐ๋ ์์ฑํ๊ณ ๊ฐ๋จํ์ง๋ง ๋ค๋ฅธ ์กฐ๊ฑด๋ถ๋ค์ ์ฃผ์ด ์ ํ์ง๋ฅผ ๋ค์ํ๊ฒ ์์ฑํด ๋ณด๋ ค๋ ๊ณํ์ ๊ฐ์ง๊ณ ์๋ค!
๋ค์ ์๊ฐ์๋ API๊ฐ ์ฑ๊ณต์ด ๋๋ฉด ์ ๋ณด๋ฅผ ajax ๋ด๋ถ done data์ ์ ๋ฌํ๋ ์์ ์ ํด ๋ณด๊ฒ ๋ค.