Skip to content

JJeonghyun/ReactProject

Repository files navigation

์†Œ๋…€์‹œ๋Œ€(JJJJ) ํŒ€ ํ”„๋กœ์ ํŠธ

22.12.09 ~ 22.12.30

0. ๐Ÿ‘ช Team Members


asd



1. ๐Ÿ’ป Project Description

  • Intro

    ๊ธฐ์กด์˜ ๋ชฉํ‘œ ํŽ˜์ด์ง€๋ฅผ ํ† ๋Œ€๋กœ ํšŒ์›๊ฐ€์ž…์„ ํ†ตํ•ด ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž๋“ค์ด ์›ํ•˜๋Š” ์ƒํ’ˆ์„ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด์•„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ํ™ˆํŽ˜์ด์ง€ ์ œ์ž‘ ๊ณ„ํš



2.:information_source: Project Information

  • Purpose

    Front๊ธฐ๋ฐ˜์˜ React์™€ BackEnd๊ธฐ๋ฐ˜์˜ Node.js(express) ๋ฐ DB๋ฅผ ๊ฒฐํ•ฉํ•œ ์›น ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ



3. ๐Ÿ“ก Main Function

  1. ํšŒ์›๊ด€๋ฆฌ

    ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ

    ๋งˆ์ดํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ์„ฑ๋ช…, ์ด๋ฉ”์ผ, ์ฃผ์†Œ, ์ „ํ™”๋ฒˆํ˜ธ, ์ด๋ฉ”์ผ ๋“ฑ ๊ฐœ์ธ์ •๋ณด ์ˆ˜์ • ๊ฐ€๋Šฅ


  1. ์ƒํ’ˆ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ

    ๊ฐ ์ƒํ’ˆ ๋ณ„๋กœ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ถ”๊ฐ€ ๊ธฐ๋Šฅ

    ๊ฐœ๊ฐœ์ธ์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‚ด์—ญ

    ์ƒํ’ˆ ์‚ญ์ œ ๊ธฐ๋Šฅ


  1. ์ƒํ’ˆ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ

    ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ƒํ’ˆ์„ ์ž์œ ๋กญ๊ฒŒ ๊ฒ€์ƒ‰

    ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด๋ฅผ ํฌํ•จํ•œ ์ƒํ’ˆ๋“ค ์ „๋ถ€ ๋‚˜์—ด


  1. ์ƒํ’ˆ ๊ตฌ๋งค ๊ธฐ๋Šฅ

    ์‚ฌ์šฉ์ž๊ฐ€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด์€ ์ „์ฒด ์ƒํ’ˆ ๊ตฌ๋งค

    ์ฒดํฌ์•„์›ƒ์„ ํ†ตํ•ด ๊ตฌ๋งคํ•œ ๋‚ด์—ญ์„ ๋งˆ์ดํŽ˜์ด์ง€์—์„œ ํ™•์ธ ๊ฐ€๋Šฅ


  1. ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€

    ๊ด€๋ฆฌ์ž ์ด๋ฉ”์ผ์„ ํ†ตํ•ด ์ƒํ’ˆ๋“ฑ๋ก ๊ฐ€๋Šฅ

    ๋ชจ๋“  ์ƒํ’ˆ๋“ค์˜ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์‚ญ์ œ ๋˜ํ•œ ๊ฐ€๋Šฅํ•œ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€



4. :trollface: Database


  • DB(Tesla) - Tables(User, Product, Cart, Order)
    • ํ…Œ์ด๋ธ”์— ๋”ฐ๋ฅธ ์ปฌ๋Ÿผ๋ช… ํšŒ์˜
      • User ํ…Œ์ด๋ธ”
        • columns : userEmail, userPw, userLastName, userFirstName, userAddress, userAddressDetail, userPhone
      • Product ํ…Œ์ด๋ธ”
        • columns : productName, productModel, productPrice, productAccount, productInfo, productImg, productHoverImg, productCategory
      • Cart ํ…Œ์ด๋ธ” (Product ํ…Œ์ด๋ธ”๊ณผ 1:N ๊ด€๊ณ„, User ํ…Œ์ด๋ธ”๊ณผ 1:N ๊ด€๊ณ„)
        • columns : account, productId, userId
      • Order ํ…Œ์ด๋ธ” (Product ํ…Œ์ด๋ธ”๊ณผ 1:N ๊ด€๊ณ„, User ํ…Œ์ด๋ธ”๊ณผ 1:N ๊ด€๊ณ„)
        • columns : account, productId, userId

5. ๐Ÿ’พ Skills


#363636




6.:recycle: Environment


Visual Studio Code Version 1.73.1

Node.js Version 16.14.2

OS : Window x64 / MacOS : Ventura 13.1



7. ๐Ÿ” Prerequisite / Usage


  • In 'express' Directory (express)

    • 'config' Directory (config.json ๋‚ด password ์„ค์ •)

      {
        "development": {
          "username": "root",
          "password": "password ์„ค์ •",
          "database": "tesla",
          "host": "127.0.0.1",
          "dialect": "mysql"
        },
        "test": {
          "username": "root",
          "password": "password ์„ค์ •",
          "database": "tesla",
          "host": "127.0.0.1",
          "dialect": "mysql"
        },
        "production": {
          "username": "root",
          "password": "password ์„ค์ •",
          "database": "tesla",
          "host": "127.0.0.1",
          "dialect": "mysql"
        }
    }

  • In 'express' Directory (Express)
