배민라이더스운영시스템(1.0)
배달의민족 배민라이더의 배민라이더스운영시스템(1.0) 프로젝트 소개입니다.
배민라이더스운영시스템(1.0)
배달접수와 실시간 배달처리 현황 및 라이더 관제기능을 지원하는 종합 운영 시스템
[그림 1] 메인화면
관련 기술블로그
프로젝트 기간
- 2015.02 ~ 2016.08
프로젝트 참여도
- 프로젝트 인원 5명
- 배민라이더스운영시스템 사이트
Back-End API
와 AngularjsFront-End 전담
하여 개발 Websocket 서버를 전담
하여 개발- 나머지 인원은 라이더앱 및 라이더앱 API 개발과 결제시스템 개발함
주요 기능
- 배달접수처리 기능
- 실시간 배달연황 및 라이더 현황 관제
- 배달료 정산을 위한 데이터 제공
- 채팅 기능 제공
적용된 기술셋
Back-End
- PHP 5.6
- CodeIgniter 3.1
- Nodejs
- Socket.io
- sqlserver
Front-End
- AngularJS 1.8
- Bootstrap 2.x
Etc
- Websocket
- Redis
- winston
- socketio-sticky-session
간략한 시스템 구성도
[그림 2] 구성도
시스템 구성 설명
- 백오피스 서버는 API 서버와 angularjs 프론트엔드로 구성 되어 있음
- 라이더앱과 백오피스는 Socket.io로 개발된 websocket 서버를 통하여 실시간으로 배달 및 라이더 현황을 관리함
- 웹소켓 서버는 nodejs 기반 이라 싱글 프로세스로 동작하지만 서버자원을 효율적으로 사용하기 위하여 멀티프로세스로 프로그래밍하였음
- 멀티프로세스로 구동시 각각의 프로세스에 메시지를 공유하기 위해 Redis pub/sub를 사용
효과
- 실시간 이벤트 서버 도입으로 Polling 방식에 비하여 DB호출 횟수를 현저하게 낮춤에도 불구 실시간 서비스가 가능하게 됨.
- AngularJs 특징인 양방향 데이터 바인딩 기능을 실시간 데이터 제공에 적극 활용
- 실시간 이벤트 서버 Socket.io(Node.js) 를 이용하여 데이터 생성, 변경, 삭제 시 실시간 이벤트로 데이터를 송수신 하여 AngularJS 모델에 반영하도록 하고 뷰의 갱신을 신경쓸 필요없는 구조.
느낀점
- AngularJS + Socket.io 신기술의 장점을 활용하여 개발 해볼 수 있었던 기회 통해 출근이 기다려지는 기분을 경험.
- 실시간 서비스라는 다소 생소하고 복잡한 서비스 경험에 엄청난 개발욕구를 경험
- 실무를 통해서만 습득 할 수 있는 실시간 서비스만의 개발, 운영 이슈에 대한 깊이 있는 경험.