Flask

Flask 이용한 웹사이트 제작기 (9) - 배포

sseram 2023. 7. 25. 08:52
반응형

 

 

마지막 듀토리얼!

웹사이트를 제작을 했으니, 이제 배포를 해야하지 않겠는가?

물론 고사양 서버는 없지만, 여기서 실제로 배포를 한 후 핸드폰으로 접속해보는 정도는 가능할 듯 하다. 그것을 목표로 진행해 보자.

 


- Build and Install

 

이 app을 다른곳에 배포하려는 경우, .whl file을 빌드해야 한다고 한다.

 

$ pip install build
$ python -m build --wheel

 

 

 

이렇게 두 개를 수행하고 나면, ~~~.whl 파일이 새롭게 생긴다. 저 복잡해 보이는 whl의 이름 포맷은 {project name}-{version}-{python tag} -{abi tag}-{platform tag} 라고 한다. 뭐가 많긴 많다...

 

 

 

이제 저 .whl 파일을 다른 곳에서 copy하여서, 똑같이 virtualenv를 만든 후, pip을 통해 아래와 같이 install 하면 된다.

 

 pip install flaskr-1.0.0-py3-none-any.whl

 

 

그 후, init-db 까지 해 주면 준비 완료.

다만 나는 아직 다른 머신이 없어서 직접 해 보진 못했다...

 

 

 

- Configure the Secret Key

 

프로젝트 시작할 때, 우린 

    app.config.from_mapping(
        SECRET_KEY='dev',
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )

 

이런 식으로, secret_key를 간단하게 정하고 시작했다. 다만 이제 배포를 해야 하니, 저렇게 줄 수는 없는 일.

 python -c 'import secrets; print(secrets.token_hex())'

 

위와 같은 명령어를 치면 랜덤 키가 생성되니, 몇 번 하다가, 적당히 보이는 값을 가져다 쓰도록 하자.

다만 __init__.py 에 대놓고 쓰면 secret이 아니지 않은가? 그래서 이 듀토리얼에서는

.venv/var/flaskr-instance/config.py

위의 경로에 secret key를 설정해 두라고 한다.

 

위의 secret key가 아니어도, 다른 config 설정은 이 곳에서 해 주면 좋을듯 하다.

 

 

- Run with a Production Server

 

 

지금까지는 flask run을 이용하여 app을 실행시켰다. 다만 이것은 개발을 위해 간편하게 만들어진 서버에서 돌릴 뿐이지. 실제 이 사이트를 공개하고 돌리기 위해서는 몇 단계 더 나아가야만 한다.

 

먼저, WSGI server를 사용해야 한다. 

첨 들어보는 용어라서. chat gpt에게 물어보니까

 

더보기

WSGI(웹 서버 게이트웨이 인터페이스)는 Python 웹 애플리케이션과 웹 서버 사이의 표준 인터페이스를 정의하는 규칙 세트입니다. WSGI는 Python 웹 프레임워크와 웹 서버가 서로 상호작용할 수 있도록 표준화된 방법을 제공합니다.

WSGI 서버는 다음과 같은 주요 역할을 담당합니다:

1. 웹 애플리케이션과의 연결:
WSGI 서버는 클라이언트의 HTTP 요청을 받아 웹 애플리케이션에게 전달합니다. 이 때, 웹 애플리케이션은 WSGI 인터페이스를 준수하는 함수 또는 객체여야 합니다.


2. 환경 변수 설정:
WSGI 서버는 웹 애플리케이션에 필요한 환경 변수를 설정하여 요청과 관련된 정보를 전달합니다. 웹 애플리케이션은 이러한 환경 변수를 통해 요청 및 응답을 처리합니다.


3. 응답 처리:
웹 애플리케이션이 HTTP 요청을 처리하고 적절한 응답을 생성하면, WSGI 서버는 이를 받아 클라이언트에게 응답으로 전달합니다.


WSGI는 Python 웹 애플리케이션을 웹 서버와 독립적으로 작성할 수 있도록 도와주며, 서로 다른 웹 서버에서도 동일한 애플리케이션을 실행할 수 있게 합니다. 즉, WSGI 서버는 웹 애플리케이션과 웹 서버 사이의 추상화 계층을 제공하여 개발과 배포를 더 편리하게 만들어줍니다.

일반적으로, Python 웹 애플리케이션은 WSGI 인터페이스를 준수하는 웹 프레임워크 (예: Flask, Django) 위에서 작성됩니다. 웹 서버는 WSGI 인터페이스를 지원하는 WSGI 서버 (예: Gunicorn, uWSGI)와 함께 사용하여 애플리케이션을 실행합니다. 이러한 조합은 Python 웹 애플리케이션의 배포와 확장을 용이하게 합니다.

 

저렇게 설명해 주더라. 간단하게 생각해 보자면, 중간에 인터페이스를 하나 둬서, 개발, 배포를 편하게 하고 보안까지 신경써주는 편리한 녀석인 듯 하다.

WSGI server 여러 개 중, 여기서는 waitress라는 것을 사용한다.

 

pip install waitress

 

install 후, 'flask --app flaskr run ' 대신 아래와 같이 사용하면

waitress-serve --call 'flaskr:create_app'

 

자쟌

저렇게 배포가 된다.

 

저 상태에서, 내 현재 ip주소를 확인해 본 다음

 

 

저 ipv4 주소 :8080

1.2.3.4:8080 을 통하여 다른 기기에서 접속하면, 정상적으로 내가 만든 app에 접속이 되는 것을 확인할 수 있다!!

 

 

듀토리얼 끝!

반응형