npm install

  • In 'project' Directory (React)
yarn install


8. ๐Ÿ“ Distributing Roles


  • Main, Admin Pages

    -FrontEnd

    • ๐Ÿ’‚โ€โ™‚๏ธ์žฅ์ •ํ˜„

      • ์ •์ ์ธ ํŽ˜์ด์ง€

      • Header & Body & Footer Component ์ƒ์„ฑ

      • ์ตœ์ƒ๋‹จ ์Šคํฌ๋กค์ด ์•„๋‹๋•Œ Header color, background-color ์กฐ์ ˆ

      • Header ์™ผ์ชฝ ํด๋ฆญ ์‹œ (โ€/โ€) ์ฃผ์†Œ๋กœ ๋ฉ”์ธ ํŽ˜์ด์ง€ ์ด๋™

      • Header ์˜ค๋ฅธ์ชฝ RightBanners ํด๋ฆญ ์‹œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋™ ๊ฒฝ๋กœ ์„ค์ •

      • Body ์ปดํฌ๋„ŒํŠธ ์ฒซ ์Šฌ๋ผ์ด๋“œ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„

      • Body ์ปดํฌ๋„ŒํŠธ์˜ ๋‘๋ฒˆ์งธ ์Šฌ๋ผ์ด๋“œ๊ฐ€ ์•„๋‹Œ ๊ฐ€๊ฒฉ์ˆœ์œผ๋กœ 10๊ฐœ ์ƒํ’ˆ๋ฅผ ์˜ค๋ฆ„/๋‚ด๋ฆผ์ฐจ์ˆœ

      • Body ์ปดํฌ๋„ŒํŠธ ๋งˆ์ง€๋ง‰ ์˜์—ญ์€ ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์„œ map๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด ํ•˜๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์˜๋ฅ˜ ๊ด€๋ จ ์˜์—ญ์€ ๋‹ค์‹œ ์ปดํฌ๋„ŒํŠธํ™” ํ•˜์—ฌ์„œ ๋ฐฐ์น˜

      • Header ์ƒ๋‹จ ๋ฐ”์— ์˜ค๋ฅธ์ชฝ ๋ฐฐ๋„ˆ์—์„œ ๋ฉ”๋‰ด ๋ผ๋Š” ๊ธ€์”จ๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์•„์ด์ฝ˜์„ ๋ฐฐ์น˜ํ•˜๊ณ  ํ•ด๋‹น ์•„์ด์ฝ˜์„ ํด๋ฆญ ์‹œ ์˜ค๋ฅธ์ชฝ์—์„œ ์ƒˆ๋กœ์šด ๋ฉ”๋‰ด๋ฐ”๊ฐ€ ๋‚˜์˜ค๊ณ  ๋ฉ”์ธ ํŽ˜์ด์ง€๋Š” ์ž„์‹œ์ ์œผ๋กœ ๋ฐ˜ํˆฌ๋ช… ํšจ๊ณผ ์ ์šฉ

      • ๋ฉ”๋‰ด ์•„์ด์ฝ˜์ด ์ ์šฉ๋œ ํ›„ ๋ˆŒ๋ €์„ ๋•Œ ๋‚˜์˜ค๋Š” ์˜ค๋ฅธ์ชฝ ๋ฉ”๋‰ด๋ฐ”์— ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋กœ๊ทธ์ธ(ํšŒ์›๊ฐ€์ž…)์ด ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง€๋กœ ๊ฒฝ๋กœ ์„ค์ •

      • ๋ฉ”์ธํŽ˜์ด์ง€์˜ Header ๊ฐ€์šด๋ฐ Category๋“ค์„ hover ์‹œ ํ•ด๋‹น ๋ฉ”๋‰ด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” dropdown ๋ฉ”๋‰ด ๋ชฉ๋ก ์ƒ์„ฑ

      • ๋ฉ”์ธํŽ˜์ด์ง€์˜ Header ์šฐ์ธก์— ๋‹๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ƒ‰์ฐฝ์ด ๋‚˜ํƒ€๋‚˜๊ณ  ๋‹ค์‹œ ๋ˆ„๋ฅด๋ฉด ์—†์–ด์ง€๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

      • ๊ฒ€์ƒ‰์ฐฝ์— ์ž…๋ ฅ๋œ ๊ฐ’์„ queryString์— ๋‹ด์•„ ๋‹ค๋ฅธ ํŽ˜์ด์ง€์—์„œ ์ž…๋ ฅํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ „๋‹ฌ

      • ๋น„๋กœ๊ทธ์ธ ์‹œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ํด๋ฆญ ํ•ด๋„ ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ๊ฒฝ๋กœ ์ด๋™ ํ•  ์ˆ˜ ์—†๋„๋ก ์ฒ˜๋ฆฌ

      • Admin Page ๊ธฐ๋ณธ ์ •์ ์€ UI ๊ตฌ์กฐ ๊ณ„ํš ๋ฐ ๊ตฌํ˜„

      • ์ž…๋ ฅํ•  Input ํƒœ๊ทธ๋“ค ๊ณ„ํš ๋ฐ ์ƒ์„ฑ

      • ๋ฐ˜์‘ํ˜• ์›นํŽ˜์ด์ง€ ๊ตฌํ˜„

      • ๊ธฐํƒ€ ๋ณด์ˆ˜ ์ž‘์—…

