Skip to content

teamSANDOL/2024-pre-sandol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

58 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๋ฏธ์…˜


๊ฐœ๋ฐœ์ž

๊ฐœ๋ฐœ์ž ๊ณตํ†ต ์š”๊ตฌ์‚ฌํ•ญ

  • ๋ชจ๋“  ๋ฏธ์…˜์€ Jetbrains์˜ Pycharm์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.
  • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „ docs/README.md์— ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ •๋ฆฌํ•ด ์ถ”๊ฐ€ํ•œ๋‹ค. - requirement.txt์—์„œ ์ œ๊ณต๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•ด์•ผ ํ•œ๋‹ค.
  • ํŒŒ์ด์ฌ ๋ฒ„์ „ 3.7 ์ด์ƒ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ธฐ๋Šฅ์š”๊ตฌ์‚ฌํ•ญ์— ์žˆ๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
  • ์ œ์ถœ ์ „ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์— ์žˆ๋Š” ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
  • ์š”๊ตฌ์‚ฌํ•ญ์— ์—†๋Š” ๊ธฐ๋Šฅ์€ ์Šค์Šค๋กœ ํŒ๋‹จํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

API ๊ฐœ๋ฐœ

Flask ์‹คํ–‰๋ฒ• ๋ฐ ํŒŒ์ผ ๊ตฌ์กฐ

Flask
  • ์ œ์‹œ๋œ ํŒŒ์ผ์—๋Š” \week2\api_dev\.venv์— ๊ฐ€์ƒํ™˜๊ฒฝ์ด ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.
  • ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๊ฐ€์ƒํ™˜๊ฒฝ์— ์ง„์ž…ํ•œ๋‹ค.(mac ๊ธฐ์ค€)
  • ์œˆ๋„์šฐ์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ๋งํฌ์˜ ์„ค๋ช…์„ ๋”ฐ๋ฅธ๋‹ค.
  • ์ดํ›„ app.py๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ์ž๋™์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋  ๊ฒƒ์ด๋‹ค.
source .venv/bin/activate

์š”๊ตฌ์‚ฌํ•ญ

  • ์‚ฐ๋Œ์ด์— ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๊ธฐ๋Šฅ์ธ "ํ•™์‹"์€ ์‚ฐ๋Œ์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์—…์ฃผ์—๊ฒŒ ์—ฐ๋ฝํ•˜์—ฌ ๋งค์ผ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  ์žˆ๋‹ค.
  • ์‚ฐ๋ŒํŒ€ ํšŒ์˜์—์„œ ์ด ๊ณผ์ •์ด ๋ณต์žกํ•˜๊ณ  ์ง€์†๊ฐ€๋Šฅํ•˜์ง€ ๋ชปํ•˜๋‹ค ํŒ๋‹จํ•˜์—ฌ ์—…์ฃผ๋“ค์—๊ฒŒ ์‚ฐ๋Œ์ด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด ์ง์ ‘ ์—…๋กœ๋“œ๋ฅผ ํ•˜๋ ค๊ณ ํ•œ๋‹ค.
  • ์‚ฐ๋Œ์ด์— ๋ฉ”๋‰ด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์—…์ฒด๋Š” "์‚ฐ๋Œ ๋ถ„์‹", "ํ•œ๊ณต ํ‘ธ๋“œ", "ํ‹ฐ๋…ธ ์ƒŒ๋“œ์œ„์น˜"์ด๋‹ค.
  • ์นด์นด์˜คํ†ก์—๋Š” ์ฑ„ํŒ…๋ฐฉ๋งˆ๋‹ค ๊ณ ์œ ํ•œ id๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ๊ฐœ๋ฐœ์ง„์€ ์ž„์‹œ๋กœ ์ด๋ฅผ ์ด์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.
  • ๋ฉ”๋‰ด๋ฅผ ์ €์žฅํ•  ์ €์žฅ์†Œ๋Š” ์•„์ง ์ •ํ•˜์ง€ ๋ชปํ•˜์˜€์œผ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์ €์žฅํ•˜๋ฉฐ, ๋‚˜์ค‘์— Amazon S3๋ฒ„ํ‚ท์œผ๋กœ ๋ฆฌํŽ™ํ† ๋ง๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
  • ์ €์žฅ๋  ํŒŒ์ผ ๋ช…์€ menu.json์œผ๋กœ repo/menu.json์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

  • /updateMenu๋Š” ๋ฉ”๋‰ด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•ญ๋ชฉ์ด๋‹ค.
    • ์—…์ฃผ๊ฐ€ ์—…๋ฐ์ดํŠธ ํ•˜๋ ค๋Š” ๊ฐ€๊ฒŒ๊ฐ€ ์—…์ฃผ์˜ ์†Œ์œ ์ธ ๊ฒฝ์šฐ์—๋งŒ ์—…๋ฐ์ดํŠธ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.
    • ์—…์ฒด์˜ ๋ฉ”๋‰ด๊ฐ€ ์ €์žฅ๋œ ํŒŒ์ผ์— ์ด๋ฏธ ๋ฉ”๋‰ด๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์ด์ „ ๋ฉ”๋‰ด๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•œ ๋’ค ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด์“ด๋‹ค.
    • ๋ฎ์–ด์“ฐ๊ธฐ์— ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด ์„ฑ๊ณต๋ฉ”์‹œ์ง€๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

