[Flask 웹 프레임워크] 첫 Python 웹 프로그램 (Hello, Flask!)

웹 프로그래밍을 위한 언어 중 가장 유명하고 널리 쓰이는 언어는 Java다. Java 계열의 프로그래밍언어는 웹 프로그래밍 뿐만아니라 안드로이드 앱 개발에도 사용되며 서버 프로그래밍에서도 사용되는 “세상에서 가장 널리 사용되는 프로그래밍 언어”이다.  그 다음으로 널리 사용되는 프로그래밍 언어는 사람들이 가장 어려워하는 언어 중 하나인 C언어와 C++, 그리고 C# 등 C언어 계열의 언어다. 그리고 그 다음이 바로 파이썬(Python)이다.

파이썬은 조금만 공부하면 그 뒤 부터는 무언가 프로그래밍 혹은 업무 자동화가 필요할 때 어떻게 프로그래밍을 할 것인가 보다 셀 수 없이 많은 라이브러리 중에서 어떤 라이브러리를 사용할 것인가를 더 고민하게 만들만큼 유용한 도구들이 즐비한 언어라고 한다.

그래서 파이썬을 한번 경험해볼까 싶기도 했고 파이썬으로 웹 프로그래밍도 가능하다하여 공부를 해볼까 한다. 먼저 파이썬을 이용해 웹서버를 만들고 웹서버에서 모든 프로그래밍 언어를 시작할 때 모든 사람들이 한번씩 코딩한다는 Hello, XXX를 작성해보기로 했다.

파이썬 설치

우분투 리눅스 20.04의 경우 python3가 이미 기본 설치되어 있다. 다만 pip3는 설치되어 있지 않을 수도 있으므로 apt-get install pip3 명령으로 설치하면 된다.

python과 pip 버전확인

python은 기본적으로 인터프리터 언어다. 즉 C언어나 Java 계열 언어와 달리 컴파일이 필요없으며 스크립트 처럼 작성된 소스코드가 저장된 파일을 python3 (혹은 python)을 이용해 한줄한줄 읽고 실행하게 된다.

그리고 PIP는 파이썬으로 무언가를 프로그래밍할 때 사용할 수 있는 수없이 많은 라이브러리 또는 프레임워크를 설치할 수 있는 패키지 관리자다. 잠시 후에 PIP를 이용해 파이썬의 몇몇 도구들을 설치하게 된다.

파이썬 가상환경(venv) 구성하기

파이썬과 PIP가 설치되었다면 파이썬의 가상환경인 VENV의 구성을 위한 디렉토리를 생성한다. 여기서는 /blogger 라는 경로를 생성한다.

파이썬 가상환경 구성을 위한 디렉토리 생성

그리고 소유자를 ubuntu, 그룹을 ubuntu로 생성해준다. 주로 작업할 계정이 바로 ubuntu다. 만약 다른 계정으로 파이썬으로 작성한 웹서버를 구동하고자 한다면 해당 계정과 계정이 속한 그룹을 지정해주면 된다.

처음부터 모든 작업은 ubuntu 계정으로 ssh 접속하여 진행하고 있다.

다음은 python3의 가상환경인 venv 패키지를 설치해준다.

파이썬 가상환경을 위한 venv 설치
파이썬 가상환경을 위해 venv를 설치

파이썬 가상환경이 venv가 정상적으로 설치되었다면 가상환경 구성을 위해 생성해둔 /blogger 디렉토리에서 새로운 가상환경을 만들어준다. 가상환경의 이름은 www_1.0 이다.

venv에서 가상환경 만들기
venv로 가상환경 생성

생성된 가상환경에 들어가보면 여러개의 디렉토리와 파일이 생성되어 있는 것을 볼 수 있다.

생성된 가상환경에 생성된 파일들

이 venv의 가상환경은 도커처럼 가상환경으로 들어가거나 나올 수 있는데 이 때는 bin 디렉토리의 activate 스크립트를 이용해 진입하거나 나올 수 있다. 다만 도커처럼 호스트의 디렉토리나 파일과 가상환경의 디렉토리와 파일들이 완전하게 격리되지는 않는다. 이는 더 편리하게 느껴질 수도 있고 불편하거나 보안에 취약하다고 느낄 수도 있다.

가상환경으로 진입하기 위해서는 bin 디렉토리의 activate 명령을 이용한다.

activate 명령으로 가상환경 진입하기

activate 파일은 스크립트다. 즉 실행퍼미션(x)이 부여되어 있지 않다. source 명령을 이용해 실행해야 한다. activate 스크립트를 실행하고 나면 프롬프트가 바뀌는데 가상환경 명칭이 (  ~  ) 에 포함되어 명령프롬프트의 맨 앞에 표시된다. 위에서는 www_1.0 이라는 가상환경으로 진입했다는 것을 알 수 있다.