-BackEnd

  • ๐Ÿ’‚โ€โ™‚๏ธ์žฅ์ •ํ˜„

    • ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ์œ ์ €๋กœ๊ทธ์ธ || ๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด ํ™•์ธ ํ›„ ์ƒํ’ˆ๋“ฑ๋ก ๊ฐ€๋Šฅํ•œ ๋ฉ”๋‰ด ๋ฒ„ํŠผ ์ถœ๋ ฅ ์œ ๋ฌด ์กฐ์ ˆ

    • ๋ฉ”์ธ ํŽ˜์ด์ง€ ์„ธ๋ฒˆ์งธ ์˜์—ญ์—์„œ ์ง€๊ธˆ ์‡ผํ•‘ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ Category๋ณ„๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ฒฝ๋กœ ์„ค์ •

    • multer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•œ ๋ชจ๋“  ์ž…๋ ฅ๊ฐ’ axios ํ†ต์‹ 

    • express server ์ €์žฅ๋œ product.json ํŒŒ์ผ์„ ์ฝ๊ณ  axios ํ†ต์‹ ์œผ๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์„ ๊ด€๋ฆฌ ์ƒํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€

    • ๊ด€๋ฆฌ์ž ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

    • ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ ์ „์ฒด ์ƒํ’ˆ๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€๋ฆฌ์ž ์ƒํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€


  • Regist, LogIn, LogOut Pages

    -FrontEnd

    • ๐Ÿ‘ฉ๊น€์„ ์ฃผ

      • ์ •์ ์ธ UI ๊ตฌ์กฐ

      • ๊ฐ๊ฐ์˜ ์ž…๋ ฅ ์ฐฝ์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ์ •๊ทœํ‘œํ˜„์‹์„ ์ด์šฉ, test ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•˜์—ฌ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ

      • ๊ฐ€์ž…์™„๋ฃŒ ์‹œ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

      • ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์—์„œ๋„ ๋ฉ”์ธํŽ˜์ด์ง€(โ€/โ€)์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ Header์ถ”๊ฐ€

      • Enter ๊ณ„์ • ์ƒ์„ฑํ•˜๊ธฐ onClick

      • ์ด๋ฉ”์ผ์„ ์ž‘์„ฑํ•˜๊ณ  ๋‹ค์Œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ด๋ฉ”์ผ์ด ๋กœ๊ทธ์ธ ๊ด€๋ จ ๋ชจ๋“ˆ์— ์ €์žฅ

      • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ฐ€์ž…ํ•œ ๋ชจ๋“ˆ์˜ ํšŒ์›์ •๋ณด๋“ค์„ ๊ฐ€์ง€๊ณ  ์™€์„œ ์ด๋ฉ”์ผ๊ณผ ๊ต ํ›„ ์ผ์น˜ํ•œ ์ •๋ณด๋“ค์ด ์žˆ์œผ๋ฉด ๋ฉ”์ธํŽ˜์ด์ง€๋กœ ์ด๋™

      • ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ๋„ ๋ฉ”์ธํŽ˜์ด์ง€(โ€/โ€)์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ Header์ถ”๊ฐ€

      • Enter ํ‚ค๋กœ ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅ

      • ๊ธฐํƒ€ ๋ณด์ˆ˜ ์ž‘์—… ๋ฐ ๋ฐ˜์‘ํ˜•

-BackEnd

  • ๐Ÿ‘ฉ๊น€์„ ์ฃผ ๐Ÿ’‚โ€โ™‚๏ธ์žฅ์ •ํ˜„

    • ํšŒ์›๊ฐ€์ž… ์‹œ ์ค‘๋ณต๊ฐ€์ž…์„ ๋ง‰๊ธฐ ์œ„ํ•œ ์ฒ˜๋ฆฌ

    • ํšŒ์›๊ฐ€์ž… ์‹œ DB ์ €์žฅ(ํ•ด๋‹น column๋“ค์„ ๋งŒ๋“ค์–ด ์ €์žฅ)

    • ๋กœ๊ทธ์ธ ์‹œ ์ž…๋ ฅํ•œ ์ •๋ณด๋“ค์ด ( ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ ) ์ผ์น˜ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด๋™ ์•ˆ๋˜๊ฒŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ


  • Search, Cart Pages

    -FrontEnd

    • ๐Ÿ‘จ์ด์žฌํ˜

      • react / css ๊ธฐ๋ณธํ‹€ ์žก๊ธฐ

      • ์„œ์น˜ํŽ˜์ด์ง€ ์ •์ ์ธ ํŽ˜์ด์ง€ ๊ตฌํ˜„

      • Search Page ์˜ ๋ฌผํ’ˆ List ํ˜•์‹ ๋ฐ˜ํ™˜

      • ๊ฒ€์ƒ‰ Input ์ฐฝ์˜ ๊ฒฐ๊ณผ๋ฅผ Search Page์— ์ „๋‹ฌ

      • Search Page ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅธ ๋ฌผํ’ˆ ๋ฐฐ์น˜

      • Search ๋กœ์ง๊ตฌํ˜„

      • Search ๋ฌผํ’ˆ ์ƒ์„ธํŽ˜์ด์ง€ ์—ฐ๊ฒฐ

      • ๋ถ€๋ถ„์ ์œผ๋กœ๋„ ๊ฒ€์ƒ‰์ด ๋˜๋Š” search ๋กœ์ง

