Python의 Flask에서 요청받은 url에 따라 응답 결과를 설정할 수 있으며 이때 라우팅을 설정해야합니다. Routing을 설정하면 Dynamic URL 요청을 원하는 경로 등으로 처리할 수 있게됩니다. 아래는 라우팅을 설정하고 사용하는 방법과 유용한 정보들에 대하여 자세히 알아봅니다.

# Route 설정이 필요한 이유

라우팅을 설정하면 각각의 요청받은 url에 맞게 서로 다른 응답 페이지, html 템플릿을 보여줄 수 있습니다. 만약 라우팅을 설정해 다소 다이나믹한 url 설정을 해보지 않은 경우 다소 복잡할 수 있죠...

아래는 간단하게 하나의 어플리케이션에서 여러 url경로를 기준으로 라우팅을 설정, 특정 템플릿을 보여주는 방법입니다.



# Python Flask route 설정 예제보기

만약 방문자의 접속 경로가 webisfree.com/test/라는 url로 페이지 요청시 어떻게하면 라우팅을 설정하는지 알아봅니다. 아래의 코드를 봐주세요.

@ test.py
## /test/로 접속시 static 파일들 연결하기
@application.route("/test/")
def test_page(path):
   return render_template("test.html, parameter)


! 이미지, css, script 등의 static 파일 설정하기만약 확장자가 py이 아닌 다른 파일을 해당 경로로 연결하는 경우 아래처럼 설정합니다.

@ app.py
## url 접속시 static 파일들 연결하기
@application.route("/")
def test_page(path):
   return send_from_directory(application.static_folder, request.path[1:])

이제 / 이하의 static 파일들이 해당 경로에서 찾아 보여주게됩니다.


! 특정 경로의 요청을 원하는 경로, 디렉토리로 연결하기
만약 /partial/의 경로로 요청된 URL을 서버에 있는 특정한 경로로 연결하는 예제를 알아봅니다. 예를들어...

- 요청한 URL /partial/test.html
- 수행할 URL <프로젝트 경로>/static/partials/test.html

위와 같이 동작이 필요한 경우 아래와 같이 route 설정을 하도록 합니다.
@app.route('/partials/<path:path>')
def partials(path):
  return send_from_directory(application.static_folder, request.path[1:])


! 여러개의 url 주소를 하나의 라우팅 함수로 연결하는 방법
만약 두 개 이상의 주소를 하나의 라우팅으로 설정하는 경우 아래처럼 사용하는 것 역시 가능합니다.
@app.route('/')
@app.route('/test/')
@app.route('/multi/')
def multi():
    return render_template("main.html")

위와 같이 설정된 경우 /, /test/, /multi/로 접속된 요청은 모두 multi() 함수를 사용하여 main.html의 템플릿 파일로 연결되게됩니다.



# 마치면서

요즘은 AngularJS, React 등등의 프론트엔드 프레임워크를 많이 사용하여 route 설정이 서버가 아닌 클라이언트측에서 이루어지기도 합니다. 이런 경우 서버측에 route 설정이 없는 경우 클라이언트 프론트엔드에 설정된 부분이 아닌지 확인해바야합니다.

둘 다 없는 경우라면 서버 구동엔진인 Apache 또는 nginx 등에서 라우팅을 미리 설정하는 경우도 있을 수 있습니다. 이런 경우는 드물지만 ip나 host 이름에 따라 다른 위치, 라우트 설정이 필요한 경우 이처럼 사용됩니다.