[python] Tornado 기반의 실시간 채팅 애플리케이션 만들기

이번 포스트에서는 Python의 Tornado 프레임워크를 이용하여 실시간 채팅 애플리케이션을 만드는 방법을 알아보겠습니다.

Tornado 소개

Tornado는 Python으로 작성된 비동기 웹 프레임워크로서, 간단하고 확장 가능한 웹 애플리케이션 개발을 위해 설계되었습니다. Tornado는 이벤트 기반의 네트워크 라이브러리인 Asynchronous networking library를 기반으로 하여, 수천 개의 동시 연결을 처리할 수 있는 웹 서버를 구축할 수 있습니다.

Tornado 설치

Tornado를 설치하기 위해서는 pip를 사용할 수 있습니다. 아래의 명령을 터미널에서 입력하여 Tornado를 설치해주세요.

pip install tornado

채팅 애플리케이션 개발

이제 Tornado를 사용하여 실시간 채팅 애플리케이션을 개발해보겠습니다. 사전에 HTML, CSS, JavaScript에 대한 기본 지식이 필요합니다.

1. Tornado 웹 서버 생성

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()

위의 코드는 Tornado 웹 서버를 생성하는 기본적인 코드입니다. “/” 경로에 접속하면 MainHandler 클래스의 get 메서드가 호출되며, index.html 파일을 렌더링하여 반환합니다.

2. 실시간 채팅 기능 추가

import tornado.ioloop
import tornado.web
import tornado.websocket

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

class ChatHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        print("WebSocket opened")

    def on_message(self, message):
        self.write_message(message)

    def on_close(self):
        print("WebSocket closed")

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

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

위의 코드는 실시간 채팅 기능을 추가한 코드입니다. ChatHandler 클래스는 WebSocketHandler를 상속받아 웹소켓 연결을 처리합니다. open 메서드는 웹소켓 연결이 열릴 때 호출되고, on_message 메서드는 메시지를 받으면 그대로 돌려줍니다. on_close 메서드는 웹소켓 연결이 종료될 때 호출됩니다.

3. 프론트엔드 개발

마지막으로 프론트엔드 개발을 위해 HTML, CSS, JavaScript를 작성해야 합니다. 예시 코드는 다음과 같습니다. (index.html 파일)

<!DOCTYPE html>
<html>
<head>
    <title>Tornado Chat</title>
    <style>
        /* CSS 스타일 작성 */
    </style>
</head>
<body>
    <div id="chat-container">
        <div id="chat-log"></div>
        <input id="chat-input" type="text">
        <button id="send-button" type="button">Send</button>
    </div>

    <script>
        // JavaScript 코드 작성
    </script>
</body>
</html>

위의 코드에서는 웹 창에 채팅 기능이 있는 간단한 UI를 만들었습니다.

실행

위의 코드를 실행하기 위해 터미널에서 아래의 명령을 입력합니다.

python app.py

Tornado 웹 서버가 실행되고, 웹 브라우저에서 http://localhost:8888에 접속하여 채팅 애플리케이션을 사용할 수 있습니다.

이제 여러분은 Python의 Tornado 프레임워크를 사용하여 실시간 채팅 애플리케이션을 만드는 기본적인 방법을 알게 되었습니다. 자세한 내용은 Tornado 공식 문서를 참고하시기 바랍니다.

참고 자료