-BackEnd

  • ๐Ÿ‘จ์ด์žฌํ˜ ๐Ÿ‘ถ๊น€์˜์ค€

    • Search Page ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ •๋ณด ์ „๋‹ฌ

    • Cart Page ๋ฌผํ’ˆ List ํ˜•์‹ ๋ฐ˜ํ™˜

    • Cart Page ๋ฌผํ’ˆ List ์ œ๊ฑฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„

    • Cart Page json ํŒŒ์ผ ์—ฐ๊ฒฐ

    • Cart Page ์ˆ˜๋Ÿ‰ , ๊ฐฏ์ˆ˜์— ๋”ฐ๋ฅธ ๊ฐ€๊ฒฉ ์—ฐ๊ฒฐ(์ˆ˜๋Ÿ‰)


  • Cart, Chart Pages

    -FrontEnd

    • ๐Ÿ‘ถ๊น€์˜์ค€

      • ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ -์ขŒ์šฐ ๋ฒ„ํŠผ์œผ๋กœ ์Šฌ๋ผ์ด๋“œ ํŽ˜์ด์ง€ ์กฐ์ ˆ -์ด๋ฏธ์ง€ ๋ฐ‘์— ์ชฝ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ -์ด๋ฏธ์ง€ ์‚ฌ์ง„์œผ๋กœ๋„ ์Šฌ๋ผ์ด๋“œ ํŽ˜์ด์ง€ ์กฐ์ ˆ

      • ์ƒํ’ˆ์— ๋”ฐ๋ฅธ ๊ณ ์œ  router query ์ฃผ์†Œ๊ฐ’ ๊ตฌํ˜„

      • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ชฉ๋กํ™” ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘

      • media query๋ฅผ ํ†ตํ•œ ๋ฐ˜์‘ํ˜• ๊ตฌํ˜„

-BackEnd

  • ๐Ÿ‘ถ๊น€์˜์ค€ ๐Ÿ‘จ์ด์žฌํ˜

    • ์ฒดํฌ์•„์›ƒ button ํด๋ฆญ ์‹œ ํ•ด๋‹น ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‚ด์—ญ๋“ค ์ฃผ๋ฌธ๋‚ด์—ญ ํ…Œ์ด๋ธ”๋กœ ์ด๋™๋˜๋ฉด์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํ…Œ์ด๋ธ”์—์„œ ์‚ญ์ œ

    • DB์—์„œ data ๋ฐ›์•„์™€ ์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ ๋ฐ ์ƒํ’ˆ ์ •๋ณด ๊ตฌํ˜„

    • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ˆ˜๋Ÿ‰์— ๋”ฐ๋ฅธ ๊ฐ€๊ฒฉ์˜ ๋ณ€ํ™” ๊ตฌํ˜„ โ†’ ์ฃผ๋ฌธ์„œ์— ์ดํ•ฉ ๊ธˆ์•ก๋ณ€ํ™”๊นŒ์ง€

    • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ชฉ๋ก์„ ์ œ๊ฑฐํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

    • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ชฉ๋ก๊ณผ DB์˜ ์—ฐ๊ฒฐ

    • ์žฅ๋ฐ”๊ตฌ๋‹ˆ DB์™€ ๋ฐฐ์—ด cartList ์—ฐ๊ฒฐ


  • User Mypage, Order Pages

    -FrontEnd

    • ๐Ÿ‘ฉ๊น€์„ ์ฃผ

      • ์œ ์ €์˜ ๋งˆ์ดํŽ˜์ด์ง€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ๋„ˆ์˜ ๊ฒฝ๋กœ ์„ค์ •

      • ์ •์ ์ธ UI ํŽ˜์ด์ง€ ๊ตฌ์กฐ ๋ฐ ๊ตฌํ˜„

-BackEnd

  • ๐Ÿ‘ฉ๊น€์„ ์ฃผ ๐Ÿ’‚โ€โ™‚๏ธ์žฅ์ •ํ˜„ ๐Ÿ‘ถ๊น€์˜์ค€

    • ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด์€ ์ƒํ’ˆ๋“ค์ด ์ฒดํฌ์•„์›ƒ์„ ๋ˆŒ๋ €์„ ๋•Œ db Order ํ…Œ์ด๋ธ”์— ์ƒ์„ฑ

    • Order ํ…Œ์ด๋ธ”์— ๋“ค์–ด๊ฐ„ ์ƒํ’ˆ๋“ค์€ Cart ํ…Œ์ด๋ธ”์—์„œ ์ œ๊ฑฐ

    • Order ํ…Œ์ด๋ธ”์— ๋‹ด๊ธด ์ •๋ณด๋“ค์„ Front์— ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ




