์ƒˆ์†Œ์‹

Languages/Python

[flask] Do it ์ ํ”„ ํˆฌ ํ”Œ๋ผ์Šคํฌ _ 1. ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๋ฐ ์„œ๋ฒ„ ์‹คํ–‰

  • -
๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜ : https://wikidocs.net/102760

ํ•ด๋‹น ์ž๋ฃŒ ๋ฐ ์‹ค์Šต์€ ๋ชจ๋‘ ์œ„ํ‚ค๋…์Šค(์ ํ”„ ํˆฌ ํ”Œ๋ผ์Šคํฌ) ๋‚ด์šฉ์„ ์ฐธ๊ณ  ํ›„ ์ž‘์„ฑํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


Version

ํŒŒ์ด์ฌ ๋ฒ„์ „ 3.10 / ํ”Œ๋ผ์Šคํฌ ๋ฒ„์ „ 2.1.2 / ๋ถ€ํŠธ์ŠคํŠธ๋žฉ 5.1

 

Flask ๋ž€?

ํ”Œ๋ผ์Šคํฌ(Flask)๋Š” 2004๋…„ ์˜ค์ŠคํŠธ๋ฆฌ์•„์˜ ์˜คํ”ˆ์†Œ์Šค ๊ฐœ๋ฐœ์ž ์•„๋ฅด๋ฏผ ๋กœ๋‚˜ํ—ˆ(Armin Ronacher)๊ฐ€ ๋งŒ๋“  ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.
ํ”Œ๋ผ์Šคํฌ๋Š” ์•„๋ฅด๋ฏผ ๋กœ๋‚˜ํ—ˆ๊ฐ€ ๋งŒ์šฐ์ ˆ์— ์žฅ๋‚œ์‚ผ์•„ ๋˜์ง„ ์•„์ด๋””์–ด์˜€๋Š”๋ฐ ์‚ฌ๋žŒ๋“ค์˜ ๊ด€์‹ฌ์ด ๋†’์•„์ ธ ์„œ๋น„์Šค๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค๊ณ  ํ•œ๋‹ค.
ํ”Œ๋ผ์Šคํฌ๋Š” ์žฅ๊ณ (Django)์™€ ๋”๋ถˆ์–ด ํŒŒ์ด์ฌ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์–‘๋Œ€ ์‚ฐ๋งฅ์œผ๋กœ ์ž๋ฆฌ๋งค๊น€ํ•˜๊ณ  ์žˆ๋‹ค.

์ถœ์ฒ˜ : https://wikidocs.net/images/page/81039/flask-logo.png

 

 

ํ™˜๊ฒฝ์„ค์น˜ 

1. ํŒŒ์ด์ฌ ๋ฒ„์ „ 3.10.4 ์„ค์น˜

์ €์˜ ๊ฒฝ์šฐ conda๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ๋ช…๋ น์–ด๋กœ ๋‹ค์šด๋ฐ›์•˜์ง€๋งŒ, anaconda ํ™˜๊ฒฝ์ด ์•„๋‹ˆ์‹œ๋ผ๋ฉด ์•„๋ž˜ ์ฃผ์†Œ๋กœ ๋“ค์–ด๊ฐ€์„œ ๋‹ค์šด๋ฐ›์•„์ฃผ์„ธ์š”.
> ํŒŒ์ด์ฌ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ์ฃผ์†Œ: www.python.org

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org

2. Flask ์„ค์น˜

 

* mac์—์„œ ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ง„์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ €๋Š” ๊ตณ์ด ๊ฐ€์ƒ ํ™˜๊ฒฝ ๋งŒ๋“ค์ง€ ์•Š๊ณ , ๊ทธ๋ƒฅ conda ์‚ฌ์šฉํ•ด์„œ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค~

 

3. ํŒŒ์ด์ฐธ ์„ค์น˜ํ•˜๊ธฐ

