Code Monkey home page Code Monkey logo

ali_express_dropshipping's Introduction

Ali Express Dropshipping service (AED)

๐Ÿ“„ Personal project / ๐Ÿ“… 2021.7 - 2021.11

Ali Express์—์„œ ์ œ๊ณตํ•˜๋Š” ์ƒํ’ˆ ์ •๋ณด๋ฅผ Zapiex API๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์™€ DB์— ์ €์žฅํ•˜๊ณ , ์‚ฌ์šฉ์ž๋“ค์ด drop shippingํ•  ์ƒํ’ˆ๋“ค์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

โ€‹

๐Ÿ’ก What is Zapiex API?

Zapiex API is an unofficial AliExpress API that provides the following realtime services on AliExpress

- Zapiex docs

โ€‹

๐Ÿ”– Demo link

โ€‹

๐Ÿ”– Tech stack

Backend

  • Python 3.9
  • FastAPI 0.68
  • PostgreSQL 13
  • Alembic 1.7
  • Heroku

Frontend

  • JavaScript
  • TypeScript
  • React 17.0
  • Next.js 11.1
  • Bootstrap
  • Heroku

โ€‹

๐Ÿ”– ERD

  • search_texts

    • ๊ฐ™์€ ๊ฒ€์ƒ‰์–ด๋„ ํŽ˜์ด์ง€๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ตฌ๋ณ„ํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. (Zapiex API ํ˜ธ์ถœ ์‹œ ๊ฒ€์ƒ‰์–ด์™€ ํŽ˜์ด์ง€ ์ธ์ž๋ฅผ ๋™์‹œ์— ์š”๊ตฌํ•˜๋ฏ€๋กœ)

      Ex. ('welsh corgi', 1 page) != ('welsh corgi', 5 page)

  • product_lists

    • search_text_id๋ฅผ Foreign key๋กœ ์‚ฌ์šฉํ•˜์—ฌ, search_texts ํ…Œ์ด๋ธ”๊ณผ 1-to-1 realationship์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  table์€ 3NF ์ •๊ทœํ™”๋ฅผ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค.

AED ERD

โ€‹

๐Ÿ”– Core features - Backend

๐Ÿ“Ž API

1. Product ๊ด€๋ จ APIs (products.py)

Zapiex API๋ฅผ ์‚ฌ์šฉํ•ด Ali-Express์˜ ์ƒํ’ˆ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ด์˜ค๋Š” API ๊ตฌํ˜„ (2๊ฐœ)

