일정기반 추천서비스인 캘리팩토리에서는 사용자의 일정을 동기화하고 분석해 다시 추천해주기까지 많은 과정을 거칩니다. 그 과정에서 쓰게된 기술 스택 및 개발 환경을 소개해 보겠습니다.
Server
- nginx : 서버 내에 여러개의 프로세스로 API서버를 가동중인데, 그에대한 프록시서버로 nginx를 사용중입니다.
- gunicorn : flask의 wsgi로 gunicorn을 사용중입니다.
- flask(python) : API서버를 가볍고 빠르게 만들기 위해 웹 프레임워크로는 flask를 선택했습니다. 단순하지만 많은 기능을 포함하고있습니다.
- redis : 캐싱과 빠른 처리가 필요한 데이터들을 redis로 관리하고 있습니다.
- mongodb : 대부분 mysql로 처리하고있지만, 로그와 같은 데이터들을 nosql로 기록하고있습니다.
- react : 관리자페이지는 react로 개발중입니다.
Worker&Asynchronous
- rabbitmq : 작업을 비동기로 messageQueue에 담아 처리하기 위해 rabbitmq를 사용중입니다.
- celery : 여러 데이터를 분산해서 처리하기위해 celery를 이용해 worker로 분산해 처리하고 있습니다.
- cron : 주기적으로 동기화해야하는 작업에 대해선 celery-beat를 이용하고 있습니다.
Monitoring
- newrelic : 서버 에러관리, 자원관리, api지연시간 등을 분석하기 위해 newrelic을 사용하고 있습니다.
- fabric : 어플리케이션에서 발생하는 에러리포팅을 위해 fabric으로 수집하고 있습니다.
- slack : chatops를 도입해, 각종 운영에 필요한 지표들을 직접 챗봇으로 만들어 알림을 받고 있습니다.
- google analytics : 유저가 사용하는 흐름들을 수집해 GA로 분석하고 개선해나가고 있습니다.
CI/CD
캘리의 서버는 운영서버(Product)와 개발서버(Develop), 빌드서버(Build&Test Server)로 구분되어있습니다. 개발서버에서 개발 및 테스트를 진행하고 안정화가 되면 자동적으로 운영서버에 배포되는 프로세스를 거치고 있습니다.
- Jenkins : 빌드서버에서 테스트와 빌드를 거치고 master브랜치에 올라오게되면 자동적으로 운영서버에 배포하도록 설정하였습니다.
- Travis : 어플리케이션의 경우 별도의 서버 없이 Travis를 이용해 테스트와 빌드를 거쳐 팀원들이 이용하는 Slack에 배포하도록 하였습니다.
CI&CD에 대한 자세한 내용은 여기에 포스팅되 있습니다.
Issue Tracking
- Jira&Confluence : 지라와 컨플루언스로 이슈를 관리하고 있으며 애자일 스프린트 방식으로 프로젝트를 진행하고 있습니다.
Version Control
- github : 소스코드를 github를 통해 관리하고 있습니다. 현재 보고계신 블로그도 github page로 작성되어있습니다. 캘리의 모든 개발 소스코드는 오픈되어있습니다. https://github.com/CalyFactory
Comments