티스토리 뷰

Python

파이썬 플라스크(Python Flask) Route, URL

I like simple code 2020. 5. 9. 19:17
728x90

이전 글에서 우리는 HTTP request 와 method 에 대해서 알아 봤습니다. app.route에서 URL을 전달 받고 method를 받아 처리 했습니다. URL에 대해 조금 더 알아 보도록 하겠습니다.

 

route 에서 URL을 전달 받을 때 /test 와 /test/ 는 다릅니다. 아래 예제를 보시죠.

@app.route('/test')
def test1():
    return 'test1'

@app.route('/test/')
def test2():
    return 'test2'

위와 같이 만들고 웹브라우저에서 요청을 

이렇게 다르다는 것을 알 수 있습니다.

URL의 끝에 붙이는 / 트레일링 슬래시(Trailing Slash)라고 합니다. 리눅스를 배웠다면 끝에 / 가 붙는 것은 디렉토리이고 / 가 없는것은 파일을 나타 냅니다. 그래서 / 는 경로라고 생각 하는것이 맞다고 생각합니다. 그럼 파일에 접근 하는 것은 웹서버에서 /index.html 이런식으로 붙겠죠. 보통 웹서버에서 제일 먼저 찾는 파일은 웹서버에서 웰컴(welcome)파일은 index.html 입니다. 생략 하더라도 웹서버에서 index.html 이 있는지 확인 하고 있으면 index.html 파일을 보여 주게 됩니다.(메인 페이지를 index.html 이라고 하는 이유이기도 하죠)

 

그럼 우리가 hello world! 라고 만들었던 app.route('/') 에서 보면 브라우저로 접속할 때 http://127.0.0.1:5000 이렇게 접속 하더라도 / 로 들어 가는 이유는 두가지가 될 수 있습니다. 이전 글에서 보면 / 는 생략이 가능하다고 했지만 생략해도 접속이 가능하다는거지 HTTP 스펙상으로는 Request에는 경로를 생략 하면 안됩니다. (위키 - URL 참조

명시를 해주는 것이 페이지 속도면에서는 이득이 있다고는 합니다.

그러면 저 / 는 언제 붙게 되는지는 크롬 웹브라우저 개발자 도구에서 확인 해봅시다.

서버로 보낼때 브라우저에서는 끝에 /를 붙여서 보내는것을 알 수 있네요. 즉 브라우저에서 / 를 붙여서 보낸다라고 생각이 듭니다. 그래서 생략을 하더라도 / 로 보내기 때문에 우리가 만든 app.route('/')로 들어 오는 것을 확인할 수 있습니다.

그런데 우리가 테스트 하고 있는 /test 와 /test/ 는 따로 받을 수 있도록 만들었습니다.

접속해서 개발자 도구로 확인 봅시다.

따로 확실히 구분이 됩니다. 두개를 만들었기 때문에 각각 test1과 test2 각각 접속이 됩니다.

그러면 그전에 만든 /hello 로 접속을 하면 접속이 당연히 되겠지만 /hello/ 로 접속을 해봅시다.

페이지를 찾을수 없다고 나오네요. 끝에 / 를 붙이냐 안붙이냐에 따라 접속이 되고 안되고의 큰 차이를 볼수 있습니다.

그럼 이제 반대로 app.route('/hello')app.route('/hello/') 로 바꾸고 테스트를 해보죠.

/hello/ 로 접속을 해보면 당연히 있으니까 정삭적으로 접속이 됩니다.

그런데 /hello 로 접속을 해보면 

/hello 로 접속을 했는데 /hello/ 로 바뀌는것을 볼 수 있고 개발자 도구를 들여다 보면 상태 코드가 308 리다이렉트라고 나옵니다. 즉 Flask에서 *리다이렉션(Redirection)을 하는것으로 생각을 할수 있습니다.

Flask의 URL 규칙은 *Werkzeug의 라우팅 모듈을 기반으로 HTTP 스펙을 지킨다고 볼수 있습니다.

 

Flask 에서 이 용어들은 조금 알아둬야 할 필요가 있습니다.

* 리다이렉션(Redirection): 지정위치로 이동

* Werkzeug : 독일어로 공구(Toolkit)라는 뜻을 가지며 *WSGI의 Toolkit(request, response, utility 등)

* WSGI: Web Server Gateway Interface의 약자 입니다. Python 에서 웹서버와 애플리케이션간의 인터페이스(데이터 통로) 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함