ํŒŒ์ผ ๊ตฌ์กฐ

.
|-- __init__.py
|-- app.py
|-- docs
|   `-- README.md
|-- lib
|   |-- __init__.py
|   `-- frozen_json.py
|-- repo
|   `-- menu.json
`-- tests
    |-- __init__.py
    |-- data
    |   |-- correction_test.json
    |   |-- diff_botid_test.json
    |   |-- incorrect_store_name_test.json
    |   `-- permission_test.json
    `-- test_app.py
  • ์œ„ ํŒŒ์ผ ๊ตฌ์กฐ๋Š” api_dev์˜ ํŒŒ์ผ ๊ตฌ์กฐ์ด๋‹ค.
  • app.py : Flask์„œ๋ฒ„๋ฅผ ๋„์šฐ๋Š” ์—”ํŠธ๋ฆฌํฌ์ธํŠธ์ด๋‹ค.
  • \docs : ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๊ฐœ๋ฐœ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค.
  • \lib : ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.
  • \repo : ๋ฏธ์…˜์—์„œ ์š”๊ตฌํ•˜๋Š” ํŒŒ์ผ๋กœ, json์ด ์ €์žฅ๋˜๋Š” ์ผ์ข…์˜ db ํŒŒ์ผ์ด๋‹ค.
  • \tests : ํ…Œ์ŠคํŠธ ํŒŒ์ผ๊ณผ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋“ค์ด ๋“ค์–ด์žˆ์œผ๋ฉฐ, ๋ฏธ์…˜ ์ œ์ถœ์‹œ test_app.py๋ฅผ ์‹คํ–‰์‹œ์ผœ ์„ฑ๊ณต์‹œ์ผœ์•ผ ํ•œ๋‹ค.

์ž…๋ ฅ ์˜ˆ์‹œ

 - ๋ด‡ ์•„์ด๋”” ๋ชฉ๋ก
 ์‚ฐ๋Œ ๋ถ„์‹ : 5e0d180affa74800014bd33d
 ํ•œ๊ณต ํ‘ธ๋“œ : 3c0f223affa74800024ac31c
 ํ‹ฐ๋…ธ ์ƒŒ๋“œ์œ„์น˜ : s2134a85n8021d1w87it3c3h
{
  "bot": {
    "id": "5e0d180affa74800014bd33d",
    "name": "์‚ฐ๋Œ์ด"
  },
  "action": {
    "name": "jp1j2gy39h",
    "clientExtra": null,
    "params": {
      "store_name": "์‚ฐ๋Œ ๋ถ„์‹",
      "lunch_menu": "๋–ก๋ณถ์ด, ์ˆœ๋Œ€, ํŠ€๊น€",
      "dinner_menu": "์งœ์žฅ๋ฉด, ์งฌ๋ฝ•๊ตญ, ํƒ•์ˆ˜์œก"
    },
    "id": "bwjfe6fxc96ngv9ra6dddzah"
  }
}

