W7 DRF Toy

justyoonยท2023๋…„ 5์›” 1์ผ
0
post-custom-banner

[230424]

๐ŸŽย Target

๐Ÿ’ก ์žฅ๊ณ  ์‹ฌํ™” ๊ฐ•์˜๋ฅผ ๋“ค์€ ์บ ํผ

๐ŸŽย Goal

๐Ÿ’ก DRF ๋‹จ๋‹จํžˆ ํ•˜๊ธฐ! 1. ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์ธ CRUD ์ต์ˆ™ํ•ด์ง€๊ธฐ 2. DRF ๋ชจ๋ธ ์ฟผ๋ฆฌ์…‹์— ์ต์ˆ™ํ•ด์ง€๊ธฐ 3. DRF ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์— ์ต์ˆ™ํ•ด์ง€๊ธฐ

๐Ÿฅ•ย Todo List๋ฅผ DRF๋กœ ๋งŒ๋“ค์–ด๋ณด๊ธฐ

๐Ÿย ๋ชฉํ‘œ

  • ERD ํˆด์„ ์‚ฌ์šฉํ•ด User, Todo ํ…Œ์ด๋ธ” ์„ค๊ณ„ํ•˜๊ธฐ

  • postman์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋Š” API๋กœ ๊ตฌ์„ฑ๋œ Todo List ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ
    (ํ˜„ ๊ณผ์ œ๋Š” ๊ธฐ๋Šฅ์ ์ธ ์ˆ™๋‹ฌ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ก ํŠธ๋Š” ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.)

๐Ÿย ํ•„์ˆ˜ ์‚ฌ์šฉ ๊ธฐ์ˆ 

  • djangorestframework ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €, ๋ชจ๋ธ ์ฟผ๋ฆฌ์…‹ ์‚ฌ์šฉ

๐Ÿย ์ƒ์„ธ ์š”๊ตฌ์‚ฌํ•ญ

  • ํšŒ์› ๊ธฐ๋Šฅ
    1. ์‚ฌ์šฉ์ž๊ฐ€ ํšŒ์›๊ฐ€์ž…์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”(User) ํ•„์ˆ˜ ํ•„๋“œ
        1. id : ๋ฐ์ดํ„ฐ ๊ณ ์œ  id ์ž…๋‹ˆ๋‹ค(PK).
        2. email : ์•„์ด๋””๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค.
        3. password : ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ํšŒ์› ์ƒ์„ฑ, ์ˆ˜์ • ์‹œ ์•”ํ˜ธํ™”(ํ•ด์‹œ)๋œ ๊ฐ’์„ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
        4. name : ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
        5. gender : ์‚ฌ์šฉ์ž์˜ ์„ฑ๋ณ„์ž…๋‹ˆ๋‹ค.
        6. age : ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด์ž…๋‹ˆ๋‹ค.
        7. introduction : ์‚ฌ์šฉ์ž์˜ ์ž๊ธฐ์†Œ๊ฐœ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
      • POST ์š”์ฒญ ์‹œ ํšŒ์›๊ฐ€์ž…์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    2. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • POST ์š”์ฒญ ์‹œ ์žฅ๊ณ  ์„ธ์…˜ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ๋กœ๊ทธ์ธ์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • ์„ธ์…˜ ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ์ด ์ต์ˆ™ํ•˜๋‹ค๋ฉด JWT๊ธฐ๋ฐ˜ ์ธ์ฆ์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
    3. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์•„์›ƒ์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • POST ์š”์ฒญ ์‹œ ์„ธ์…˜ ์ •๋ณด๋ฅผ ์‚ญ์ œํ•ด ๋กœ๊ทธ์•„์›ƒ์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    4. ์‚ฌ์šฉ์ž๊ฐ€ ํšŒ์› ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • PUT ์š”์ฒญ ์‹œ ์•„์ด๋””๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํšŒ์› ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ • ์‹œ ์•”ํ˜ธํ™”๋œ ๊ฐ’์„ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    5. ์‚ฌ์šฉ์ž๊ฐ€ ํšŒ์› ํƒˆํ‡ด๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • DELETE ์š”์ฒญ ์‹œ ๊ณ„์ •์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค(ํƒˆํ‡ด).

  • TODO LIST ๊ธฐ๋Šฅ
    1. ์‚ฌ์šฉ์ž๊ฐ€ ํ• ์ผ(Todo)์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      • ํ• ์ผ ํ…Œ์ด๋ธ”(Todo) ํ•„์ˆ˜ ํ•„๋“œ
        1. id : ๋ฐ์ดํ„ฐ ๊ณ ์œ  id ์ž…๋‹ˆ๋‹ค(PK).
        2. title : ํ• ์ผ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค.
        3. is_complete : ์™„๋ฃŒ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ boolean์ด๋ฉฐ default false ์„ค์ •์„ ํ•ฉ๋‹ˆ๋‹ค.
        4. created_at : ํ• ์ผ ์ƒ์„ฑ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
        5. updated_at : ํ• ์ผ์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜์ • ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
        6. completion_at : ํ• ์ผ ์™„๋ฃŒ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
        7. user_id : ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”๊ณผ FK๋กœ ๊ด€๊ณ„ํ˜•์„ฑ์ด ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
      • POST ์š”์ฒญ ์‹œ ํ• ์ผ์ด ์ƒ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    2. ์‚ฌ์šฉ์ž๊ฐ€ ํ• ์ผ ๋ชฉ๋ก(Todo list)์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

      • GET ์š”์ฒญ ์‹œ ํ• ์ผ ๋ชฉ๋ก์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
      • response ์˜ˆ์‹œ
      [
          {
              "id": 1,
              "title": "๊ณผ์ œํ•˜๊ธฐ",
              "is_complete": "True",
              "created_at": "2023-04-01",
              "updated_at": "",
              "completion_at": "2023-04-05",
          },
          {
              "id": 2,
              "title": "๊ณต๋ถ€ํ•˜๊ธฐ",
              "is_complete": "False",
              "created_at": "2023-04-02",
              "updated_at": "2023-04-03",
              "completion_at": ""
          },
          ...
      ]
    3. ์‚ฌ์šฉ์ž๊ฐ€ ํ• ์ผ(Todo)์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

      • PUT์š”์ฒญ ์‹œ ํ• ์ผ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
      • ํ• ์ผ์„ ์™„๋ฃŒํ•œ ๊ฒฝ์šฐ is_complete๋ฅผ True๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
        ์™„๋ฃŒํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ False๋กœ ๋‹ค์‹œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
      • ์ œ๋ชฉ(title)์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    4. ์‚ฌ์šฉ์ž๊ฐ€ ํ• ์ผ(Todo)์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

      • DELETE ์š”์ฒญ ์‹œ ํ• ์ผ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  • response ์˜ˆ์‹œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๋‚ด์šฉ์„ ๊ฐ€์ง€๊ณ  ์ž์œ ๋กญ๊ฒŒ response๋ฅผ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค.
    • status_code
    • message
    • ๋ฐ์ดํ„ฐ
      ex) ํšŒ์›๊ฐ€์ž… ์‹œ ๊ฐ€์ž…ํ•œ ์œ ์ €์ •๋ณด

