μ΅κ·Ό νλΌμ€ν¬(Flask)λ₯Ό μ΄μ©ν μΉ κ°λ°μ μ§ννκ³ μμ΄μ νμ΄μ¬ κ°μ νκ²½μ μ€λΉνμ΅λλ€.
νμ΄μ¬ κ°μ νκ²½μ λ€μν λ²μ μ νμ΄μ¬μ κ°κ° μ¬μ©νκ³ κ΄λ¦¬ν μ μλλ‘ λ 립λ νκ²½μ μ 곡ν΄μ€λλ€.
κ°μ νκ²½μ μ¬μ©νλ©΄ μ 1 κ°μ νκ²½μμλ 2.7 λ²μ μ, μ 2 κ°μ νκ²½μμλ 3.8, 3.9 λ²μ μ μ¬μ©ν μ μμ΄ μ λ§ νΈλ¦¬ν©λλ€!
μ°Έκ³ λ‘ μ λ macOSμ Windows λͺ¨λ μ¬μ©νκ³ μμ§λ§ κ°λ°μ μ£Όλ‘ μ¬μ©νλ κ²μ macOSμ λλ€.
κ°μ νκ²½ μμ±
λ¨Όμ κ°μ νκ²½μ λ§λ€ ν΄λλ₯Ό μμ±ν©λλ€. μ§μ νμΌ κ΄λ¦¬μμμ ν΄λλ₯Ό λ§λμ λ λκ³ , λ§₯μ΄λΌλ©΄ ν°λ―Έλμμ μμ±νμ λ 무κ΄ν©λλ€. μ λproject1μΌλ‘ μμ±ν΄λ³΄κ² μ΅λλ€.
$ mkdir 'ν΄λμ΄λ¦'
μ λ κ°λ¨ν project1 λ‘ μ€μ νμ΅λλ€. (ex. mkdir project1)
λ€μμ κ°μ νκ²½μ λ§λ€μ΄μΌ ν©λλ€. python 2.xλ₯Ό μ¬μ©νκ³ κ³μλ©΄ κ·Έλ₯ python, python 3.xλ₯Ό μ¬μ©νκ³ κ³μλ©΄ python3λ‘ μ λ ₯ν΄μ£ΌμΈμ. μ κ°μ κ²½μ° python3μ μ¬μ©νμΌλ©°, κ°μ νκ²½ μ΄λ¦μ κ°λ¨νκ² μ μ΄λ¦μΌλ‘ νμ΅λλ€. :-)
$ python3 -m venv 'κ°μ νκ²½λͺ
'
κ°μ νκ²½λͺ μλ μνλ μ΄λ¦μ μ μ΄μ£ΌμΈμ. μ λ μ μ΄λ¦μ λ£μ΄μ λ§λ€μμ΅λλ€. :-) (ex. python3 -m venv yejinvenv)
μμ±μ μ±κ³΅νλ€λ©΄ μμμ λ§λ ν΄λ νμμ 'κ°μ νκ²½λͺ ' μ΄λ¦μ κ°μ§ ν΄λκ° μμ±λμμ΅λλ€.
νμ¬ ν΄λ ꡬ쑰λ μλμ κ°μ΅λλ€!
project1 ν΄λ νμμ κ°μ νκ²½ ν΄λ yejinvenvμ΄ μμ±λ κ²μ λ³Ό μ μμ΅λλ€.
κ°μ νκ²½ νμ±ν
μ΄μ μμ±ν κ°μ νκ²½μ μ§μ ν΄λ΄ μλ€. κ°μ νκ²½μ μμ±ν ν΄λλ‘ μ΄λν μνμμ λ€μ λͺ λ Ήμ΄λ‘ μ§μ ν©λλ€. (macOS)
$ source 'κ°μ νκ²½λͺ
'/bin/activate
Windowsμ κ²½μ°λ λ€μκ³Ό κ°μ΅λλ€.
$ cd 'κ°μ νκ²½λͺ
'/Scripts/activate
μ±κ³΅μ μΌλ‘ κ°μ νκ²½μ μ§μ νμ ¨λ€λ©΄ ν°λ―Έλμ (κ°μ νκ²½λͺ )μ΄ λΆμ΄ μλ κ²μ νμΈν μ μμ΅λλ€.
νλΌμ€ν¬ μ€μΉ
κ°μ νκ²½μ μ§μ ν μνμμ νλΌμ€ν¬λ₯Ό μ€μΉν΄λ³΄κ² μ΅λλ€. μ΄λλ κ°μ νκ²½ μμ μ€μΉλ κ²μ΄κΈ° λλ¬Έμ, κ°μ νκ²½μμ λΉ μ Έλμ€λ©΄ μ€μΉν κΈ°λ₯μ μ΄μ©ν μ μμ΅λλ€.
$ pip3 install Flask
$ flask --version
μ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ νλΌμ€ν¬λ₯Ό μ€μΉν΄μ£ΌμΈμ!
μ΄μ κ°μ νκ²½μμ νλΌμ€ν¬λ₯Ό μ¬μ©ν μ μμ΅λλ€.
νλΌμ€ν¬ μ¬μ© μμ
κ°μ νκ²½λ νμ±ννκ³ νλΌμ€ν¬λ μ€μΉνμΌλ μ΄μ λ νλΌμ€ν¬λ₯Ό μ¬μ©νμ¬ μΉνμ΄μ§λ₯Ό λμλ΄ μλ€.
νλ‘μ νΈ ν΄λ(ex. project1)λ‘ μ΄λν λ€ app.py νμΌμ μμ±ν©λλ€. ν°λ―Έλμμ μ§μ μμ±ν΄λ λκ³ , μλν°λ‘ μμ±ν΄λ λ©λλ€.
# app.py code
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello, Flask!'
@app.route('/name')
def name():
return "My name is yejin!"
if __name__ == '__main__':
app.run(debug=True)
app.pyλ₯Ό μμ±νμ ¨μΌλ©΄ νκ²½λ³μλ₯Ό μ€μ ν΄μΌ ν©λλ€.
$ export FLASK_ENV=development
$ export FLASK_APP=app.py
FLASK_ENVλ₯Ό developmentλ‘ μ€μ νλ μ΄μ λ κ°λ° μλ²μ developmentλΌκ³ μλ¦¬μ§ μμΌλ©΄ production νκ²½μμ μ¬μ©νκ³ μλ€λ©° errorλ₯Ό λ±μ΄λ λλ€. λ°λΌμ νκ²½λ³μλ₯Ό μ€μ νμ¬ κ°λ° νκ²½μ νμ±νν΄μ€λλ€.
$ flask run
μ΄ν μ€νν΄μ£Όμλ©΄ μ¬λ¬ ν μ€νΈλ€κ³Ό ν¨κ»
Running on '~'κ° μΆλ ₯λλ κ²μ λ³Ό μ μμ΅λλ€. μ΄μ ν΄λΉ λ§ν¬λ‘ λ€μ΄κ° 보μλ©΄
app.pyμ μΌλ λ¬Έμκ° μΆλ ₯λ©λλ€! λν μ μ΄λ¦μ μ μ΄λμλ ~/name μλ λ€μ΄κ° 보면
ν μ€νΈκ° μΆλ ₯λ κ±Έ νμΈν μ μμ΅λλ€.
κ°μ νκ²½ λΉνμ±ν
κ°μ νκ²½μμ κ°λ°μ νλ€ κΈ°λ³Έ νμ΄μ¬ νκ²½μΌλ‘ λμμ€κΈ° μν΄μ κ°μ νκ²½μ λΉνμ±νμμΌμΌ ν©λλ€.
$ deactivate
κ°λ¨ν λͺ λ Ήμ΄λ‘ λΉ μ Έλμ¬ μ μμ΅λλ€!