본문 바로가기

기타/시스템 설정

Oracle Cloud VM에 Flask 웹 애플리케이션 서버 설치하기

728x90

Oracle Cloud에 VM도 설치했고... nginx 웹서버도 설치했습니다.

여태 계획만 하고 있었던 주가예측 시스템을 구축하는 작업을 슬슬 시작해도 될 것 같습니다.

사실 주가예측만 할 것이 아니라 이것저것.. 웹서버가 필요한 여러 프로젝트에서 공용으로 사용할 계획입니다만...

20년 가까이 사용해왔던 자바를 버리고 파이썬을 선택한만큼 WAS(웹 애플리케이션 서버, Web Application Server)도 파이썬을 기반으로 한 Flask를 설치해 볼 계획입니다.

 

사실 예전 글에서 Flask가 아닌 FastAPI라는 것을 설치하고 사용해 본 적이 있습니다.

 

FastAPI의 설치와 확인 (tistory.com)

 

FastAPI의 설치와 확인

오늘은 전체의 기반이 되는 환경설정과 FastAPI의 설치를 해 보겠습니다. 파이썬 기반의 환경설정은 매우 간단합니다. 예전에는 사용 편의성때문에 아나콘다를 주로 사용했는데 텐서플로우 2.x 버

aidalab.tistory.com

 

그리고 Falsk를 벗어나서 FastAPI로 이동하는 사람들이 늘고 있다는 기사도 본 적이 있습니다.

그렇지만 얼마 전에 Flask 책도 한 권 구입한 김에... 일단 Flask를 먼저 사용해보자... 라고 생각했습니다.

 

일단.. 파이썬 환경부터 확인해야 했기에 현재 VM(Oracle Linux 7.9)에 설치된 파이썬 버전이 어떻게 되는지 확인해 보았습니다.

메인은 Python 2.7.5 버전이 설치되어 있었고, Python3의 경우에는 Python 3.6.8 버전이 설치되어 있더군요.

최신 파이썬을 설치해서 사용해보자~ 라고 생각하고...

공식사이트에서 확인해보니 최신 버전은 3.10.0 이더군요.

 

리눅스를 위한 파이썬 설치파일은 따로 제공되지 않기 때문에 소스코드를 다운로드해서 직접 빌드해야 한다고 합니다.

여기저기 찾아보니 꽤 복잡하더군요.

리눅스에서 시스템 구성요소를 빌드하는건 처음이라..

몇 번 시도했는데 다 어디선가 문제를 일으키더군요.

결국 찾긴 찾았습니다.

$ sudo yum update -y
$ sudo reboot
# update 후에 재부팅을 하지 않으니 인식을 못하더군요.

$ sudo yum groupinstall "Development Tools" -y
$ sudo yum install openssl-devel libffi-devel bzip2-devel -y
$ gcc --version
# GCC는 소스코드를 빌드할 때 사용됩니다.

$ sudo yum install wget -y
$ wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz
$ tar xvf Python-3.10.0.tgz
$ cd Python-3.10.0/
$ ./configure --enable-optimizations
$ sudo make altinstall

# 설치가 끝났습니다. 버전을 확인해 봅시다.
$ python3.10 --version
$ pip3.10 --version

 

왠지 꼭 필요한 모듈 말고도 여러가지가 많이 설치된 것 같은데 뭐가 뭔지 잘 모르기때문에 그냥 넘어가겠습니다.

빌드가 끝나고 Python3.10, pip3.10으로 버전을 확인해보면 잘 설치된 것을 확인할 수 있습니다.

기존에 설치되어 있는 Python 3.6.8과 어떻게 구분할지.. 궁금했는데 아예 버전을 두 번째 값까지 다 써주는군요.

파이썬 3.10.0 버전과 그에 따른 pip 21.2.3 버전이 잘 설치되었습니다.

 

이제 가상환경을 만들고 Flask를 설치해야겠지요.

$ python3.10 -m venv Flask
$ cd Flask/
$ source ./bin/activate
(Flask) $ _

 

가상환경은 문제 없이 설치되었습니다.

$ pip install Flask

