- 기술
- 후기
ElasticSearch를 도입하기 전에 스스로에게 던진 질문이다. 도입하기까지의 고민과, 1년을 운영한 뒤의 답을 적는다.
전기차 충전소 조회 시스템을 제로에서 만들고 있었다. 전기차 이용자는 가는 충전소가 대체로 정해져 있다. 그래서 지도를 먼저 보여 주는 대신, 자주 가는 충전소가 지금 비어 있는지를 가장 빨리 알려 주는 것을 목표로 했다.
이를 위해 매분 외부 API에서 전국 충전기의 상태를 받아 MariaDB에 쌓았다. 당장은 필요 없는 과거 상태까지 남긴 건, 나중에 분석할 사람이 Raw 데이터를 찾을 때 내놓을 수 있어야 한다고 봤기 때문이다.
ElasticSearch는 예전에 로그 분석 도구를 찾다가 알게 됐다. Kibana에 로그 파일을 올려 본 게 전부였지만 인상은 강하게 남아 있었다.
처음 떠올린 이유는 여럿이었는데, 하나씩 따져 보니 대부분은 ES가 아니어도 됐다.
남은 건 하나였다. 쌓이는 상태 데이터를 팀원 누구나, 개발자에게 부탁하지 않고, 직접 집계해 볼 수 있어야 한다는 것.
오늘 가장 붐빈 충전소는 어디인지, 한 달 추이는 어떤지, 이용이 급증한 곳은 어디인지. 이런 질문은 매번 달라지기 때문에 질문마다 백오피스 화면을 코딩할 수는 없다. 대시보드 도구가 필요했다.
대시보드만이라면 Grafana를 MariaDB에 바로 붙이는 방법도 있었다. 걸린 건 데이터의 크기였다. 시각화 도구가 제대로 돌려면 그 밑의 집계 성능이 받쳐 줘야 하는데, 매분 쌓이는 10만 기 이상의 상태 로그를 1년 단위로 집계하는 질의를 서비스가 쓰는 RDB에 던질 수는 없다고 판단했다. 대량의 시계열을 실시간으로 집계하는 것. 그게 ES를 고른 이유다.
치러야 할 값도 알고 있었다.
반반이다.
기대한 것은 기대대로 됐다.
예상하지 못한 값도 치렀다.
치른 값을 다시 읽어 보면 두 종류다.
하나는 저장소를 하나 더 들인 값이다. 스키마가 둘이 되고, 질의 언어가 둘이 되고, 무언가를 바꿀 때마다 절차가 하나 더 붙는다. 이건 ES를 어떻게 운영하든 따라온다.
다른 하나는 운영하는 값이다. 설치와 설정, 클러스터 구성, 장애 대비. 이건 관리형 서비스에 맡길 수 있었다. 당시에는 요금표를 보고 비싸다며 접었는데, 비교 대상이 틀렸다. 관리형 서비스의 값은 서버 값이 아니라 그 일을 할 사람의 시간과 견줘야 했다.
도입 전의 나는 기능을 비교했다. ES가 무엇을 할 수 있는지, MariaDB로는 어디까지 되는지. 지금이라면 표에 한 줄을 더 넣는다. 이걸 들이면 누구의 시간이 얼마나 드는가. 작은 팀에서는 그 줄이 나머지 줄을 다 합친 것보다 무겁다.