본문 바로가기

연재/Project Jarvis

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



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하는 것이 좋아보입니다.