가상환경을 활성화시킨 후에는 버전입력 필요없이 python, pip 명령만으로 가상환경 생성 시 적용된 버전을 사용할 수 있습니다.

그런데 Flask가 설치 되지 않는군요..

아무래도 SSL 버전과 잘 맞지 않는 문제가 있는 것 같습니다.

SSL 설정, 기타 버전 설정 등 여러가지를 찾아보면서 시도해봤지만 안되더군요.

이렇게 하면 해결된다... 라는 글은 많이 찾았지만 국내 포스팅이건 해외 포스팅이건.. 결국 모두 실패했습니다.

 

Flask는 쓸 수 없는건가... 하고 생각하다가 문득 떠오른 것이 Python 3.10.0 이 최신버전이라는 것이었습니다.

혹시 최신버전이라서 아직 적용이 되지 않았거나.. 아니면 호환성에 문제가 있는 것이 아닐까.. 라는 생각이 들더군요.

 

그래서 바로 이전 버전인 Python 3.9.9 를 새로 설치해 보았습니다.

$ sudo yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel
# 이 모듈들은 이미 3.10.0 설치때 yum groupinstall "Development Tools" 명령을 통해서
# 설치가 된건지 따로 실행하지 않아도 문제없이 동작합니다.


$ wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz
$ tar xzf Python-3.9.9.tgz
$ cd Python-3.9.9
$ sudo ./configure --enable-optimizations
$ sudo make altinstall
$ python3.9 -V

잘 설치 되었군요.

그럼 다시 가상환경을 생성하고 Flask를 설치해 보겠습니다.

$ python3.9 -m venv FlaskWAS
$ cd FlaskWAS
$ source ./bin/activate

가상환경은 정상적으로 동작하고 있습니다.

이제 Flask를 설치할 차례죠.

pip install Flask

순식간에 설치를 성공하였습니다.

역시 Python 3.10.0이 최신버전이라서 뭔가 문제가 있었나봅니다.

 

그럼 이제 Flask WAS가 제대로 동작하는지 확인해 볼 차례입니다.

# File Name: hello.py

from flask import Flask

app = Flask(__name__)

@app.route('/index')
@app.route('/')

def hello_world():
    return 'Hello World!!!'

방금 작성한 파이썬 코드를 통해 라우팅 정보와 Hello World!!! 문자열을 브라우저에서 출력하도록 할 것입니다.

Flask를 동작시키기 위해서 먼저 환경 변수를 등록하고 Flask를 실행시킵니다.

(FlaskWAS) $ export FLASK_APP=hello.py
(FlaskWAS) $ export FLASK_ENV=development
(FlaskWAS) $ flask run

잘 동작하고 있습니다.

외부에서 접속되는 모습까지 확인해야 확실한데... 현재의 Flask는 개발용 서버로 되어있기 때문에 외부 접속을 확인할 수 없습니다.

localhost(127.0.0.1)에서 브라우저로 확인이 가능하지만 지금 VM에 접속하는 모드가 터미널 모드만 열려있기때문에 직접확인하기가 어렵네요.

 

또한 외부에서 접속하려면 개발 모드가 아닌 상용모드를 적용해야 하므로 export FLASK_ENV=production 으로 설정해야하는데 설정을 해 주더라도 아래와 같이 메시지를 보여줍니다.

외부 접속을 위해서 WSGI 서버를 사용하라는 말이죠.

그것때문에 지난 글에서 설치한 NGINX Web Server 또는 Apache Web Server와 같은 상용으로 사용가능한 웹서버를 설치하고 WSGI 설정을 마친 후 Flask WAS와 연동하여야 합니다.

해당 과정은 다음에 계속하도록 하겠습니다.

 

이렇게 해서 Flask WAS를 설치하고 동작시키는 것까지 완료하였습니다.

 

Flask WAS의 설치에 실패한 Python 3.10.0 환경에서는 지난 번에 시도했었던 FastAPI를 사용해보는 것은 어떨까.. 하고 생각중입니다.

그럼 다음 글에서는 외부 접속을 위한 설정까지 진행해보도록 하겠습니다.

 

 

 

 

 

728x90
반응형