Notice
Recent Posts
Recent Comments
05-21 07:17
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

Flask - 0. 환경 세팅 본문

BackEnd/Flask

Flask - 0. 환경 세팅

알 수 없는 사용자 2024. 2. 6. 13:17

https://flask.palletsprojects.com/

 

Welcome to Flask — Flask Documentation (3.0.x)

 

flask.palletsprojects.com

웹 서버 구축을 위한 Flask 백엔드 프레임워크를 살펴보자.

 

사전 지식

 웹서버는 클라이언트와의 상호작용으로 웹이라는 정보를 제공해주는 서비스를 하는 놈이다. 네트워크에서 서로 연결이 되어 있고 클라이언트가 올바른 프로토콜, 아이피, 포트, 경로를 설정하여 request를 주고 요청 받은 서버는 response로 HTML을 전달해준다. 기본적으로 이 구조를 이루기 때문에 웹서버는 데이터에 맞는 프로토콜(HTTP)을 응답을 생성한다. 생성된 응답은 네트워크로 보내지게 되며, 네트워크 장비가 TCP/IP 프로토콜을 사용해 데이터를 패킷 단위로 분할시키고 TCP/IP 헤더를 추가 후 네트워크를 통해 클라이언트에게 전송되게 된다.

 플라스크는 Python 3.8 이후의 버전에서 쓸 수 있다 기본적으로 파이썬에 내장되어 있는  WSGI 어플리케이션을 통해 HTTP 프로토콜을 만드는데, WSGI(Web Server Gateway Interface)는 파이썬 웹 어플리케이션(플라스크, 장고)과 웹 서버(서버 컴퓨터) 간의 표준 인터페이스(상호작용)을 정의하는 규격이라고 한다. 밑을 참고하자.

# wsgi app 생성

def simple_wsgi_app(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'text/plain')]
    start_response(status, headers)
    return [b"Hello, World!"]

if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    server = make_server('localhost', 8000, simple_wsgi_app)
    print("Serving on port 8000...")
    server.serve_forever()

 매번 위의 코드를 다 칠 수는 없다. 따라서 우리는 Flask, Django와 같은 어플리케이션을 빌려 서버 컴퓨터에게 간편하게 명령을 하여 웹서버 어플리케이션을 구축할 수 있는 것이다.

 

Denpendencies(의존성)

 플라스크는 다음 패키지를 사용하기 때문에 자동적으로 이들이 다운로드 된다.

  • Werkzeug - WSGI를 구현하고, 파이썬과 웹서버 사이의 표준 인터페이스를 제공
  • Jinja - web page를 렌더링 할(보여줄) 때, 틀과 같은 어떤 종류의 웹, 데이터 형식을 제공하는 것이다. 즉, 편리한 틀을 제공하는 것.
  • MarkupSafe - Jinja와 함께 사용되고, 신뢰할 수 없는 입력이 들어왔을때, injection attacks를 피하기 위해 사용된다.
  • ItsDangerous - 데이터가 손상되거나 변경되지 않음(무결성)을 알리기 위해 안전하게 데이터에 디지털 서명을 넣는다.
  • Click - 어플리케이션의 명령어가 쓰여지는 것을 기다리기 위한 프레임워크이다.
  • Blinker - 웹 서버의 어플리케이션이 실행되는 동안 즉, lifecycle 동안에 각 요청에 대한 특정 이벤트를 수행시키도록 한다. 즉, 특정 조건(여기서는 signal이라고 부른다)를 만족시키면 어떤 동작이 발생하는 것을 말하는데, 특정 함수에 signal을 걸어주는 것을 subscribe한다고 표현하는 것같다. 그리고 해당 signal을 없애주는 것을 unsubscribe한다고 한다. 각각은 connect(), disconnect() 메소드를 사용하면 쓸 수 있다고 하니 간단하게만 보고 가자.

 

Optional Dependencies(선택적 의존성)

이는 다운을 해도 되고 안해도 되는 의존성이다. 다만 설치가 되어 있다면, Flask가 이를 감지하고 사용할 수 있도록 한다.

  • python-dotenv - flask 명령어를 사용할 때, dotenv의 환경변수를 지원한다.
  • Watchdog - 웹 서버에 있어서 더 빠르고 효율적인 리로더를 제공한다.

 

greenlet

 greenlet은 파이썬에서 제공하는 라이브러리로 Lightweight Thread를 구현하는 데 사용된다. 이벤트 기반 및 동시성 프로그래밍을 지원하고, 싱글 쓰레드 환경에서는 멀티태스킹 및 동시성을 구현하기 위해 사용되며, 기본 쓰레드와는 달리 명시적으로 제어할 수 있는 마이크로 쓰레드를 쓰면서 코루틴을 지원한다. 이를 이용해 greenlet은 WSGI를 통해 비동기적으로 요청을 처리하고 응답을 생성할 수 있다. 사용하는 것은 greenlet 1.0이상의 버전을 요구하고, PyPy를 사용하는 경우에는 PyPy 7.3.7 이상일때, 이 모듈을 사용할 수 있다.

 

가상환경 세팅

 개발 및 프로덕션에 있어서 앱을 deploy 할 때, 종속성은 중요하다. 또한 프로젝트 각각을 관리하기 위해서는 프로젝트 간에 어디에는 불필요한 패키지가 있고 어디에는 있어야 하는 패키지가 없는 그런 상황이 발생할 수 있다. 즉, 프로젝트 간의 충돌이 있을 수 있는데, 이를 파이썬 개발을 위한 가상환경을 세팅하여 해결할 수 있다. 각 프로젝트마다 독립적인 Python 라이브러리 그룹들을 가지도록 할 수 있고, 다음과 같이 간편하게 세팅할 수 있다.

# Mac OS/Linux
mkdir (프로젝트명)
cd (프로젝트명)
python3 -m venv .venv
# Window
mkdir (프로젝트명)
cd (프로젝트명)
py -3 -m venv .venv

이제 만들었으면 활성화시키자.

 

환경 활성화

# Mac OS/Linux
. .venv/bin/activate
# Window
.venv\Scripts\activate

start.sh를 통해 이를 실행할 수 있다.

 

Flask Installation

 활성화된 환경에서 Flask를 설치하여 Flask를 사용할 수 있도록 하자.

pip install Flask

 

'BackEnd > Flask' 카테고리의 다른 글

Flask - 5. Tutorial Blueprint and View  (1) 2024.02.14
Flask - 4. Define and Access the Database  (1) 2024.02.12
Flask - 3. Tutorial Application Setup  (0) 2024.02.12
Flask - 2. Tutorial Project Layout  (0) 2024.02.08
Flask - 1. Quick start  (1) 2024.02.08
Comments