bot.id๊ฐ€ ๋ฐœํ™”ํ•œ ์‚ฌ์šฉ์ž์˜ ์•„์ด๋””์ด๋‹ค. ๋˜ํ•œ ์ž…๋ ฅ์€ POST๋กœ api์— ์ „๋‹ฌ๋œ๋‹ค.

์ถœ๋ ฅ ์˜ˆ์‹œ

{
  "version": "2.0",
  "template": {
    "outputs": [
      {
        "simpleText": {
          "text": "์„ฑ๊ณต์ ์œผ๋กœ ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.",
          "text": "[ERROR] ์˜ค๋ฅ˜์ƒํ™ฉ์— ๋งž๋Š” ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ"
        }
      }
    ]
  }
}

ํŒŒ์ผ ์ €์žฅ ์˜ˆ์‹œ

{
  "store" : [
    {
      "name":  "์‚ฐ๋Œ ๋ถ„์‹", 
      "menu" : {
        "lunch" : ["๋–ก๋ณถ์ด", "์ˆœ๋Œ€", "ํŠ€๊น€"], 
        "dinner" : ["์งœ์žฅ๋ฉด", "์งฌ๋ฝ•๊ตญ", "ํƒ•์ˆ˜์œก"]
      }
    },
    {
      "name":  "ํ•œ๊ณต ํ‘ธ๋“œ", 
      "menu" : {
        "lunch" : ["๋ผ๋ฉด", "๊น€๋ฐฅ", "์ฃผ๋จน๋ฐฅ"], 
        "dinner" : ["์‹๋นต", "๋”ธ๊ธฐ์žผ", "์šฐ์œ "]
      }
    },
    {
      "name":  "ํ‹ฐ๋…ธ ์ƒŒ๋“œ์œ„์น˜", 
      "menu" : {
        "lunch" : ["์ดํƒˆ๋ฆฌ์•ˆ ์ƒŒ๋“œ์œ„์น˜", "๋ถˆ๊ณ ๊ธฐ ์ƒŒ๋“œ์œ„์น˜"], 
        "dinner" : ["์น˜์ฆˆ ์ƒŒ๋“œ์œ„์น˜, ํ•ซ๋„๊ทธ"]
      }
    },    
  ],

}

simpleText ์•ˆ์˜ text๋Š” ์„ฑ๊ณต๊ณผ ์‹คํŒจ์— ๊ฐ๊ฐ ์ถœ๋ ฅํ•  ๋ฌธ๊ตฌ์ด๋‹ค. ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.


๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

์š”๊ตฌ์‚ฌํ•ญ

  • ์ตœ๊ทผ ํ•™์‚ฌ์ •๋ณด์— ์ ‘๊ทผํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋Š” ํ•™์šฐ๋“ค์˜ ์˜๊ฒฌ์„ ๋ฐ˜์˜ํ•˜์—ฌ ์‚ฐ๋Œ์ด์—์„œ ํ•™์‚ฌ ๊ณต์ง€ ์ค‘ ์ฃผ์š” ๊ณต์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ ์ž ํ•œ๋‹ค.
  • ํ•™์‚ฌ ๊ณต์ง€๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฃผ์š”๊ณต์ง€๋Š” ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๋ฒˆํ˜ธ์— ๋งˆ์ดํฌ๋ชจ์–‘์ด ์žˆ๋Š”๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • tuk-info.png
  • ํ•„์š”ํ•œ ์ •๋ณด๋Š” ์ œ๋ชฉ, ์ž‘์„ฑ์ž, ์ž‘์„ฑ์ผ์ด๋ฉฐ, ํด๋ฆญ์‹œ ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๊ฒŒ์‹œ๊ธ€์˜ ํ•˜์ดํผ๋งํฌ๋„ ํ•„์š”ํ•˜๋‹ค.
  • ์ž์„ธํ•œ ์‚ฌํ•ญ์€ ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
  • ์ƒ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š”๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด URL๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋”ฐ๋กœ constant.py์— ์ •์˜ ํ•œ ๋’ค ์‚ฌ์šฉํ•œ๋‹ค
  • week2/business_dev/main.pyํŒŒ์ผ์˜ run ํŒŒ์ผ์˜ ๊ฒฐ๊ณผ๋กœ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•ด์„  ์•ˆ๋œ๋‹ค.)
    • ์ด์™ธ์˜ ํŒŒ์ผ๋“ค์€ ์ž์œ ๋กญ๊ฒŒ ์ƒ์„ฑํ•ด๋„ ๋œ๋‹ค.