9.:open_file_folder: Git Branch Division

  • main

    • dev

      • itemInfo

        • itemInfo UI ์™„์„ฑ, orderPage UI์™„์„ฑ
      • search

        • ๊ฒ€์ƒ‰ํŽ˜์ด์ง€ ์ •์ ์ธ ๊ธฐ๋ณธํ‹€, ๊ฒ€์ƒ‰ ํ’ˆ๋ชฉ๋“ค ๋ฐฐ์—ด๋ฐฉ์‹์œผ๋กœ ๊ตฌ์กฐ ์„ค๊ณ„
      • regist

        • ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ UI ๊ด€๋ จ
      • cart

        • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€ UI
      • mainpage

        • ๋ฉ”์ธ ํ™ˆํŽ˜์ด์ง€ UI ๊ด€๋ จ
      • dropdown

        • Header ์นดํ…Œ๊ณ ๋ฆฌ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ถ”๊ฐ€
      • productList, gallery

        • dummy jsonํŒŒ์ผ๊ณผ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ ํŽ˜์ด์ง€ ์—ฐ๊ฒฐ
      • userclone

        • ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ ๊ตฌํ˜„
      • chartpage

        • ์ฐจํŠธํŽ˜์ด์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€
      • hover

        • ์ƒํ’ˆ ์ด๋ฏธ์ง€ ๋งˆ์šฐ์Šค ํ˜ธ๋ฒ„ ์‹œ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€ ์ถœ๋ ฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„
      • adminlist

        • ๊ด€๋ฆฌ์ž ์ƒํ’ˆ๋ชฉ๋ก ํŽ˜์ด์ง€ UI ์ถ”๊ฐ€
      • multerdb

        • ๊ด€๋ฆฌ์ž ์ƒํ’ˆ๋“ฑ๋ก ํ›„ DB ์—ฐ๋™ ๊ธฐ๋Šฅ ๊ตฌํ˜„
      • cartdb

        • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€ DB ์—ฐ๋™ ๊ตฌํ˜„
      • cartback

        • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€ express ํ†ต์‹  ๊ตฌํ˜„
      • productpage

        • ์ƒํ’ˆ์ƒ์„ธํŽ˜์ด์ง€ Header, Footer Comp ์—ฐ๊ฒฐ
      • associate

        • Database ๊ฐ ํ…Œ์ด๋ธ”๋ณ„ ๊ด€๊ณ„ํ˜• ์„ค์ •
      • auth

        • ์œ ์ € ์ •๋ณด db์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„
      • backback

        • ๊ฒ€์ƒ‰๊ฒฐ๊ณผํŽ˜์ด์ง€ ์ƒํ’ˆ ์ด๋ฏธ์ง€ ๋ฐ•์Šค ์กฐ์ ˆ
      • routing

        • ์ „์ฒดํŽ˜์ด์ง€ ๊ฒฝ๋กœ ์žฌ ์„ค์ •
      • cart-exception, checkcart

        • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
      • user

        • ๊ธฐ์กด์— ์žˆ๋˜ loginNext ํด๋” ์‚ญ์ œ
      • adcookie

        • ๊ด€๋ฆฌ์ž ์ „์šฉ ์ฟ ํ‚ค ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
      • cookies

        • ์‚ฌ์šฉ์ž์™€ ๊ด€๋ฆฌ์ž ๋‘๊ฐœ์˜ ์ฟ ํ‚ค ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ ๊ตฌํ˜„
      • authdb

        • ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ด€๋ จ
      • cookieking

        • ๊ฐ ํŽ˜์ด์ง€์—์„œ ์ฟ ํ‚ค ์—ฌ๋ถ€ ํŒ๋‹จ ๊ธฐ๋Šฅ ๊ตฌํ˜„
      • cart-order

        • ์žฅ๋ฐ”๊ตฌ๋‹ˆ์˜ ์ฃผ๋ฌธ์ฐฝ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
      • adminui

        • ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ UI ๋ณด๊ฐ•
      • totalPrice

        • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€์˜ ์ฃผ๋ฌธ์ฐฝ ์ด ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
      • pm

        • ํ”„๋กœ์ ํŠธ ์ „์ฒด ์ด๊ด„ ๊ธฐ๋Šฅ ๋ณด์ˆ˜
      • chartPage

        • ์ƒ์„ธํŽ˜์ด์ง€ UI ์ˆ˜์ •
      • cartcart, goodcart

        • ์žฅ๋ฐ”๊ตฌ๋‹ˆํŽ˜์ด์ง€ ๊ด€๋ จ ๋ณด์™„
      • authuser

        • ์œ ์ € ๋งˆ์ดํŽ˜์ด์ง€ ๊ตฌ๋งค๋‚ด์—ญ ํŽ˜์ด์ง€ ์ถ”๊ฐ€
      • responweb

        • ๋ฉ”์ธํŽ˜์ด์ง€ ๋ฐ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ๋ฐ˜์‘ํ˜• ์›นํŽ˜์ด์ง€ ๊ตฌํ˜„
      • mediaQuery-cart

        • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ฃผ๋ฌธ์˜์—ญ ๋ฐ˜์‘ํ˜• ์›นํŽ˜์ด์ง€ ๊ตฌํ˜„
      • issue-kyj

        • buyList ๋ฐ˜์‘ํ˜• ์›นํŽ˜์ด์ง€ ๊ตฌํ˜„
      • feedback

        • ํŒ€ ์ž์ฒด ์ตœ์ข… dev ์ด๊ด„ ์ˆ˜์ • ๋ณด์™„ ๊ด€๋ จ