파이썬 웹프레임워크 Flask 설치

Flask 라는 파이선 웹 프레임워크를 설치한다. pip3 명령을 이용해 설치한다.

파이선 웹프레임워크 Flask 설치
파이썬 웹프레임워크 Flask 설치

정상적으로 설치되었다면 “파이썬 + 파이썬 가상환경 + 웹서버” 설치까지 완료된 것이다.

첫 파이썬 웹페이지 작성하고 실행하기

웹프레임워크까지 설치가 완료되면 홈페이지 소스를 작성할 디렉토리를 생성한다. 이 포스트에선 /www_1.0 이라는 디렉토리를 만든다.

홈페이지 소스디렉토리 생성(도큐먼트루트)

생성한 디렉토리의 소유자를 웹서버를 실행할 계정의 소유자로 변경한다. 여기서는 ubuntu 계정과 ubuntu 그룹으로 지정한다.

소스파일은 blogger.py라는 이름으로 생성하고 적색 상자의 소스를 작성한다.

첫 Flask 웹 프로그램 소스코드
첫 파이썬 Flask 웹페이지 소스

실제 작성은 vi 또는 nano 등의 아스키 편집기를 이용해 작성한다. 위에서는 이미 작성해둔 소스를 cat 명령으로 본 화면이다. 이 파일은 Flask 웹프레임워크로 작성하는 Main Application (메인 앱)이 된다.

그리고 이 Flask 애플리케이션 이름을 환경변수로 지정해주고 디버깅모드를 위한 환경변수도 지정해준다.

Flask 앱 실행을 위한 환경변수 설정

환경변수가 정상적으로 설정되어 있는지 확인하고자 할 땐 다음과 같이 env 명령을 이용해 확인할 수 있다.

env 명령으로 환경변수 확인

환경변수까지 확인이 되었으면 flask 명령으로 다음과 같이 웹애플리케이션을 실행한다.

Flask 웹 애플리케이션 실행
flask 명령으로 blogger 웹 애플리케이션 실행

flask 명령에 애플리케이션 명을 주지 않으면 환경변수 FLASK_APP에 지정된 애플리케이션을 찾는다. 즉 blogger라는 애플리케이션을 찾는데 그 파일명은 .py를 붙여(파이썬 애플리케이션이므로) blogger.py를 찾아 실행하는 것이다.

만약 –host=0.0.0.0 을 주지않으면 기본적으로 127.0.0.1의 IP로 들어오는 요청만 처리한다. 이 경우 다른 컴퓨터 즉 PC의 브라우저에서 리눅스 “http://서버IP:5000″과 같이 호출해도 Flask 웹서버는 응답하지 않는다. 반드시 서버의 IP 또는 0.0.0.0의 IP를 host 변수에 지정해주어야 한다.

정상적으로 동작하면 위 화면과 같이 Flask 웹서버에서 실행중인 blogger Ap가 응답한다.

이렇게 호출이 정상적으로 처리되면 다음과 같이 flask 명령어로 실행한 창에 디버깅에 도움이 되는 로그가 출력된다.

디버깅 로그

하지만 매번 가상환경을 Activate하고 웹어플리케이션 관련 환경변수를 설정한 뒤 프로젝트의 소스파일이 있는 경로로 이동하는 것은 꽤나 귀찮다. 따라서 이 과정을 하나의 쉘스크립트에 저장해두고 한번에 실행하는 것이 편하다.

다음과 같이 쉘스크립트를 만들고 다음 부터는 쉘 스크립트를 실행하여 한번에 가상환경에 진입한다. flask 명령으로 웹서버를 구동하는 라인도 포함해도 좋다.

venv 가상환경 진입과 웹어플리케이션 실행 스크립트

또 다른 실행방법

flask 명령어로 blogger 웹애플리케이션을 실행하면 내부적으로 python 명령을 이용해 실행하게 되지만 직접 python 명령으로 blogger.py 를 실행할 수도 있다. 그렇게 하고자 한다면 blogger.py 소스에 다음과 같이 노란색 상자의 내용인 app.run() 함수를 추가로 작성해준다.

python 명령으로 직접 실행하기 위한 웹애플리케이션 소스 수정

다만 app.run() 함수에 host와 port를 위 화면과 같이 인자로 전달해주어야 한다.

그리고 python3 명령으로 다음과 같이 blogger 웹애플리케이션을 실행한다.

python 명령으로 flask 웹애플리케이션 직접 실행

오늘은 여기까지….  다음포스트에서는 Blueprint를 통한 모듈화에 대해 포스팅한다.

#python

#flask

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top