๊ฒ€์ƒ‰์–ด ์ž๋™์™„์„ฑ API ๊ตฌํ˜„ (1๊ฐœ)

  • search_items_by_text ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • ๊ฒ€์ƒ‰์–ด์™€ ํŽ˜์ด์ง€๋ฅผ query๋กœ ๋ฐ›์•„ Zapiex API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , Ali-Express์—์„œ ํ•ด๋‹นํ•˜๋Š” ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ด์ฃผ๋Š” API์ž…๋‹ˆ๋‹ค.
    • Zapiex API์— call ๊ฐœ์ˆ˜ ์ œํ•œ์ด ์žˆ์–ด, ์ตœ๋Œ€ํ•œ ํ˜ธ์ถœ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
      • ์ฒ˜์Œ ๊ฒ€์ƒ‰์‹œ API๋ฅผ callํ•˜์—ฌ ๊ฒ€์ƒ‰์–ด ๋ฐ ํŽ˜์ด์ง€์— ํ•ด๋‹นํ•˜๋Š” ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ ์ •๋ณด๋ฅผ ๋ฐ›๊ณ  DB์— ์ €์žฅ
      • ์ดํ›„, update date๋ฅผ ํ™•์ธํ•˜์—ฌ ํ•˜๋ฃจ๊ฐ€ ์•ˆ์ง€๋‚ฌ๋‹ค๋ฉด DB์˜ ๊ธฐ์กด data๋ฅผ ๋ฆฌํ„ด
      • ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚ฌ๋‹ค๋ฉด ์ƒˆ๋กœ API callํ•˜์—ฌ DB๋ฅผ updateํ•˜๊ณ  ๋ฆฌํ„ด
    • Zapiex API์— page๋ฅผ query๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด, pagination ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • create_details ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • ์ƒํ’ˆ์˜ id๋ฅผ query๋กœ ๋ฐ›์•„ Zapiex API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ํŠน์ • ์ƒํ’ˆ์˜ detail ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” API์ž…๋‹ˆ๋‹ค.

    • Zapiex API์—๋Š” call ๊ฐœ์ˆ˜ ์ œํ•œ์ด ์žˆ์–ด, ์ตœ๋Œ€ํ•œ ํ˜ธ์ถœ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. (search_items_by_text์™€ ๋™์ผ ๋ฐฉ์‹)

    • ์‘๋‹ต ์ฝ”๋“œ๊ฐ€ 200์ผ ๋•Œ, ์‘๋‹ต ์ •๋ณด ์ค‘ 'status'๊ฐ€ activeํ•œ ์ƒํ’ˆ์ผ ๋•Œ DB์— ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

    • Zapiex API์—์„œ ์ž…๋ ฅ๋  ์ˆ˜ ์žˆ๋Š” id์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

      • ๋น„์ •์ƒ์ ์ธ id๋ฅผ ๋˜์งˆ ๋•Œ, ์‘๋‹ต ์ฝ”๋“œ๊ฐ€ 201์ด์–ด์„œ ํ•จ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ์ข…๋ฃŒ

        Ex. '1230192314802471024333333333332433256164', 'asdf5625435', ';;;;'

      • ํ•œ๊ตญ์–ด๋ฅผ id๋กœ ๋˜์ง€๋Š” ๋“ฑ ์ด์™ธ์˜ ์ƒํ™ฉ์—์„œ๋Š” ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

        Ex. '๊ฐ•์•„์ง€'

  • autocomplete_search_text ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • ๊ฒ€์ƒ‰์–ด ์ž๋™์™„์„ฑ API์ž…๋‹ˆ๋‹ค.
    • ํ”„๋ก ํŠธ์—์„œ ๊ฒ€์ƒ‰์–ด ํ…์ŠคํŠธ๊ฐ€ ์ž…๋ ฅ๋  ๋•Œ๋งˆ๋‹ค API๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
    • DB์—์„œ ์ €์žฅ๋œ ๊ฒ€์ƒ‰์–ด ์ค‘ ํ•ด๋‹น ํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ๋ชจ๋“  ๊ฒ€์ƒ‰์–ด๋ฅผ ์กฐํšŒํ•ด ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฒ€์ƒ‰์–ด ํ…์ŠคํŠธ๋Š” ์˜์–ด ๋ฐ ์ˆซ์ž๋งŒ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ parameter์—์„œ validationํ•ฉ๋‹ˆ๋‹ค.

โ€‹

2. ์œ ์ € CRUD๊ด€๋ จ APIs (accounts.py)

User ์ •๋ณด์— ๋Œ€ํ•œ CRUD API ๊ตฌํ˜„

  • create_me ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • ์œ ์ € ์ •๋ณด๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„ ์ƒˆ๋กœ์šด ์œ ์ €๋ฅผ DB์— ์ƒ์„ฑํ•˜๊ณ  ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
    • ํŒจ์Šค์›Œ๋“œ๋Š” passlib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ bcrypt ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ํ•ด์‹œํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • DB์— ์œ ์ € ์กด์žฌ ์œ ๋ฌด๋Š” ์ด๋ฉ”์ผ์„ ํ™œ์šฉํ•ด ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • read_me ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • get_current_user dependency๋ฅผ ์‚ฌ์šฉํ•ด ํ˜„์žฌ ์œ ์ € ์ •๋ณด๋ฅผ DB์—์„œ ์กฐํšŒํ•˜๊ณ  ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
  • update_me ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • get_current_user dependency๋ฅผ ์‚ฌ์šฉํ•ด ํ˜„์žฌ ์œ ์ € ์ •๋ณด๋ฅผ DB์—์„œ ์กฐํšŒํ•˜๊ณ , ์ž…๋ ฅ๋œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ DB์—์„œ ์ˆ˜์ •ํ•˜์—ฌ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž ์ •๋ณด๋Š” Patch method๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. (Partial updateํ•ฉ๋‹ˆ๋‹ค.)
    • ๋‹ค๋งŒ, ์ด๋ฉ”์ผ์€ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • delete_me ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • get_current_user dependency๋ฅผ ์‚ฌ์šฉํ•ด ํ˜„์žฌ ์œ ์ € ์ •๋ณด๋ฅผ DB์—์„œ ์กฐํšŒํ•˜๊ณ  ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

