2 ๋ถ„ ์†Œ์š”

Flask์— ๋Œ€ํ•ด์„œโ€ฆ

1. Flask๋ž€?

ํ”Œ๋ผ์Šคํฌ(Flask)๋ž€, ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ๋‹ค๋ฅธ ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜์˜ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ธ Django์— ๋น„ํ•ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋Š” ๋ฐ˜๋ฉด, ๋ถ€์กฑํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์—ฌ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฉด์—์„œ ๊ฐ€๋ณ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ํŠนํžˆ API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ธฐ์— ๋งค์šฐ ํŽธ๋ฆฌํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์•Œ๋ ค์ ธ์žˆ๋‹ค.

[ํŒŒ์ด์ฌ ์›น ํ”„๋ ˆ์ž„์›Œํฌ ์ข…๋ฅ˜]

  • Django
  • Flask
  • FastAPI
  • WebPy
    โ€ฆ

1-1. Flask์˜ ์žฅ์ 

  • ๊ฐ€๋ณ๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค!
    • Python, HTML + CSS + JS๋งŒ ํ•  ์ค„ ์•Œ๋ฉด ๊ธˆ๋ฐฉ ๋ฐฐ์šด๋‹ค!
  • ๊ฐ€๋ณ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!โ€™
    • ์ฝ”๋“œ ๋ช‡ ์ค„์ด๋ฉด ๊ธˆ๋ฐฉ ๋งŒ๋“ ๋‹ค!
  • ๊ฐ€๋ณ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค!
    • virtualenv์— Flask๊น”๊ณ  ๋ฐ”๋กœ ๋ฐฐํฌํ•˜๋ฉด ๋œ๋‹ค!
  • ๊ธฐ๋Šฅ๋“ค์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ€๋ณ๋‹ค
    • Django์™€ ๋‹ฌ๋ฆฌ ์ œ๊ณต ๊ธฐ๋Šฅ์ด ์ ์ง€๋งŒ, ๋‹จ์ ์„ ์žฅ์ ์œผ๋กœ ์Šนํ™”์‹œ์ผœ ๊ธฐ๋Šฅ์„ ํ•„์š”ํ•œ ๋งŒํผ ๊ตฌํ˜„ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐ€๋ณ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค!

1-2. Flask์˜ ๋‹จ์ 

  • Django์— ๋น„ํ•ด ์ž์œ ๋„๋Š” ๋†’์œผ๋‚˜ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ ์Œ
  • ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ํ•ด์•ผํ•  ์ž‘์—…๋“ค์ด ๋งŽ์Œ

1-3. Flask์™€ Django์ค‘ ์„ ํƒ

๊ฐ€๋ฒผ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Flask, ๋ฌด๊ฑฐ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Django๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค? โ‡จ ์–ด๋Š์ •๋„ ๋งž๋Š” ๋ง์ด์ง€๋งŒ, ์ž์‹ ์ด ์ž์‹  ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค!


2. ๋ผ์šฐํŒ…

์„œ๋ฒ„์— ์ ‘์†ํ•˜๋Š” ์ฃผ์†Œ๋Š” ๋‹ค์–‘ํ•œ๋ฐ, ์„œ๋ฒ„์™€ ์ฃผ์†Œ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š”๊ฒŒ ํ•„์š”ํ•จ

  • ์˜ˆ์‹œ
    1. http://localhost: 5000/ : ํ™ˆํŽ˜์ด์ง€๋กœ ๊ฐ€๋Š” ์ฃผ์†Œ
    2. http://localhost: 5000/read/1/ : id=1์ธ ๊ธ€์„ ์ฝ๋Š” ์ฃผ์†Œ
    3. http://localhost: 5000/create/ : ์ƒ์„ฑํ•˜๋Š” ์ฃผ์†Œ
    4. http://localhost: 5000/upadate/1 : id=1์„ ๊ฐฑ์‹ ํ•˜๋Š” ์ฃผ์†Œ
  • ์–ด๋–ค ์ฃผ์†Œ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๊ณ , ์–ด๋–ค ์š”์ฒญ์„ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ โ€˜๋ผ์šฐํŒ…(routing)โ€™์ด๋ผ๊ณ  ํ•จ.
    • ์ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์žฅ์น˜๊ฐ€ โ€˜๋ผ์šฐํ„ฐโ€™
  • ์˜ˆ์‹œ
    # '/'๋กœ ์ ‘์†ํ–ˆ์„ ๋•Œ, index()๊ฐ€ ํ˜ธ์ถœ๋˜์–ด 'Index Page'๊ฐ€ ์‘๋‹ตํ•จ
    @app.route('/')
    def index():
        return 'Index Page'  
    # '/hello'๋กœ ์ ‘์†ํ–ˆ์„ ๋•Œ hello()๊ฐ€ ํ˜ธ์ถœ๋˜์–ด 'Hello World'๊ฐ€ ์‘๋‹ตํ•จ
    @app.route('/hello')
    def hello():
        return 'Hello World'