๋ฌด๋ฃŒ ๊ธฐ๊ฐ„์ด ์ง€๋‚˜์„œ ์ € ๊ฐ™์€ ๊ฒฝ์šฐ.. ๋‹ค์‹œ ๊น”์•„์คฌ์Šต๋‹ˆ๋‹ค.

์œ„์น˜๋Š” flask_Project !

์—ฌ๊ธฐ๊นŒ์ง€ ๋˜์—ˆ๋‹ค๋ฉด ํŒŒ์ด์ฐธ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ €๊ฐ™์€ ๊ฒฝ์šฐ๋Š”, anaconda๋ฅผ ์‚ฌ์šฉํ•ด์„œ conda environment์—์„œ ์ง€์ •ํ•ด์ฃผ์—ˆ์œผ๋‹ˆ, ๋ฐฉ๋ฒ•์„ ๊ฒ€์ƒ‰ํ•ด๋ณด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

(https://notstop.co.kr/409 , https://wikidocs.net/81043 <- ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์ข‹์„๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.)

์ผ์ผ€ ๊ฐ€์ƒํ™˜๊ฒฝ์ด ์—ฐ๊ฒฐ๋˜์žˆ์œผ๋ฉด ์ •์ƒ์œผ๋กœ ๋๋‚ฌ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์œ„๊นŒ์ง€ ๋ชจ๋‘ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ํŒŒ์ด์ฐธ ์—์„œ ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ ๋‚ด์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์‹ค์Šตํ•ด๋ณธ๋‹ค.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_pyno():
    return 'hello, my name is haeun!'

app = Flask(__name__)์€ ํ”Œ๋ผ์Šคํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋‹ค. ์ด ์ฝ”๋“œ์—์„œ __name__์ด๋ผ๋Š” ๋ณ€์ˆ˜์—๋Š” ๋ชจ๋“ˆ๋ช…์ด ๋‹ด๊ธด๋‹ค. ์ฆ‰, ์ด ํŒŒ์ผ์ด ์‹คํ–‰๋˜๋ฉด pybo.py๋ผ๋Š” ๋ชจ๋“ˆ์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ __name__ ๋ณ€์ˆ˜์—๋Š” "pybo" ๋ผ๋Š” ๋ฌธ์ž์—ด์ด ๋‹ด๊ธด๋‹ค. @app.route๋Š” URL๊ณผ ํ”Œ

๋ผ์Šคํฌ ์ฝ”๋“œ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ํ”Œ๋ผ์Šคํฌ์˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋‹ค. ์ฆ‰, / URL์ด ์š”์ฒญ๋˜๋ฉด ํ”Œ๋ผ์Šคํฌ๋Š” hello_pybo ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ(decorator)๋ž€ ๊ธฐ์กด ํ•จ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ง๋ถ™์ผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

ํ”Œ๋ผ์Šคํฌ ์„œ๋ฒ„ ์‹คํ–‰

๋กœ์ปฌ ์„œ๋ฒ„ ์‹คํ–‰์„ ์œ„ํ•ด flask run์„ ํ•ด์ค€๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ,FLASK_APP ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ํ”Œ๋ผ์Šคํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค์ •ํ•ด์ค€๋‹ค.

*FLASK_APP ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’ํ”Œ๋ผ์Šคํฌ๋Š” FLASK_APP ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ app.py๋ฅผ ๊ธฐ๋ณธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์ธ์‹ํ•œ๋‹ค.๋”ฐ๋ผ์„œ ์•ž์˜ pybo.py ํŒŒ์ผ๋ช…์„ app.py๋กœ ์ง€์—ˆ๋‹ค๋ฉด FLASK.APP ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ณ„๋„๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.ํ•˜์ง€๋งŒ FLASK_APP ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ณ„๋„๋กœ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ์ˆ˜ ์žˆ๋‹ค.

์ •์ƒ์ ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

 

#alias์— FLASK_APP, FLASK_ENV์ถ”๊ฐ€ํ•˜๊ธฐ

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.