Posts

Django 기반 크롤링 서버와 카카오톡 알림 봇 회고

게임 커뮤니티 공지 누락 문제를 해결하기 위해 Django, Celery, Redis 기반 알림 시스템을 구축한 개인 프로젝트 회고입니다.

프로젝트 개요

이 프로젝트는 게임 커뮤니티의 새 공지를 자동으로 확인하고 카카오톡 채팅방에 알림을 전달하기 위해 만든 개인 자동화 시스템입니다.

  • 기간: 2022-02 ~ 2022-08
  • 구분: 개인 프로젝트
  • 역할: 기획, 서버 구축, 백엔드 개발, 배포, 최적화
  • 성과: 비동기 처리 도입을 통한 시스템 안정화

Django 크롤링 서버 화면

문제

게임 길드원들이 중요한 공지를 놓치는 일이 반복되었습니다. 공지는 웹 커뮤니티에 올라오지만, 사용자가 직접 확인하지 않으면 놓치기 쉬웠습니다.

저는 이 문제를 "공지 확인을 사람이 반복해서 수행하는 구조"의 문제로 보고, 새 공지가 올라오면 자동으로 감지해 채팅방으로 전달하는 시스템을 만들기로 했습니다.

구현

백엔드는 Python, Django, Django REST Framework로 구성했습니다. 공지 데이터를 수집하고, 저장하고, 외부로 전달하는 흐름을 서버에서 관리했습니다.

초기에는 동기 방식으로 공지 확인과 알림 처리를 구성했지만, 크롤링과 메시지 전송 작업이 요청 흐름과 결합되면서 응답성과 안정성에 한계가 있었습니다. 이후 Celery와 Redis를 도입해 주기적인 크롤링과 알림 전송을 비동기 작업으로 분리했습니다.

데이터는 MySQL에 저장했고, 웹 서버 구성은 CentOS 환경에서 Nginx와 uWSGI를 직접 설정했습니다. 개인 NAS에 서버를 구성하면서 요청이 Nginx, uWSGI, Django 애플리케이션으로 전달되는 흐름을 직접 확인할 수 있었습니다.

크롤링 서버 상세 화면

카카오톡 알림 봇 화면

배운 점

이 프로젝트를 통해 백엔드 개발은 API를 만드는 것에서 끝나지 않는다는 점을 배웠습니다. 실제로 24시간 동작해야 하는 서비스는 작업 큐, 재시도, 서버 프로세스, 웹 서버 설정, 데이터베이스까지 함께 고려해야 했습니다.

특히 Celery와 Redis를 도입하면서 오래 걸리는 작업을 요청 처리 흐름에서 분리하는 이유를 체감했습니다. 기능은 같아 보여도 아키텍처가 바뀌면 응답성과 장애 대응 방식이 달라진다는 것을 배웠습니다.

또한 개인 서버를 직접 운영하면서 배포 환경을 이해하는 것이 개발 역량의 중요한 부분이라는 점을 느꼈습니다. 이후 프로젝트에서도 기능 구현뿐 아니라 운영 중 문제가 생길 지점을 먼저 생각하게 되었습니다.