[python] Flask를 사용하여 실시간 채팅 기능 구현

이 포스트에서는 Python의 Flask 웹 프레임워크를 사용해서 간단한 실시간 채팅 기능을 구현하는 방법에 대해 알아보겠습니다.

목차

  1. 개발 환경 설정
  2. Flask 웹 앱 생성
  3. WebSocket을 이용한 실시간 통신 구현
  4. 채팅 인터페이스 디자인
  5. 마무리

1. 개발 환경 설정

먼저, Python 3이 설치되어 있어야 합니다. Flask를 설치하기 위해서는 다음과 같이 명령어를 실행합니다.

pip install Flask

또한, 웹소켓을 사용하기 위해 Flask-SocketIO를 설치합니다.

pip install flask-socketio

## 2. Flask 웹 앱 생성

간단한 Flask 웹 앱을 생성합니다.
```python
from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    socketio.run(app)

3. WebSocket을 이용한 실시간 통신 구현

WebSocket을 사용하여 클라이언트 간 실시간 통신을 구현합니다.

@socketio.on('message')
def handle_message(msg):
    emit('message', msg, broadcast=True)

4. 채팅 인터페이스 디자인

마지막으로, 채팅 인터페이스를 디자인하고 클라이언트 측에서 WebSocket을 통해 메시지를 서버로 전송하도록 구현합니다.

<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
    <title>실시간 채팅</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.1.3/socket.io.js" integrity="sha384-/KR6pKu0DCgSiIB1f6I1F80KUVj/Uw1Cg3Q3mHH8W2AC" crossorigin="anonymous"></script>
</head>
<body>
    <ul id="messages"></ul>
    <input id="message_input" autocomplete="off" /><button onClick="sendMessage()">전송</button>
    <script>
        var socket = io.connect('http://' + document.domain + ':' + location.port);
        socket.on('message', function(msg) {
            var li = document.createElement('li');
            li.appendChild(document.createTextNode(msg));
            document.getElementById('messages').appendChild(li);
        });
        function sendMessage() {
            var message = document.getElementById('message_input').value;
            document.getElementById('message_input').value = '';
            socket.send(message);
        }
    </script>
</body>
</html>

5. 마무리

이렇게 하면 실시간 채팅 기능이 구현된 간단한 Flask 애플리케이션이 완성됩니다. 이를 기반으로 확장하여 채팅방 생성, 사용자 인증, 이모티콘 및 파일 전송 등의 기능을 추가할 수 있습니다.

참고 자료