Docker, Flask 및 Socket.IO로 전문 실시간 채팅 앱 구축
Source: Dev.to

인스턴트 메신저를 간단하게: ProChat 소개
실시간 채팅 애플리케이션을 만드는 것은 개발자에게 일종의 “통과 의식”으로 여겨집니다. 여기에는 WebSocket, 비동기 이벤트, 데이터베이스 영속성, 컨테이너화 등 많은 핵심 개념이 포함됩니다.
오늘은 ProChat(DockerChat)이라는 프로젝트를 공유하고자 합니다. 이 프로젝트는 단순한 “Hello World” 채팅 앱이 아니라 Docker 덕분에 몇 초 만에 실행할 수 있는 완전한 기능을 갖춘 프로페셔널 급 커뮤니케이션 도구입니다.

왜 이 프로젝트인가?
대부분의 채팅 튜토리얼은 “메시지 보내기” 단계에서 멈춥니다. ProChat은 실제로 사용하고 싶어지는 제품이 되도록 목표를 잡았습니다. 우리는 다음에 집중했습니다:
- 배포 용이성 – Docker만 있으면 앱이 바로 실행됩니다.
requirements.txt지옥도, 데이터베이스 설정 스크립트도 없습니다. - 사용자 경험 – 반응형이며 살아있는 느낌을 주는 모던한 다크 테마 UI.
- 기능 완전성 – 채널, 개인 DM, 미디어 지원, 영구적인 기록.
주요 기능
실시간 통신
Flask‑Socket.IO를 사용해 메시지가 즉시 전달됩니다 (< 100 ms 지연). 같은 방에 있든 인터넷을 통해 연결되든 페이지를 새로 고치지 않아도 채팅이 자연스럽게 흐릅니다.
다중 채널 및 개인 메시징
사용자는 주제 기반 채널(general, tech, gaming 등) 사이를 자유롭게 이동하거나 1:1 개인 대화를 위한 DM으로 전환할 수 있습니다. UI는 이러한 컨텍스트를 명확히 구분해 대화를 정리합니다.
풍부한 미디어 지원
텍스트만으로는 부족하죠! ProChat은 다음을 지원합니다:
- 이모지 – 100개 이상의 이모지를 제공하는 내장 선택기.
- 이미지 & 비디오 – 드래그 앤 드롭으로 채팅에 바로 미디어를 공유.
- 링크 – URL을 자동으로 감지하고 클릭 가능하게 변환.
스마트 영속성
Docker 볼륨과 함께 SQLite를 사용해 데이터를 안전하게 보관합니다. 컨테이너를 재시작해도 메시지는 그대로 유지됩니다. 자체 호스팅 앱에 적합한 단순함과 신뢰성의 완벽한 균형입니다.
기술 스택
- 백엔드: Python 3.11 + Flask 2.3.3
- 실시간 엔진: 고동시 처리용 Eventlet을 사용한 Socket.IO
- 데이터베이스: SQLite와 함께 사용하는 SQLAlchemy ORM
- 프론트엔드: Vanilla JS (ES6+), HTML5, CSS3 – 무거운 프레임워크 없음
- DevOps: 오케스트레이션을 위한 Docker & Docker Compose
빠른 시작
-
저장소를 클론하거나 파일을 다운로드합니다.
-
Docker Compose로 실행합니다:
docker-compose up -d -
브라우저에서
http://localhost:5000에 접속합니다.
그게 전부입니다! 여러 탭을 열어 다른 사용자를 시뮬레이션하거나 같은 네트워크에 있는 친구와 IP를 공유해 즉시 채팅해 보세요.
왜 Docker인가?
이 애플리케이션을 컨테이너화한 것은 큰 전환점이었습니다. 다음을 보장합니다:
- 기대한 Python 버전 사용.
- 의존성 격리.
- 데이터베이스 파일을 볼륨에 보관해 코드와 데이터를 분리.
- 사용자 설정을 단 한 번의 명령으로 축소.
앞으로의 계획
향후 업데이트에 포함될 수 있는 내용:
- Redis를 활용한 다중 노드 확장.
- 사용자 인증 통합.
코드를 확인하고 의견을 알려 주세요!
행복한 코딩 되세요! 🚀