플라스크

플라스크는 파이썬을 사용하는 마이크로

웹프레임워크입니다. 저자 Armin Ronacher가

2010년 만우절의 장난의 일부로 시작한 프로젝트로

커뮤니티의 반응이 워낙 좋아서 현재까지도

장고와 함께 파이썬의 대표적인 웹프레임워크로

자리매김 하고 있습니다.

 

파이썬 자체도 그렇고 플라스크도 뭔가 재미로

시작해서 여기까지 왔다는게 대단합니다.

인간은 돈을 벌기위해서 일을 하지만

때로는 순수하게 창의성을 발휘해서 세상을

이롭게 변화시키는데 플라스크도

그런 경우라고 할 수 있습니다.

 

마이크로 웹프레임워크(micro web-framework)는

프레임워크를 가볍게 가져가서 스타트업 등의

회사가 빠르게 웹서비스를 론칭할 수 있다는

장점이 있습니다. 장고처럼 풀서비스를 제공하려고

만든 프레임워크는 아니지만 필요한 기능을

추가로 개발할 수 있는 확장성도 있습니다.

 

개인의 학습 용도로도 사용할 수 있고

중소기업의 웹사이트를 만들기에도 좋습니다.

파이썬으로 웹서비스를 구현하려면

플라스크나 장고의 레퍼런스가 많아서

좀 쉽게 접근할 수 있는데 당장 웹에서

뭔가를 시작하고 싶다. 그럴 때는 플라스크도

하나의 고려대상이 될 수 있습니다.

 

장고(django)가 유명하고 잘 갖춰진 프레임워크는

맞지만 확장성(scailibility) 측면에서 플라스크가

장고에 비해 딸리지는 않는다고 합니다.

핀터레스트의 사용례도 있으니까 하기 나름입니다.

 

그럼 플라스크를 시작해보겠습니다

 

플라스크 시작하기

플라스크를 하기 위한 가상환경을 생성합니다.

 

파이썬에는 여러가지 가상환경이 있는데

파이썬 3.3버전 이후에 기본으로

제공되는 venv를 사용하라고 권장합니다.

 

가상환경은 아래 링크를 참고합니다.

 

 

파이썬 가상환경 설치하기

 

파이썬 가상환경 설치하기 - 의존성 - 리눅스

파이썬 가상환경 - 의존성 파이썬 가상환경이란 의존성(dependency)를 관리하기 위한 독립 실행환경입니다. 의존성이라는 용어가 다소 생소하게 들릴 수 있습니다만, 너무 어렵게 생각할 필요는 없

digiconfactory.tistory.com

 

혹은 버전관리가 편한 미니콘다도 많이 씁니다.

주피터를 사용하는 사람들은 거의 콘다를 쓰더군요.

 

미니콘다(Miniconda) 설치하기 - 파이썬 패키지 - 윈도우11

 

미니콘다(Miniconda) 설치하기 - 파이썬 패키지 - 윈도우11

미니콘다 미니콘다(Miniconda)는 아나콘다를 설치하기엔 좀 부담스러운 경우에 좋은 대안입니다. 아나콘다는 500메가 가까이 되는데 비해 미니콘다는 파이썬 3.9 버전이 60메가 정도로 상당히 경량

digiconfactory.tistory.com

 

가상환경이 어떤게 Best 냐는 질문에 관해

커뮤니티를 뒤져보면 각자 자신의 기준에 따라

선택하는 것 같습니다. 어떤게 더 좋다 - 는

절대적인 기준은 없는 것 같습니다.

잘 모르겠으면 python 패키지에 기본으로

제공하는 venv 를 쓰면 됩니다.

 

이 포스팅에서는 venv를 사용합니다.

실행환경은 WSL2 우분투 리눅스입니다.

 

python3 -m venv flask-intro

flask-intro 라는 폴더안에 여러 파일이 설치됩니다.

 

bin 폴더로 들어가서 다음 명령어를 칩니다.

source activate

프롬프트 왼쪽에(flask-intro)가 나오면

가상환경에 들어온 것 입니다.

'pip list' 로 현재 가상환경에 설치된

패키지를 볼 수 있습니다.

 

pip로 플라스크를 설치합니다.

pip install Flask

python 인터렉티브 모드에 들어가서

다음 두줄을 실행합니다. 플라스크의

버전이 잘 나오면 설치가 잘 된 겁니다.

import flask
flask.__version__

 

클라이언트에 Hello, Flask 메시지를 보내보겠습니다.

 

아래의 코드를 입력해서 실행합니다.

pycharm 등의 IDE를 사용하면 좀 더

쉽게 작업할 수 있을 겁니다.

 

from flask import Flask

print('[Hello, Flask!]')
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, Flask!'

if __name__ == '__main__':
    app.run(debug=True)

서버 메시지가 출력됩니다.

서버 메시지 플라스크

부라우저 localhost:5000 에서 웹문서가 출력됩니다

 

플라스크를 쓰면 순식간에

웹서버를 실행할 수 있습니다.

 

Flask 클래스는 WSGI (web server gateway interface)를

구현하는 핵심 객체입니다. 웹서버에 관련된 온갖

작업들을 알아서 처리해줍니다.

 

index() 는 view 함수입니다. root URL '/' 에 접속시

index() view 함수를 호출해서 클라이언트에 보냅니다.

 

@app.route 는 파이썬 데코레이터 문법입니다.

바로 다음에 나오는 index() view 함수의 래퍼인데

간단히 말하면 index()에서 보내는 페이지를

앱의 라우팅에 연결합니다. 여기서는 매개변수에

'/' 를 넣었는데 예를 들어서 www.flaskintro.com 라면

최상위 페이지를 말합니다.

실제로는 view 함수에 템플릿을 렌더링해서

html 파일을 전송합니다. 이렇게 문자열을

찍는 건 그냥 예제를 위한 코드입니다.

 

if __name__ 

...

 

이 라인은 이 파일을 import 할 때

실행하지 못하도록 합니다.

 

브라우저의 값을 받기

브라우저에서 값을 받아서 매개변수로

처리하는 예제를 한번 해보겠습니다.

 

아래 코드에서 데코레이터에 /<name> 이 들어갑니다.

localhost:5000/(문자열) 에서 이 (문자열) 정보를

name이란 매개변수로 사용합니다.

 

route 가 받는 인수(argument)에 따라

실행하는 함수가 달라집니다.

함수 오버로드와 약간 비슷한데

이는 mapping 의 개념입니다.

 

즉 브라우저(클라이언트)에서 보낸 요청에 따라

매핑시켜서 응답이 달라지는 방식입니다.

주의할 점은 URL과 route가 매치가 안되면

404 응답(서버에 URL 요청이 없다)을 전송합니다.

(404응답은 웹서핑하면서 자주 나오지요.)

 

기본적인 요청과 응답관계(클라이언트-서버)가

아주 쉬운 코드로도 실행이 됩니다.

 

from flask import Flask

print('[Hello, Flask!]')
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, Flask!'

@app.route('/<name>')
def hello(name):
    return 'Hello, %s' % name

if __name__ == '__main__':
    app.run(debug=True)

 

*******

 

간단하게 플라스크를 시작해봤습니다.

웹 프레임워크가 대체로 그렇듯이

HTML, CSS, Javascript 이 세가지는

어느정도 알고 있어야 본격적으로

뭔가를 만들어 볼 수 있습니다.

파이썬도 최소한 기본 문법은

알고 있어야 수월할 겁니다.

 

프레임워크를 사용한다는 것은

거의 종합적인 테크닉들이 들어가기 때문에

이제 조금 컴푸터로 쓸만한 앱을 만들 수 있는

수준이 되었다고 생각해도 됩니다.

 

만약 시작부분 부터 나는 잘 모르겠다 -

그렇다면 프로그래밍의 기본으로 돌아가서

파이썬, HTML, CSS, Javascript 의 기초를

좀 더 다진 다음 다시 시도해보는 것도 방법입니다.

 

 

 

*참고링크

 

venv — 가상 환경 생성 — Python 3.10.2 문서

venv — 가상 환경 생성 소스 코드: Lib/venv/ venv 모듈은 자체 사이트 디렉터리를 갖는 경량 《가상 환경》을 만들고, 선택적으로 시스템 사이트 디렉터리에서 격리할 수 있도록 지원합니다. 각 가

docs.python.org

 

 

Welcome to Flask — Flask Documentation (2.0.x)

 

flask.palletsprojects.com

 

공유하기

facebook twitter kakaoTalk kakaostory naver band