ํŒŒ์ผ ๊ตฌ์กฐ

.
โ”œโ”€โ”€ __init__.py
โ”œโ”€โ”€ docs
โ”‚ย ย  โ””โ”€โ”€ README.md
โ”œโ”€โ”€ lib
โ”‚ย ย  โ”œโ”€โ”€ __init__.py
โ”‚ย ย  โ””โ”€โ”€ frozen_json.py
โ”œโ”€โ”€ main.py
โ””โ”€โ”€ tests
    โ”œโ”€โ”€ __init__.py
    โ””โ”€โ”€ test_main.py
  • ์œ„ ํŠธ๋ฆฌ์˜ ์˜ˆ์‹œ๋Š” business_dev์˜ ํŒŒ์ผ๊ตฌ์กฐ์ด๋‹ค.
  • \docs : ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ž‘์„ฑํ•  ๊ฐœ๋ฐœ๋ฌธ์„œ์ด๋‹ค.
  • \lib : ํ•„์š”ํ•˜๋‹ค๋ฉด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
  • \tests : ํ…Œ์ŠคํŠธ ํŒŒ์ผ์ด ์กด์žฌํ•œ๋‹ค. ๊ณผ์ œ์ œ์ถœ ์ „ test_main.py๋ฅผ ์‹คํ–‰์‹œ์ผœ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•œ๋‹ค.
  • main.py : ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ run()์ด ์กด์žฌํ•œ๋‹ค. ์ฆ‰, ์ตœ์ข… ํ”„๋กœ๊ทธ๋žจ์˜ ์™„์„ฑ์€ ํ•ด๋‹น ํŒŒ์ผ์—์„œ ๊ฐœ๋ฐœํ•œ๋‹ค.

์ž…๋ ฅ ์˜ˆ์‹œ

์•„๋ž˜ ํ•˜์ดํผ๋งํฌ์—์„œ ์ ์ ˆํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜จ๋‹ค
> https://www.tukorea.ac.kr/tukorea/1096/subview.do

์ถœ๋ ฅ ์˜ˆ์‹œ

{"informations": [
	{
		"title": "[์‚ฌํšŒ๋ด‰์‚ฌ๊ต๊ณผ๋ชฉ] 2024-1ํ•™๊ธฐ ์‚ฌํšŒ๋ด‰์‚ฌ ๊ต๊ณผ๋ชฉ ์ˆ˜๊ฐ•์‹ ์ฒญ ์•ˆ๋‚ด", 
		"author": "์‚ฌํšŒ๋ด‰์‚ฌ์ง€์›์„ผํ„ฐ", 
		"date": "2024.01.26", 
		"link": "/bbs/tukorea/107/51544/artclView.do"
	}, 
	{
		"title": "๊ธฐ์ดˆ๊ต๊ณผ, ๊ณ„์—ด๊ธฐ์ดˆ(1ํ•™๋…„ ์‹ ์ž…์ƒ ๊ต๊ณผ) ์ˆ˜๊ฐ•์‹ ์ฒญ ์•ˆ๋‚ด(์žฌํ•™์ƒ, ์‹ ์ž…์ƒ)", 
		"author": "๊ต์–‘๊ต์œก์šด์˜์„ผํ„ฐ", 
		"date": "2024.01.25", 
		"link": "/bbs/tukorea/107/51534/artclView.do"
	}
]}

