2021. 8. 5. 00:48ㆍSERVER/Flask
Web의 동작 과정
원하는 정보에 대한 요청과 응답은 규칙 없이 이루어지지 않는다
Client : 미리 약속한 규칙을 통해 요청
Server : 정해진 형태의 데이터로 응답
구글, 네이버와 같은 각 페이지의 접속 주소는 미리 약속된 주소(API 주소)
약속되어있는 주소에 미리 약속된 방법으로 요청, 응답을 주고받으며 해당 페이지를 열람
이때, 정해진 방식(미리 약속된 방법)으로 데이터의 통로 역할을 하는 것이 API
Framework
결과물을 만들기 위해 제공되는 틀, 미리 작성되어 있는 함수 (라이브러리) 이상의 기능을 제공
1. Flask
Python을 사용해서 웹 서버를 만들 수 있게 도와주는 Web Framework
즉, 웹 서버를 만들기 위해 제공되는 틀(함수 이상의 기능을 제공하는)이다
Flask는 대표적인 Micro Framework로, 웹 서버를 만들기 위한 기본적인 기능만 제공한다
(원하는 기능을 유연하게 확장하며, 개발이 자유롭다는 장점이 있다)
app.run() 과 같은 간단한 코드로 서버를 빠르게 실행시킬 수 있다
[요약]
- 파이썬을 사용하는 웹 프레임워크
- 간단한 코드로 서버를 만들 수 있기 때문에 접근성 및 빠른 실행이 장점
- 최소한의 기본적인 기능만 제공하기 때문에 많은 기능이 포함되어있지는 않다
2. 가상 환경
본격적으로 플라스크를 사용하기 전 먼저 가상 환경을 사용한다
가상 환경을 사용하는 이유는 프로젝트 별로 다른 버전의 파이썬 라이브러리로 작업할 시
다른 프로젝트의 호환성을 깨뜨릴 수 있다
또한, VSCode와 같은 Editor에 무분별하게 패키지를 install 하다 보면 나중에 구분이 힘들다
python3 -m venv venv 또는 python -m venv venv
source venv/bin/activate 또는 souce venv/Scripts/activate
pip list 또는 pip3 list (Package와 Version 확인)
(해당 과정은 bash Terminal에서 진행했다)
위와 같은 결과를 확인했다면 가상 환경 설정 완료
3. Flask 웹 서버
pip install flask 또는 pip3 install flask (Flask 설치)
정상적으로 설치 시 위와 같은 결과를 확인할 수 있다
app.py 파일을 생성하여 아래와 같이 작성
(웹 서버를 구현하기 위한 가장 기본적인 코드)
app = Flask(__name__)
import 한 Flask를 app 변수 안에 값으로 할당
(__name__)은 해당 파일이 다른 파일에 의해 실행됐는지, 직접 실행됐는지 대한 여부 판단
@app.route("/")
서버에 접속할 수 있는 주소, url을 만들어주는 통로
즉, API를 만들어주는 역할을 하는 것이다
여기서 app은 위에서 Flask를 값으로 할당해준 변수 app을 가리킨다
(@는 Decorator로 반복적인 기능을 위해 다양한 코드를 써야 하는 경우, 그 수고를 덜어준다)
def test():
return "Hello, Flask"
@app.route("/") url에서 실행할 함수가 정의된 것
아래에서 확인할 수 있는데, 페이지 상에서 "Hello, Flask"가 출력되는 것을 확인할 수 있다
if __name__ == "__main__":
app.run()
파일 이름이 main일 때만 app.run()이 실행
위 코드를 실행 시 Running on http://127.0.0.1:500/ 주소가 나오며 동작한다
(http://127.0.0.1:5000/, Local 실행 시 기본으로 설정되어있는 포트)
링크로 이동하면 위와 같이 나만의 웹 서버가 잘 동작하고 있음을 확인할 수 있다
'SERVER > Flask' 카테고리의 다른 글
6. Flask (Authentication) (0) | 2021.08.06 |
---|---|
5. Flask (CRUD) (0) | 2021.08.05 |
4. Flask (Blueprint, Jinja Template) (0) | 2021.08.05 |
3. Flask (HTTP Method) (0) | 2021.08.05 |
2. Flask (JSON, URL) (0) | 2021.08.05 |