โ€‹

3. ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ๊ด€๋ จ APIs (authentication.py)

JWT Athentication ๋ฐ Authorization API ๊ตฌํ˜„

  • login_for_access_token ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด authentication์„ ์ง„ํ–‰ํ•˜์—ฌ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋ผ๋ฉด JWT token์„ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” API์ž…๋‹ˆ๋‹ค.
    • ๋ฐœ๊ธ‰๋œ JWT๋Š” ํ”„๋ก ํŠธ ์ธก์—์„œ ์ฟ ํ‚ค๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • ํ”„๋ก ํŠธ ์ธก์—์„œ๋„ ๋งŒ๋ฃŒ ๋‚ ์งœ(1 day)๋ฅผ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•ด, ํ† ํฐ์˜ ๋งŒ๋ฃŒ์™€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ† ํฐ์ด ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋˜๋Š” ๊ฒƒ์ด ๋™์‹œ์— ์ด๋ค„์ง€๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • verify_access_token ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • ์œ ํšจํ•œ token์ธ์ง€ authorizationํ•ด์ฃผ๋Š” API์ž…๋‹ˆ๋‹ค.
    • ํ”„๋ก ํŠธ์—์„œ ํŠน์ • ํŽ˜์ด์ง€ ์ ‘๊ทผ์„ ํšŒ์›๋งŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

โ€‹

๐Ÿ“Ž Dependency

  • get_current_user ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • HTTP header๋กœ JWT ํ† ํฐ์„ ์ „๋‹ฌ ๋ฐ›์œผ๋ฉด token์„ decodingํ•ด ๊ฒ€์ฆํ•˜๊ณ , ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ DB ์กด์žฌ ์œ ๋ฌด ๋ฐ ์ •๋ณด๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
    • creat_me, login_for_access_token์„ ์ œ์™ธํ•œ ๋ชจ๋“  API๋ฅผ authorizationํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • get_db ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • DB session์„ ์—ด์–ด DB ์ž‘์—…์ด ํ•„์š”ํ•œ API์— ์ž ์‹œ ๋„˜๊ฒจ์ฃผ๊ณ , ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ session์„ ๋Œ๋ ค๋ฐ›์•„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

โ€‹

๐Ÿ“Ž ETC

  • Zapiex API๋Š” ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ
  • ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ์ •๋ณด๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์ €์žฅํ•ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. (API key, JWT secret key, DB information...) ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ
  • CORS ๋ฌธ์ œ๋Š” ๋ฏธ๋“ค์›จ์–ด(Middleware)๋ฅผ ์ด์šฉํ•ด ํ—ˆ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

โ€‹

