[파이썬] 웹 프레임워크를 이용한 실시간 고객 서비스 채팅

고객 서비스 채팅은 온라인 비즈니스에 있어서 중요한 요소 중 하나입니다. 실시간 채팅을 통해 고객과 실시간으로 소통할 수 있으며, 문제를 빠르게 해결하고 고객 경험을 향상시킬 수 있습니다. 이번 블로그에서는 Python 웹 프레임워크를 이용하여 실시간 고객 서비스 채팅을 구현하는 방법에 대해 알아보겠습니다.

웹 프레임워크 선택

Python에서는 다양한 웹 프레임워크가 있지만, 이번 예시에서는 Django를 사용하겠습니다. Django는 강력한 웹 프레임워크로서, 데이터베이스 연동, 사용자 인증, 템플릿 엔진 등 다양한 기능을 제공합니다.

필요한 패키지 설치

Django를 사용하기 위해 아래 명령어로 필요한 패키지를 설치합니다.

pip install Django channels channels_redis

Django Channels 설정

Django Channels는 실시간으로 데이터를 전송하기 위한 기능을 제공합니다. 이를 위해 settings.py 파일을 열고 INSTALLED_APPSchannels를 추가합니다.

INSTALLED_APPS = [
    ...
    'channels',
    ...
]

그리고, settings.py 파일의 가장 마지막에 아래 코드를 추가합니다.

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("localhost", 6379)],
        },
    },
}

위 코드는 Redis를 사용하여 채널 기능을 구현하기 위한 설정입니다. Redis가 설치되어 있지 않은 경우, Redis 공식 홈페이지에서 Redis를 다운로드하고 설치해야 합니다. Redis 설치 후에는 localhost:6379로 Redis에 연결할 수 있습니다.

채팅 앱 생성

이제 실시간 고객 서비스 채팅을 구현하기 위한 Django 앱을 생성하겠습니다. 아래 명령어를 실행하여 앱을 생성합니다.

python manage.py startapp chat

생성된 chat 앱은 채팅 관련 기능들을 구현할 것입니다.

채팅 모델 생성

chat 앱의 models.py 파일을 열고 다음과 같이 채팅 모델을 작성합니다.

from django.db import models
from django.contrib.auth.models import User

class Chat(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    message = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.user} - {self.message}"

위 코드는 Chat 모델을 정의합니다. 각 채팅은 사용자, 메시지, 타임스탬프로 구성되어 있습니다.

채팅 뷰 생성

chat 앱의 views.py 파일을 열고 다음과 같이 채팅 뷰를 작성합니다.

from django.shortcuts import render
from django.views.generic import View
from django.http import JsonResponse
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Chat

class ChatView(LoginRequiredMixin, View):
    def get(self, request):
        chats = Chat.objects.all().order_by('-timestamp')[:10]
        return render(request, 'chat.html', {'chats': chats})

    def post(self, request):
        user = request.user
        message = request.POST.get('message')
        chat = Chat(user=user, message=message)
        chat.save()
        return JsonResponse({'success': True})

위 코드는 ChatView 클래스를 정의합니다. get 메서드는 최근 채팅 10개를 가져와 chat.html 템플릿으로 전달합니다. post 메서드는 사용자로부터 받은 메시지를 저장하고 성공 여부를 JSON 형태로 반환합니다.

채팅 템플릿 생성

chat 앱의 템플릿 폴더(templates) 안에 chat.html 파일을 생성하고 다음과 같이 작성합니다.


{% for chat in chats %}
    <p>{{ chat.user }} - {{ chat.message }}</p>
{% endfor %}

<form id="chat-form">
    <input type="text" id="message-input">
    <button type="submit">Send</button>
</form>

<script src="{% static 'channels/js/jquery/jquery.min.js' %}"></script>
<script>
    $(document).ready(function() {
        $('#chat-form').submit(function(e) {
            e.preventDefault();
            var message = $('#message-input').val();
            $.ajax({
                type: 'POST',
                url: '{% url "chat" %}',
                data: {
                    'message': message,
                    'csrfmiddlewaretoken': '{{ csrf_token }}'
                },
                success: function(response) {
                    $('#message-input').val('');
                }
            });
        });
    });
</script>

위 템플릿은 채팅 메시지와 입력 폼을 표시합니다. 폼을 제출하면 Ajax를 통해 서버로 메시지를 전송합니다.

URL 매핑

Django 프로젝트의 urls.py 파일을 열고 chat 앱의 URL 매핑을 추가합니다.

from django.urls import path
from chat.views import ChatView

urlpatterns = [
    ...
    path('chat/', ChatView.as_view(), name='chat'),
    ...
]

위 코드는 /chat/ 경로로 접속했을 때 ChatView를 실행하도록 설정한 것입니다.

실행

이제 Django 서버를 실행하고 실시간 고객 서비스 채팅을 테스트할 수 있습니다.

python manage.py runserver

브라우저에서 http://localhost:8000/chat/에 접속하면 채팅 화면이 나타납니다. 메시지를 입력하고 전송 버튼을 클릭하면 메시지가 저장되고 화면에 표시됩니다.

이처럼 Python 웹 프레임워크인 Django를 사용하여 실시간 고객 서비스 채팅을 구현할 수 있습니다. Django Channels를 이용하면 손쉽게 실시간 기능을 추가할 수 있으며, Redis를 사용하여 채널 기능을 구현할 수 있습니다.