[python] Tornado를 사용한 맞춤형 검색 기능 구현

이번 블로그에서는 Tornado 웹 프레임워크를 사용하여 맞춤형 검색 기능을 구현하는 방법에 대해 알아보겠습니다. Tornado는 Python으로 작성된 비동기 웹 프레임워크로, 높은 성능과 확장성을 제공합니다.

필요한 라이브러리 설치

먼저, Tornado를 사용하기 위해 필요한 라이브러리를 설치해야 합니다. 아래 명령을 사용하여 설치할 수 있습니다.

pip install tornado

기본 서버 구성

Tornado를 사용하여 기본적인 웹 서버를 설정합니다. 아래의 코드는 app.py 파일에 작성해야 합니다.

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("index.html")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

위 코드에서는 / 경로에 대한 요청을 처리하는 MainHandler 클래스를 정의합니다. 해당 요청이 들어오면 index.html 파일을 렌더링하여 응답합니다. make_app 함수에서는 해당 핸들러를 등록하고, 서버를 띄우는 작업을 수행합니다.

검색 기능 추가

이제 검색 기능을 추가해 보겠습니다. MainHandler 클래스를 수정하여 검색 기능을 처리하도록 구현합니다.

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        keyword = self.get_argument("q", default="")
        
        # 검색 로직 구현
        results = self.search(keyword)
        
        self.render("index.html", results=results)

    def search(self, keyword):
        # 실제로 검색하는 로직을 작성합니다.
        # 결과를 리스트로 반환합니다.
        pass

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

위 코드에서는 get 메서드에서 self.get_argument("q", default="")를 사용하여 검색 키워드를 받아옵니다. search 메서드를 통해 실제 검색 로직을 구현하고, 그 결과를 index.html 파일에 전달합니다.

검색 결과 템플릿 구성

마지막으로, index.html 파일을 작성하여 검색 결과를 표시합니다.


<!DOCTYPE html>
<html>
<head>
    <title>Custom Search</title>
</head>
<body>
    <form action="/" method="get">
    <input type="text" name="q" value="{{ keyword }}">
    <button type="submit">Search</button>
    </form>

    {% if results %}
    <h2>Search Results:</h2>
    <ul>
        {% for result in results %}
        <li>{{ result }}</li>
        {% endfor %}
    </ul>
    {% endif %}
</body>
</html>

위 코드에서는 검색어를 입력하기 위한 입력 폼과 검색 결과를 표시하기 위한 코드를 작성하였습니다. {% if results %}{% for result in results %}는 검색 결과가 있는 경우에만 결과를 표시하도록 조건문을 사용한 예시입니다.

이제 위의 코드를 통해 Tornado를 사용하여 맞춤형 검색 기능을 구현할 수 있습니다. 자세한 내용은 Tornado 공식 문서를 참고하시기 바랍니다.

참고 자료