๐Ÿ”– Trouble shooting - Backend

  • ํŠน์ • ์ƒํ™ฉ์„ Alembic autogeneration์ด ์ž˜ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • Column์˜ ํƒ€์ž… ๋ณ€ํ™” ๊ฐ™์€ alter ๊ด€๋ จ ํ…Œ์ด๋ธ” ๋ณ€ํ™”๊ฐ€ autogeneration ์‹œ ์ž˜ ๋ฐ˜์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
    • run_migrations_offline ๋ฐ run_migrations_online์— compare_type=True๋ฅผ ์„ค์ •ํ•ด์„œ ํ•ด๊ฒฐ
  • Zapiex API ํ˜ธ์ถœ ์‹œ ์ƒํ’ˆ ์ •๋ณด ๋ฆฌ์ŠคํŠธ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๊ท ์ผํ•˜๊ฒŒ ์˜ค์ง€ ์•Š๋Š” ํ˜„์ƒ ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • 20๊ฐœ์˜ ์ƒํ’ˆ์— ๋Œ€ํ•œ ์ •๋ณด ๋ฆฌ์ŠคํŠธ๊ฐ€ ์™€์•ผํ•˜๋Š”๋ฐ, ์•ฝ 15~18๊ฐœ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์˜ค๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
    • API document์—์„œ AliExpress-promoted products๋Š” ๊ทœ๊ฒฉ์ด ๋งž์ง€ ์•Š์•„ ์ œ์™ธํ•˜๊ณ  ๋ณด๋‚ด์ง„๋‹ค๋Š” ์ ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ํ”„๋ก ํŠธ ์ธก์—์„œ ๋ช‡๋ช‡ ์•„์ดํ…œ์ด ์ œ์™ธ๋˜๋”๋ผ๋„ ์•ˆ์ „ํ•˜๊ฒŒ 12๊ฐœ์”ฉ paginationํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Product detail ๊ด€๋ จ Zapiex API๋ฅผ ํ˜ธ์ถœํ•  ์‹œ input์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” id์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ƒํƒœ์ฝ”๋“œ ์‘๋‹ต ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • ๋น„์ •์ƒ์ ์ธ input์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์‹œ๋„ํ•ด๋ณด๋ฉด์„œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜๋ˆ„๋ฉฐ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • datetime ๊ฐ์ฒด ๋น„๊ต ์—๋Ÿฌ (search_items_by_text, create_details API) ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • update date๋ฅผ ๋น„๊ตํ•  ๋•Œ, TypeError: can't compare offset-naive and offset-aware datetimes ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์‹œ๊ฐ„๋Œ€๊ฐ€ ํฌํ•จ๋œ aware ํƒ€์ž… datetime ๊ฐ์ฒด(DB์˜ date)์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ naive ํƒ€์ž… datetime ๊ฐ์ฒด(์ƒˆ๋กœ ๋งŒ๋“  date) ๊ฐ„ ๋น„๊ต๋กœ ์ธํ•œ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.
    • pytz ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด naive ํƒ€์ž… ๊ฐ์ฒด๋ฅผ aware ํƒ€์ž…์œผ๋กœ ๋ฐ”๊ฟ”์„œ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • fastapi_pagination ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ ์šฉ ์‹œ ์„œ๋ฒ„ ๋ฐฐํฌ ์—๋Ÿฌ ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ

    • ์›๋ž˜ ๊ฒ€์ƒ‰์–ด ์ž๋™ ์™„์„ฑ API์—๋Š” fastapi_pagination ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ์šฉํ•ด pagination์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹ค๋งŒ, Heroku ์„œ๋ฒ„ ๋ฐฐํฌ ์‹œ TypeError: typing.ClassVar...๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
    • fastapi_pagination์„ ์ ์šฉํ•  ๋•Œ FastApi app ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ์‹ธ nested ๋˜๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•˜๋Š”๋ฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ด๋ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ ์šฉ์„ ํ•ด์ œํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

โ€‹

๐Ÿ”– Features - Frontend

  • ํŽ˜์ด์ง€๊ฐ€ ๋ณ€ํ™”ํ•ด๋„ Header, Footer ์ปดํฌ๋„ŒํŠธ๋Š” ์œ ์ง€๋˜๋Š” SPA(Single Page Application) ํ˜•ํƒœ๋กœ ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํšŒ์› ๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ์„œ๋น„์Šค ์†Œ๊ฐœ, ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ, ํŠน์ • ์ƒํ’ˆ ์ •๋ณด ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ
  • Product detail ํŽ˜์ด์ง€๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋‘˜ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋žœ๋”๋ง(Server-side rendering)์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ , ๊ทธ ์™ธ์˜ ํŽ˜์ด์ง€๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋žœ๋”๋ง(Client-side rendering)์œผ๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ
  • ํŠน์ • ํŽ˜์ด์ง€๋Š” ๋กœ๊ทธ์ธ์„ ํ–ˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ฝ”๋“œ ์˜ˆ์‹œ ํ™•์ธ
  • ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋งˆ๋‹ค API ํ˜ธ์ถœ๋กœ ์ž๋™ ์™„์„ฑ๋˜๋„๋ก Autocomplete ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ
  • ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€์— pagination ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•˜๋Š” Pagination ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์ฝ”๋“œ ํ™•์ธ
  • Bootstrap์œผ๋กœ ๋””์ž์ธ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

โ€‹

ali_express_dropshipping's People

Contributors

s64park avatar veluga29 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

ali_express_dropshipping's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.