3. ์ฑ—๋ด‡/๋ฐ์ดํ„ฐ๋ถ„์„ - ๋ฉ”์„œ๋“œ ํ˜น์€ ์ด๋ก  ๋ฐ ๊ฐœ๋…

์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„œ ์ฑ—๋ด‡ ๋ชจ๋ธ(๊ตฌ๊ธ€ BERT)์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด ์ฑ—๋ด‡ ์—”์ง„ ์„œ๋ฒ„๋ฅผ flask๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.
๊ทธ๋ž˜์„œ ๊ฐ„๋žตํ•˜๊ฒŒ๋‚˜๋งˆ ์ ์–ด๋ณธ๋‹ค.

  1. Cosine_Similarity
    ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๋Š” ๋‘ ๋ฒกํ„ฐ ๊ฐ„์˜ ์ฝ”์‚ฌ์ธ ๊ฐ๋„๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๋ฒกํ„ฐ์˜ ์œ ์‚ฌ๋„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    ๋‘ ๋ฒกํ„ฐ์˜ ๋ฐฉํ–ฅ์ด ์™„์ „ํžˆ ๋™์ผํ•œ ๊ฒฝ์šฐ์—๋Š” 1์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, 90ยฐ์˜ ๊ฐ์„ ์ด๋ฃจ๋ฉด 0, 180ยฐ๋กœ ๋ฐ˜๋Œ€์˜ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๋ฉด -1์˜ ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    ์ฆ‰, ๊ฒฐ๊ตญ ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„๋Š” -1 ์ด์ƒ 1 ์ดํ•˜์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ ๊ฐ’์ด 1์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ์œ ์‚ฌ๋„๊ฐ€ ๋†’๋‹ค๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ด๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋‘ ๋ฒกํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉํ–ฅ์ด ์–ผ๋งˆ๋‚˜ ์œ ์‚ฌํ•œ๊ฐ€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-02-03 แ„‹แ…ฉแ„’แ…ฎ 2 41 32

  2. squeeze()
    squeezeํ•จ์ˆ˜๋Š” ์ฐจ์›์ด 1์ธ ์ฐจ์›์„ ์ œ๊ฑฐํ•ด์ค€๋‹ค.
    ๋”ฐ๋กœ ์ฐจ์›์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด 1์ธ ์ฐจ์›์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ์ฐจ์›์„ ์„ค์ •ํ•ด์ฃผ๋ฉด ๊ทธ ์ฐจ์›๋งŒ ์ œ๊ฑฐํ•œ๋‹ค.

[์˜ˆ์ œ]

import torch

x = torch.rand(1, 1, 20, 128)
x = x.squeeze() # [1, 1, 20, 128] -> [20, 128]

# 1๋ฒˆ ์œ„์น˜์˜ ์ฐจ์› 1์„ ์‚ญ์ œ
x2 = torch.rand(1, 1, 20, 128)
x2 = x2.squeeze(dim=1) # [1, 1, 20, 128] -> [1, 20, 128]
  1. idxmin() & idxmax()
    ์ตœ๋Œ€๊ฐ’์ด๋‚˜ ์ตœ์†Œ๊ฐ’์„ ๊ฐ–๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฉ”์„œ๋“œ
    • idxmin(): ์ตœ์†Œ๊ฐ’์„ ๊ฐ–๋Š” ์ธ๋ฑ์Šค ๋ ˆ์ด๋ธ” ์ถœ๋ ฅ
    • idxmax(): ์ตœ๋Œ€๊ฐ’์„ ๊ฐ–๋Š” ์ธ๋ฑ์Šค ๋ ˆ์ด๋ธ” ์ถœ๋ ฅ

5. ์˜ค๋ฅ˜

๊ฐœ๋ฐœ ํ˜น์€ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์™€ ํ•ด๊ฒฐ๋ฒ• ์ •๋ฆฌ

  1. ๋ชจ๋“ˆ ์—๋Ÿฌ
ModuleNotFoundError: No module named 'flask'
  • ์›์ธ
    • ํ˜„์žฌ ํ”Œ๋ผ์Šคํฌ๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ์ง€ ์•Š์Œ.
  • ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
    • ํ„ฐ๋ฏธ๋„์— pip install flask ์ž…๋ ฅ

ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