10 ๐Ÿ™ RESTFUL API


Notion : RESTFUL API



11.:collision: Issues Objects


์ •ํ˜„

  • ์ด์Šˆ์‚ฌํ•ญ 1)

    • (22.12.15) ํ”„๋ก ํŠธ์—์„œ ๋กœ๊ทธ์ธ ์‹œ axios ํ†ต์‹ ์„ ์ด์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ์š”์ฒญ์„ ์ฃผ๊ณ  ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ์ •๋ณด๋“ค์ด ์ผ์น˜ํ•˜๋ฉด res.cookie๋ฅผ ํ†ตํ•ด jwt๋กœ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑ ํ•˜์˜€๋‹ค. ์ดํ›„ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ํ”„๋ก ํŠธreact์ชฝ์œผ๋กœ ํ†ต์‹ ์— ์‘๋‹ตํ•˜์˜€์ง€๋งŒ, ์ฟ ํ‚ค๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜๋Œ€๋กœ ๋ณด์—ฌ์ง€์ง€ ์•Š์•˜๋‹ค. ์ž์„ธํžˆ ๋ณด๋‹ˆ ๋„คํŠธ์›Œํฌ ์ชฝ ์ฟ ํ‚ค๋Š” ๋„˜์–ด์™”์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ชฝ์—์„œ ํ™•์ธ ๋ถˆ๊ฐ€ ํ–ˆ์—ˆ๋‹ค.

    • ํ•ด๊ฒฐ : React ์ตœ์ƒ์œ„ index.js๊ณผ express ์ตœ์ƒ์œ„ index.js์— ํ•„์š”ํ•œ ์ฝ”๋“œ ์ถ”๊ฐ€

axios.defaults.withCredentials = true;

app.use(cors({ origin: "http://localhost:3000", credentials: true }));
  • ์ด์Šˆ์‚ฌํ•ญ 2)

    • (22.12.19) ๊ธฐ์กด์— ์‚ฌ์šฉํ–ˆ๋˜ dummy ๋ฐ์ดํ„ฐ ํŒŒ์ผ (product.json) axios ํ†ต์‹ ํ•ด์„œ jsonํŒŒ์ผ ์ „์ฒด๋ฅผ forEach๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ†ต์‹  ํ•  ๋•Œ ๋งˆ๋‹ค jsonํŒŒ์ผ์„ ์ฝ๊ณ  db์— Product ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ์™€ ์ƒ๊ด€์—†์ด ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…๋˜๋Š” ์ด์Šˆ ๋ฐœ์ƒ

    • ํ•ด๊ฒฐ: axios ํ†ต์‹ ์„ ํ•˜์—ฌ Product ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด dummy ํŒŒ์ผ ์ฝ๊ณ  ์ปฌ๋Ÿผ๋ช…์— ๋งž์ถฐ์„œ create๋ฌธ์œผ๋กœ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์•„๋‹ˆ๋ฉด Product ํ…Œ์ด๋ธ” ์ „์ฒด findAll ํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ”„๋ก ํŠธ ์ชฝ์œผ๋กœ ์‘๋‹ตํ•ด์ค€๋‹ค.

์„ ์ฃผ

  • ์ด์Šˆ์‚ฌํ•ญ 1)

    • (22.12.12) html / css ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ img ํƒœ๊ทธ์— hover ์‹œ ๋ฐ”๋กœ ๋ฐ˜์‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    • ํ•ด๊ฒฐ : ๋ฆฌ์•กํŠธ์—์„œ์˜ hover๋Š” ๋ถ€๋ชจ ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์ž์‹ ํƒœ๊ทธ์— ์ ์šฉ๋˜๋Š” ๊ฒƒ์œผ๋กœ img ํƒœ๊ทธ๋Š” ์ž์‹ ํƒœ๊ทธ๋ฅผ ๊ฐ–์ง€ ๋ชปํ•˜๊ธฐ์— ๋ถ€๋ชจ ํƒœ๊ทธ๋ฅผ ๊ฐ–๊ฒŒ ํ•จ์œผ๋กœ hover ๊ฐ€ ์ž‘๋™๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  • ์ด์Šˆ์‚ฌํ•ญ 2)

    • (22.12.27) ๋ฐ˜์‘ํ˜• ํŽ˜์ด์ง€ ๊ตฌํ˜„ ์‹œ @media only screen and(max-width: **_px) ์™€ @media only screen and(min-width: _**px)๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐ˜์‘ํ˜•์ด ์›ํ•˜๋Š” ๋Œ€๋กœ ์ ์šฉ๋˜์ง€ ์•Š์•˜๋‹ค

    • ํ•ด๊ฒฐ : @media only screen and(max-width: ***px)๋กœ ํ†ต์ผํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ๋‹ค.

  • ์ด์Šˆ์‚ฌํ•ญ 3)

    • (22.12.28) ๋กœ๊ทธ์ธ ์ •๋ณด ์ˆ˜์ •ํ•˜๊ธฐ ํด๋ฆญ ์‹œ useState("๋กœ๊ทธ์ธ ์ •๋ณด")๋กœ ์„ค์ •ํ•ด๋„ ์ˆ˜์ •์„ ์œ„ํ•œ ๋ชจ๋‹ฌ์ฐฝ input ๊ฐ’์ด ์œ ์ €์˜ ์ •๋ณด๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋“ค์–ด์žˆ์ง€ ์•Š๊ณ  ๋นˆ ๊ฐ’์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ œ ๋ฐœ์ƒํ•œ๋‹ค.

    • ํ•ด๊ฒฐ : useState์—์„œ๋งŒ ์„ค์ •ํ•  ๊ฒฝ์šฐ ๋นˆ๊ฐ’์œผ๋กœ ๋“ค์–ด์™”๋‹ค๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ• ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— useEffect๋กœ ๊ฐ’์„ ๋„ฃ๋Š” ํ•จ์ˆ˜๋ฅผ ํ•œ๋ฒˆ ๋” ์‹คํ–‰ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