์ถœ๋ ฅ ์˜ˆ์‹œ์—๋Š” 2๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ๋งŒ ํฌํ•จํ•˜์˜€์ง€๋งŒ 1ํŽ˜์ด์ง€์— ์žˆ๋Š” ๋ชจ๋“  ๊ณต์ง€ ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ ธ์˜จ๋‹ค. link์—๋Š” root url์„ ์ œ์™ธํ•œ ์„ธ๋ถ€ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ฃผ์†Œ๋งŒ ํฌํ•จํ•ด๋„ ๋œ๋‹ค.

๋งˆ์ผ€ํ„ฐ

์š”๊ตฌ์‚ฌํ•ญ


์ œ์ถœ ๋ฐฉ๋ฒ•

  • ์ œ์ถœ ๋งˆ๊ฐ ๊ธฐํ•œ์€ 2์›” 2์ผ ๊ธˆ์š”์ผ ์˜คํ›„ 17:00๊นŒ์ง€์ด๋‹ค.
  • ์ƒ์„ธํ•œ ์ œ์ถœ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.

๊ธฐํƒ€

ํ…Œ์ŠคํŠธ ์‹คํ–‰๋ฐฉ๋ฒ•

  • ์ฃผ์–ด์ง„ ์ฝ”๋“œ๋Š” pycharm์—์„œ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์œผ๋ฉฐ, pycharm์—์„œ ํ•ด๋‹น ์†Œ์Šค๋กœ ์ด๋™ ํ›„ ์‹คํ–‰์‹œ ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ์ฝ˜์†”์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ ์‚ฌํ•ญ์„ ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ผ๋ถ€ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    • ์ฝ˜์†”์—์„œ ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์œ„์น˜๋Š” /week2์ž…๋‹ˆ๋‹ค.
    • ModuleNotFoundError ๋˜๋Š” ImportError๋ฐœ์ƒ์‹œ import ๊ตฌ๋ฌธ์„ ์•„๋ž˜์™€๊ฐ™์ด ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
from unittest import TestCase
from ..main import run

๋˜๋Š” working directory๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ์•„๋ž˜ ๊ณผ์ •์„ ๋”ฐ๋ฅธ๋‹ค. ๋‹จ, pycharm ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค.

  1. ๋ฉ”๋‰ด > ์‹คํ–‰ > ๊ตฌ์„ฑ ํŽธ์ง‘test_screenshot0.png
  2. ์™ผ์ชฝ์— ์‹คํ–‰์‹œํ‚ฌ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ์„ ํƒ ํ›„ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ \week2๋กœ ์„ค์ •test_screenshot0-1.png

ํ…Œ์ŠคํŠธ ํ›„ ์„ฑ๊ณต ์‹คํŒจ ์—ฌ๋ถ€ ํ™•์ธ ์œ„์—์„œ๋ถ€ํ„ฐ (์‹คํŒจ, ์„ฑ๊ณต)

  • test_screenshot1.png
  • test_screenshot2.png

Flask ์‹คํ–‰ ๋ฒ•

api_dev/์˜ ์œ„์น˜์—์„œ flask run์„ ์‹คํ–‰ํ•œ๋‹ค.
๋งŒ์•ฝ "Youย didย notย provideย theย "FLASK_APP"ย environmentย variable"๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •(ํ•˜๋‹จ)์„ ๋”ฐ๋ฅธ๋‹ค

FacadeJSON

  • ํŒŒ์ด์ฌ์—์„œ JSON์„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” (์ œ์ž‘๋œ)๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๊ธฐ์กด ์‚ฌ์šฉ๋ฒ•

content = json.loads(f)
print(content['status'])

FacadeJSON

content = FacadeJSON(json.loads(f))
print(content.status)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages