1. Framework
하나의 결과물을 만들기 위해 제공하는 틀
미리 작성되어있는 함수 이상의 기능 제공
파이썬 기반 웹 Framework
파이썬의 하나의 패키지
- 다량의 기능 내장되어 제공
- e.g. Django
- ORM(Obejct Relational Modeling) 기능 내장
- ORM 데이터 베이스와 객체지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법
- 자동으로 관리자 화면 구성
- Micro Service Architecture
- 기본적인 기능만 제공하고 이외는 붙여나감
- Mono 하나
- e.g. Flask, Pyriami, Bottle
- 간결한 코드로 웹서버 구동
- 기본적인 기능만 제공하고 이외는 붙여나감
2. Flask Framework
https://flask.palletsprojects.com/en/2.0.x/
- 파이썬 기반의 자유도가 높은(최소한의 규칙) 마이크로 웹 프레임워크
- 폼, 데이터베이스 처리 기능이 없어 확장 모듈로 보완
장점
- 나만의 서버를 쉽게 작성
- 높은 유연성, 확장성
- 짧은 코드로 간결하게 유지
2.1 설치
Flask 2.0.x 설치 요구사항: Python 3.7 +
설치 링크: https://flask.palletsprojects.com/en/2.0.x/installation/
터미널(MacOs기준)
pip install Flask
파이썬 기반으로 웹서버를 만들수록 도와주는 웹 프레임워크로 동작
2.2 실행방법
FLASK_APP환경 변수 기본값 설정하기
환경변수를 따로 지정하지 않은 경우 자동으로 app.py를 기본 애플리케이션으로 인식
다른 이름으로 지었다면 환경변수를 별도 설정 필요함
서버를 개발환경(development)으로 실행
#set FLASK_APP=어플리케이션명
set FLASK_APP=app
set FLASK_ENV=development
flask run
(1) 로컬 서버
디버깅 모드에서는 기본적으로 5000번 포트에 화면 출력
http://127.0.0.1:5000
export FLASK_APP=프로젝트명 #프로젝트명 export FLASK_ENV=development #기본값 flask run #플라스크 서버 실행
0.11 이전 버전의 Flask에서는 동작하지 않는다. 이전에는 다른 방식으로 애플리케이션을 실행해서 0.11 버전 이전인 경우 업그레이드해야 한다.
(2) 외부 서버
debugger 비활성화하거나 모든 public IP를 접근 가능토록 설정 하단과 같이 쓴다.
export FLASK_APP=프로젝트명 #프로젝트명 export FLASK_ENV=development #기본값 flask run --host=0.0.0.0
app.run()에 호스트 지정하여 변경
app.run() //127.0.0.1 or localhost로 접속(default) app.run(host='192.168.0.22') //로컬 컴퓨터의 내부 로컬 IP app.run(host='0.0.0.0') //어떤 호스트에서도 연결 가능
호스트뿐 아니라 기본 포트 번호인 5000번 말고 다른 포트로 서버를 열고 싶을 때도 설정해주면 변경된다.
if __name__ == '__main__': app.run(host='0.0.0.0',debug=True,port=8888)
2.3 Flask Application 만들기
가장 간단한 게 만드는 minimal 애플리케이션
from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "<p>Hello, World!</p>" if __name__ == '__main__': app.run(debug=True)
코드 해석
- from flask import Flask
- 플라스크 모듈에서 객체 가져옴
- app = Flask(__name__)
-
앱 변수에 객체 대입(외부에서 호출한 파일 이름을 리턴 )
- Flask클래스의 인스턴스를 생성한다. 단일 모듈 사용 시 __name__ 사용하여 애플리케이션으로 시작하는지 임포트 되는지에 따라 이름이 달라진다.
- https://flask.palletsprojects.com/en/2.0.x/api/#application-object
-
- @app.route("/")
def hello_world():
return "Hello, World!"
- route @데코레이터: 어떤 URL에 함수를 매핑해야 하는지 가리킴
- 하나의 route에 여러 개 함수 매핑 가능
- 함수의 리턴 값이 유저의 브라우저에 표시된다. (기본값은 HTML)
- 따로 네트워크 관련 구현 없이 반환할 것만 명시하면 알아서 처리
- /세부 주소
- route @데코레이터: 어떤 URL에 함수를 매핑해야 하는지 가리킴
- if __name__ == '__main__':
app.run()- run() 함수를 사용해서 개발한 애플리케이션을 로컬 서버로 실행
- 소스파일을 모듈이 아닌 python 인터프리터를 이용해서 직접 실행한다면 if __name__ == '__main__': 이 문장은 우리가 실행한 서버가 현재 동작되는 유일한 서버라는 것을 보장(다른 곳에서 가져와 사용하는 경우가 아닌 경우)
- 디버깅, 테스트용
- debug=True로 설정하면 수정 시에 자동으로 재부팅됨
주의 사항
파일 이름 flask.py로 하면 Flask와 충돌을 일으키므로 주의
참고: https://flask.palletsprojects.com/en/2.0.x/quickstart/
'CS > Web' 카테고리의 다른 글
[BE-Django] model (0) | 2021.12.06 |
---|---|
[BE-Flask] 4. HTTP (0) | 2021.11.09 |
[BE-Flask] 3. 플라스크 템플릿 (0) | 2021.11.08 |
[BE-Flask] JWT(Json Web Token) (0) | 2021.11.05 |
[BE - Flask] 2. 라우팅(Routing) (0) | 2021.11.04 |