연재/Project Jarvis

[Bottle] yield를 사용하여 페이지 완성 전에 내용 내보내기

Readiz 2016. 3. 23. 23:08



return대신 yield를 사용하여 웹페이지 로딩을 빠르게 하기



  최근들어 Bottle 관련 포스팅을 많이 하고 있는데요, 일단은 minor한 툴이다 보니 직접 쓰면서 여러가지 내용을 포스팅하면 도움이 될 것 같다는 생각이 많이 들어서입니다. Bottle은 Django나 Flask처럼 Python으로 개발할 수 있는 Web framework입니다. 간단한 어플리케이션을 작성하는데에 Django 대신 사용하기에 부족함이 없진 않지만 다 되긴 하는듯 하네요. 오늘 포스팅할 내용은 간단한 내용인데요, 바로 yield를 사용하여 페이지 로딩 전에 user에게 일부 내용을 반환시키는 방법을 사용하는 것입니다.


Main code

  메인에 해당하는 부분은 아래처럼 코딩합니다.


	
@route('/test')
def test():
    yield template_header()
    yield 'body'
    yield template_footer() 
	



  return으로 한번에 반환하는 방법 말고, template_header()와 template_footer()로 앞과 뒷부분을 따로 만들어서 할당하는 방법입니다. return으로 반환하는 경우에는 페이지 내용에 해당하는 부분의 연산이 모두 끝난 뒤에 내용이 뿌려지게 됩니다만, 위처럼 작성하게 될 경우에는 먼저 template_header()에 해당하는 내용이 뿌려지고, 뒤따라서 나머지 내용들이 나오게 됩니다.



나머지 부분

  나머지 부분의 코드는 아래처럼 될 것입니다.


	
def template_header():
        return """
<html>
    <head><title>test</title></head>
    <body>
"""

def template_footer():
        return """
    </body>
</html>
""" 
	



  이렇게 페이지의 header와 footer를 따로 분리해놓으면, 반복되는 부분의 코딩도 피할 수 있으면서 가독성 또한 높아지니 가히 1석 3조라고 이야기 할 수 있겠습니다.



참고할 점

  이런식으로 yield 문을 사용할 때 서버의 종류가 매우 중요한데요, basic 서버의 경우에는 yield문이 잘 먹지 않는 경향이 있습니다. bottle 공식 문서에서도 paste 서버를 추천하고 있으니, paste 서버로 open하는 것이 좋아보입니다.