파이썬 관련 포스팅 목록
2020/06/19 - [Linux/Python] - [Python] Flask Jinja2 템플릿 사용하기(Flask Jinja2 Template)
2019/08/05 - [Linux/Python] - [Python] Flask 웹 서버 구축하기 - 2(Linux Ubuntu 16.04 Flask Web Server)
2019/08/04 - [Linux/Python] - [Python] Flask 웹 서버 구축하기 - 1(Linux Ubuntu 16.04 Flask Web Server)
2019/08/03 - [Linux/Python] - [Python] 리눅스 우분투 Python 2.7 설치 (Linux Ubuntu 16.04 python 2.7 install)
2020/04/29 - [Linux/Python] - [Python] 파이썬 For문
Flask 웹서버 엔드포인트 설정
안녕하세요 오늘은 Flask 웹서버에서 특정 URL, 즉 엔드포인트를 설정하는 방법에 대하여 알아보겠습니다. 엔드포인트란 우리가 일반적으로 "https://www.naver.com/homepage" 와 같은 URL로 인터넷에 접속합니다. 이 때 네이버의 웹서버 루트 주소는 "www.naver.com" 이고 엔트포인트는 "/homepage" 입니다. 이와 같은 엔드포인트는 한개가 아니라 수 없이 많을 수 있습니다.
이처럼 우리가 앞서 환경구성한 파이썬 Flask 웹 서버에서도 클라이언트들이 접속할 경로가 필요하겠죠? 그래서 오늘 포스팅에서는 이 엔드포인트 구현 방법에 대하여 알아보겠습니다. 만약 사전에 파이썬 설치가 안돼어있거나 Flask 웹 서버 구성방법에 대해 모른다면 위의 파이썬 관련 포스팅 목록에서 Flask 웹 서버 구성 방법에 대해 확인한 후 이 포스팅을 읽어보시길 바랍니다.
시험 환경
이 포스팅에서는 아래와 같은 시험환경에서 Flask 웹 서버를 구성하고 테스트를 진행하도록 하겠습니다.
반드시 16.04일 필요는 없지만 이하 버전에서 비정상 작동할 수도 있으니 각자의 리눅스 환경을 확인해보시길 바랍니다.
Linux Ubuntu 16.04 LTS x64
Python 3.5
아이피: 172.16.3.58
Linux aav-cn-vmm 4.15.0-106-generic #107~16.04.1 Ubuntu SMP Thu Jun 4 15:40:05 U TC 2020 x86_64 x86_64 x86_64 GNU/Linux
Flask 웹 서버 구성
우선 엔드포인트를 구성하려면 당연히 Flask 웹 서버 구성이 우선 수행되어야 합니다. 아래와 같이 서버를 구성하는 파이썬 모듈을 작성합니다. 위의 시험환경과 동일하게 Python 3.5 버전의 모듈을 구성합니다.
app.py
$ vim app.py
Flask 웹 서버 작성
import werkzeug.serving
from flask import Flask
app = Flask(__name__)
app.run('0.0.0.0', port = 5010, threaded = True)
Flask 웹 서버 실행
$ python3 app.py
위와 같이 Running on http://0.0.0.0:5010/ 메세지가 나타났다면 정상적으로 Flask 웹 서버가 구동된 것입니다. "0.0.0.0" 이라는 아이피주소는 로컬 주소를 말합니다. 즉 자기 자신을 의미합니다. 이 포스팅의 시험 환경의 PC는 아이피 주소가 172.16.3.58 입니다. 그러면 http://172.16.3.58:5010 으로 접속하면 웹 서버에 접속된다는 것을 의미합니다. 이제 웹 브라우저를 실행하여 저 URL로 접속을 해봅니다.
분명 Flask 웹서버를 구성하고 실행하였지만 Not Found 오류 메시지가 화면에 나타납니다. 이 문제는 웹서버는 구성되었고 클라이언트가 접근할수 있지만, 실제 클라이언트가 접근해야할 엔드포인트를 찾지 못했다는 말입니다. 자 그러면 Flask 웹 서버의 엔드 포인트 설정을 해보겠습니다. 우선 서버를 종료합니다.
Flask 엔드포인트 추가
엔드포인트를 추가하기 위해서는 @route 문법이 사용됩니다. Route라는 단어는 영문으로도 "길", "노선" 등의 의미입니다. 마찬가지로 우리가 구성한 웹 서버의 "노선"을 추가한다고 보시면 될 것 같습니다. 라우트는 리눅스의 네트워킹 단어로도 쓰이고 여러 의미가 있습니다.
아까 구성한 app.py 모듈을 아래와 같이 수정합니다. 우리는 http://0.0.0.0:5010/homepage 라는 URL을 구성할 것이고 엔드포인트는 "/homepage" 가 됩니다.
app.py
import werkzeug.serving
from flask import Flask
app = Flask(__name__)
@app.route('/homepage')
def start_homepage():
return 'hello world'
app.run('0.0.0.0', port = 5010, threaded = True)
작성후 Flask 웹 서버를 구동합니다. 이후 다시 웹 브라우저에서 "http://아이피:5010/homepage" 를 입력하여 새로 추가한 엔드포인트로 접근합니다.
위와 같이 'hello world' 문자열을 리턴한 내용이 그대로 웹 브라우저에 잘 나타나고 있습니다. 즉, 엔드포인트 추가가 정상적으로 수행되었고 클라이언트가 접근할 경로가 생긴 것입니다. 또한 app.py의 엔드포인트에 접근하였을 때 실행되는 함수명은 개발자의 자유입니다. 위에서는 start_homepage라는 이름으로 정의한 것을 알 수 있습니다.
Flask 엔드포인트의 반환
자 우리는 return 'hello world' 구문으로 인해 클라이언트의 웹 브라우저 화면에 문자열이 출력되는 것을 확인하였습니다. 그렇다면 for문이나 여러가지 행위를 수행한 후 그 내용을 반환하면 그대로 출력된다는 것을 알았습니다.
아래는 for문을 통해 1부터 10까지의 문자열을 출력시키는 예제입니다.
app.py
import werkzeug.serving
from flask import Flask
app = Flask(__name__)
@app.route('/homepage')
def start_homepage():
def get_one_to_ten():
strs = ''
for i in range(1, 11):
strs = strs + ' ' + str(i)
return strs
return get_one_to_ten()
app.run('0.0.0.0', port = 5010, threaded = True)
위와 같이 Flask 웹 서버를 구성한 후 실행합니다. 이후 웹 브라우저에서 엔드포인트로 접근할 경우 start_homepage() 함수의 내부 함수인 get_one_to_ten() 함수로 인해 1부터 10까지 문자열이 웹 브라우저에 출력되는 것을 확인할 수 있습니다. 이와 같이 엔드포인트 내부에서 여러가지 행위를 사용할 수 있고 이는 백엔드 처리라 말합니다.
마무리
이번 포스팅에서는 Flask 웹서버에 엔드포인트를 추가하는 방법에 대하여 알아봤습니다. 다음 포스팅에선 여러 HTML 템플릿 파일을 만들어놓고 엔트포인트에 접근하였을 때 맞추어 렌더링 해주는 방법에 대하여 알아보겠습니다.