์žฌํ˜

  • ์ด์Šˆ์‚ฌํ•ญ 1)

    • input ํƒœ๊ทธ์— CSS -> {&:hover>div:nth-child(2){}} ๋กœ ๊ทธ๋ฆผ์— ๋งˆ์šฐ์Šค๊ฐ€ ์˜ฌ๋ผ๊ฐ”์„๋•Œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€๊ธฐ ์ฐฝ์„ ๋„์šธ๋•Œ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋™์‹œ์— ์ ์šฉ๋จ
    • ํ•ด๊ฒฐ : div๋ฅผ ๊ธฐ์ค€์œผ๋กœ :hover๋ฅผ ์ ์šฉํ•˜๊ณ , ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ฒซ๋ฒˆ์งธ ๋ณด์—ฌ์ง€๋Š” div๋ฅผ ์•ˆ๋ณด์ด๊ฒŒ ํ•˜๊ณ  hoverImg๋ฅผ ๊ณ ์ •ํ•œ๋‹ค.
&:hover > div:first-child {
   display: none;
 }
 &:hover > div:last-child {
   display: block;
   cursor: pointer;
   object-fit: cover;
  • ์ด์Šˆ์‚ฌํ•ญ 2)

    • ๋นˆ์นธ ๊ฒ€์ƒ‰์‹œ ์ „์ฒด์ƒํ’ˆ์œผ๋กœ ์ด๋™
    • ํ•ด๊ฒฐ : action์— ์กฐ๊ฑด์œผ๋กœ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์—†์œผ๋ฉด ์ •์ฒด ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฒŒ ๋งŒ๋“ฌ
{
  !isSearch || (
    <form
      method="get"
      action={search ? `/search? searchTerm=${search}` : "/all"}
    >
      <input
        type="text"
        name="search"
        value={search}
        onInput={(e) => {
          setSearch(e.target.value);
        }}
        placeholder="๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”"
      ></input>
    </form>
  );
}
  • ์ด์Šˆ์‚ฌํ•ญ 3)

    • media query font-size :1rem ์˜ ๊ธฐ์ค€์„ ๋ฐ”๊พผ๋‹ค.
    • ํ•ด๊ฒฐ : font-size๋ฅผ 1rem์œผ๋กœ ์ ๊ณ  media query ์กฐ๊ฑด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ณ€ํ™”ํ•˜๊ฒŒ ํ•œ๋‹ค.
html {
  font-size: 16px;
}
@media only screen and (min-width: 1550px) {
  html {
font-size: 21px;
}}

์˜์ค€

  • ์ด์Šˆ์‚ฌํ•ญ 1 (22.12.21)

    • (22.12.21) CSS ์ ์šฉ์„ id, className, ์ง์ ‘ ์ง€์ • ์„ž์–ด์„œ ์“ฐ๋‹ค๋ณด๋‹ˆ ์ ์šฉ์ด ์›ํ™œํ•˜๊ฒŒ ๋˜์ง€ ์•Š์Œ.
    • ํ•ด๊ฒฐ : CSS ์ ์šฉ ์šฐ์„  ์ˆœ์œ„ ๊ณต๋ถ€. ์ถœ์ฒ˜ : https://think0wise.tistory.com/24
    • ์šฐ์„ ๋„ {inline > id > class, sudoClass > tag, element}
    • ์ด์™•์ด๋ฉด class๋กœ ์ˆ˜์ •๋˜์ง€ ์•Š๋Š” ์Šคํƒ€์ผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด id๋ฅผ ๊ฐ•์ œ๋กœ ๋„ฃ๋Š” ๊ฑด ์ง€์–‘.

  • ์ด์Šˆ์‚ฌํ•ญ 2 (22.12.22)
    • DB์— ์ €์žฅ๋œ list๋ฅผ ๋ฐ›์•„ ๋ฌผ๊ฑด์„ ์ถœ๋ ฅํ•  ๋•Œ Multer library ๋กœ DB์— ๋“ฑ๋กํ•œ ์ƒํ’ˆ์˜ ์‚ฌ์ง„์„ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ•œ๋‹ค. DB์— ๋ฐ€์–ด๋„ฃ์€ ์ •๋ณด๋Š” ์ด๋ฏธ์ง€์˜ ๊ฒฝ๋กœ๊ฐ€ ํด๋” ์ ˆ๋Œ€์ฃผ์†Œ๋กœ ์„ค์ •๋˜๋Š” ๋ฐ˜๋ฉด default
      multer ๋กœ ์˜ฌ๋ฆฐ ์ •๋ณด์˜ ์ด๋ฏธ์ง€๋Š” ๊ฒฝ๋กœ๊ฐ€ ํŒŒ์ผ ์ด๋ฆ„๋งŒ ์„ค์ •๋œ๋‹ค. default
    • ํ•ด๊ฒฐ : DB์— ์ €์žฅ๋œ img ์˜ ๊ฒฝ๋กœ๊ฐ€ imgs ํด๋” ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์„ ๋•Œ์™€, ํŒŒ์ผ ์ด๋ฆ„๋งŒ ์žˆ์„๋•Œ๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. multer ๋กœ ์—…๋กœ๋“œํ•œ ํŒŒ์ผ์€ ์„œ๋ฒ„ํด๋”์˜ upload์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ๋” ์„ค์ •์„ ํ–ˆ๋‹ค.
// ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ (productImg ๊ฐ’์— /imgs๋ฅผ ํฌํ•จ ? ํฌํ•จํ• ๋•Œ  : ํฌํ•จ ์•ˆํ• ๋•Œ )
{
  item.productImg.includes("/imgs");
}

์ฐธ๊ณ ๋ฌธํ—Œ: https://any-ting.tistory.com/51


  • ์ด์Šˆ์‚ฌํ•ญ 3 (22.12.23)
    • ํ…Œ์ด๋ธ”๊ฐ„ ๊ด€๊ณ„ DB ์„ค๊ณ„์— ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋‹ค. User, Cart, Product, Order ๋“ฑ ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ”์— ๋ชจ๋“  ์ƒํ’ˆ์ •๋ณด์™€ ์œ ์ €์ •๋ณด๋ฅผ ๋„ฃ์–ด์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ด€๋ฆฌํ•˜๋Š” ๊ฑด ๋น„ํšจ์œจ์ ์ด๊ธฐ๋„ ํ•˜๊ณ , ์œ ์ง€๋ณด์ˆ˜๋„ ์–ด๋ ต๊ธฐ์— ๊ด€๊ณ„์„ค์ •์ด ํ•„์ˆ˜์ ์ด์—ˆ๋‹ค.
    • ํ•ด๊ฒฐ : User, Product ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ userId์™€ productId๋ฅผ ์—ฎ์–ด์„œ Cart,Order,UserProduct ํ…Œ์ด๋ธ”์— ๊ด€๊ณ„์‹œ์ผฐ๋‹ค.
// Cart Table
static associate(db) {
  db.Cart.belongsTo(db.User, { foreignKey: "userId", targetKey: "id" });
  db.Cart.belongsTo(db.Product, { foreignKey: "productId", targetKey: "id" });
}
}
// Product Table
static associate(db) {
  db.Product.belongsToMany(db.User, {
   through: "userProduct",
   foreignKey: "productId",
 });
 db.Product.hasMany(db.Cart, {
   foreignKey: "productId",
   sourceKey: "id",
 });
 db.Product.hasMany(db.Order, {
   foreignKey: "productId",
   sourceKey: "id",
  });
}
}
// User Table
static associate(db) {
db.User.belongsToMany(db.Product, {
 through: "userProduct",
  foreignKey: "userId",
 });
 db.User.hasMany(db.Cart, { foreignKey: "userId", sourceKey: >"id" });
 db.User.hasMany(db.Order, { foreignKey: "userId", >sourceKey: "id" });
}
}
  • ์ด์Šˆ์‚ฌํ•ญ 4 (22.12.24)

    • ๊ด€๊ณ„๊ฐ€ ํ˜•์„ฑ๋œ ํ…Œ์ด๋ธ” ์† data์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์—์„œ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋‹ค. ๋‹จ์ˆœํ•œ findOne, findAll ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฌธ๋ฒ•์ด ํ•„์š”ํ•ด ๋ณด์˜€๋‹ค.

    • ํ•ด๊ฒฐ : ํ•˜์œ„ ์†์„ฑ์œผ๋กœ include ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

    • code

/// Cart ํ…Œ์ด๋ธ”์˜ userid ์™€ ๋งค์นญ๋˜๋Š” userํ…Œ์ด๋ธ”์˜ ํ•ญ๋ชฉ์˜ attributes์™€ productid ์™€ ๋งค์นญ๋˜๋Š” product ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ์˜ attributes๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
const temp = await Cart.findOne({
  where: { userId: tempUser.id, productId: tempProduct.id },
  include: [
    {
      model: Product,
      attributes: [
        "productName",
        "productPrice",
        "productImg",
        "productHoverImg",
      ],
    },
    {
      model: User,
      attributes: ["userEmail"],
    },
  ],
});

์ฐธ๊ณ ๋ฌธํ—Œ : https://gist.github.com/zcaceres/83b554ee08726a734088d90d455bc566


12. ๐Ÿ“ƒ Reference Things

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages