
정산봇
정산봇
정산봇은 Slack 워크스페이스 내에서 팀원들 간의 정산을 간편하게 도와주는 봇 서비스입니다. 회식, 선물, 식사 등 다양한 상황에서 발생하는 복잡한 정산 과정을 Slack 메시지만으로 손쉽게 진행할 수 있습니다.
Slack API와 Bolt.js 프레임워크를 활용하여 개발되었으며, 사용자가 /계좌등록
명령어를 통해 자신의 계좌를 안전하게 등록하고
/정산하기
명령어로 특정 유저와 1/N로 정산 요청을 할 수 있습니다. 정산 요청 시 자동으로 대상 유저에게 DM을 보내
요청자의 계좌 정보와 함께 토스 송금 페이지로 바로 이동할 수 있는 링크를 제공합니다.
Node.js 기반 서버는 nginx를 통해 홈서버에 배포되었으며, MongoDB를 데이터베이스로 활용하여 사용자의 계좌 정보를 암호화하여 안전하게 저장하고 정산 내역을 체계적으로 관리합니다. 반복적이고 귀찮은 정산 과정을 자동화하여 팀 협업 시 발생하는 금전적 문제를 투명하고 효율적으로 해결할 수 있도록 돕습니다.
기능
- ‘/계좌등록’ 명령어로 계좌 정보 암호화 저장
- ‘/정산하기’ 명령어로 특정 유저들과 1/N 정산 요청
- 정산 요청 시 자동 DM 발송 기능
- 토스 송금하기로 자동 연결, 금액 및 계좌 정보 자동 연동
- 암호화된 계좌 정보 관리 시스템
기술 스택
- Slack API: 슬랙 플랫폼 연동
- Bolt.js: 슬랙 앱 개발 프레임워크
- Node.js: 백엔드 서버
- MongoDB: 데이터베이스
- nginx: 웹 서버 및 리버스 프록시
도전과제 및 해결방안
배포 환경 선택의 고민
해당 서비스를 배포하고 싶었지만, 추가적인 서버를 AWS나 클라우드 서비스를 대여하고 싶지 않았습니다. 과연 클라우드 서비스로 배포를 했을 때 많은 사용자가 사용하는지, 가용성이 그만큼 중요한지에 대해서 고민을 하였고, 결국 홈서버로 띄우도록 하였습니다.
홈서버로 작동하니, 공유기에서 포트포워딩, https로 통신하기 위해 certbot과 nginx를 통해 서버 설정을 하는 등 작은 문제들이 많았습니다.
또한 Slack OAuth 로직은 무조건 도메인을 통해서 확인해야해서, 로컬에서 수정사항을 반영하였을 때 적절하게 수정되었는지 nginx 설정을 바꾸기도 하는 등 적용하기 어려운 부분도 있었습니다.
데이터 영속성 문제 해결
처음에는 모든 데이터를 메모리에 저장하였는데, 홈서버가 꺼지거나 새로운 버전을 배포할 때마다 데이터가 초기화되는 문제가 있었습니다.
이를 해결하기 위해서는 데이터베이스를 사용하는 것이 필수적이었는데, 서버용 컴퓨터가 포맷되거나 천재지변이 발생하더라도 다시 복구할 수 있도록 서버와 같은 컴퓨터에서 돌아가는게 아니라 클라우드 서비스를 사용하고자 하였습니다.
AWS RDS를 처음에 사용할까 생각하였는데, 비싼 RDS를 대신하여 MongoDB Atlas를 사용하여 무료로 데이터를 저장하고 관리하고자 하였습니다.
저장되는 값은 AES-256 알고리즘을 통해 암호화하였고, 이를 통해 데이터베이스가 외부에 노출되어도 개인 정보를 암호화하여 피해를 최소화할 수 있었습니다.