๐Ÿ์ถ”๊ฐ€์š”๊ตฌ์‚ฌํ•ญ

  • ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ (๊ถŒํ•œ) - option1

    ๐Ÿ’ก ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ๋ถ„ํžˆ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋‚จ๋Š”๋‹ค๋ฉด ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐœ๋ฐœํ•ด๋ณด์•„์š”!

    ๋ณธ์ธ์ด ์ž‘์„ฑ์ž๊ฐ€ ์•„๋‹˜์—๋„ ๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ ๊ธฐ๋ก์„ ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ฐœ์ธ์ •๋ณด ์œ ์ถœ, ํ•ดํ‚น ๋“ฑ์˜ ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค

    ์•ž์„œ ๋งŒ๋“  ๊ธฐ๋Šฅ์— ์ž‘์„ฑ์ž ๋ณธ์ธ๋งŒ ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ด๋ด…์‹œ๋‹ค.

    • ๋‹ค์Œ ๊ธฐ๋Šฅ์— ๊ถŒํ•œ์„ ๋„ฃ์–ด ์ž‘์„ฑ์ž ๋ณธ์ธ๋งŒ ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
      1. ํšŒ์› ์ •๋ณด : ์ˆ˜์ •, ์‚ญ์ œ
      2. ํ• ์ผ ์ •๋ณด : ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ

  • ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ (JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ) - option2

    ๐Ÿ’ก ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ๋ถ„ํžˆ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋‚จ๋Š”๋‹ค๋ฉด ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐœ๋ฐœํ•ด๋ณด์•„์š”!

    ์ง€๊ธˆ๊นŒ์ง€ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„ธ์…˜ ๋ฐฉ์‹ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค๋ฉด ์ด๋ฒˆ์—” ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” JWT ๋ฐฉ์‹์œผ๋กœ access ํ† ํฐ๊ณผ refresh ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์•„๋ด…์‹œ๋‹ค.

    djangorestframework_simplejwt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ๊ถŒ์žฅ ํ•ฉ๋‹ˆ๋‹ค.

    1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      1. POST ์š”์ฒญ ์‹œ(๋กœ๊ทธ์ธ) ๋ฆฌํ„ด ๊ฐ’์œผ๋กœ jwt refresh, access ํ† ํฐ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      2. access ํ† ํฐ์˜ payload์—๋Š” ์‚ฌ์šฉ์ž์˜ email, name, gender, age ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      3. response ์˜ˆ์‹œ
      {
      	"refresh": "eyFDFJJagGENHA5I1NiIsdsfFD9POkpXVCD5.dAJzSsdfFD55xMjEENTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWIjoxFDPIELCOIDIyfQ.dFD44wRJSMDS454T4fasdfMeJf646dsfsDFFDDS54fe4",
      	"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
      }

๐Ÿย ์ฐธ๊ณ ์ž๋ฃŒ

profile
with gratitude, optimism is sustainable
post-custom-banner

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