모바일 로그 데이터 분석 서버 구축

모바일 어플리케이션의 로그 데이터는 어플리케이션에 대한 기본적인 통계적 분석뿐 아니라 깊이있는 사용자 행동 분석을 할 수 있는 소중한 데이터이다. 로그 데이터를 수집하고 분석하기 위해 쉽게 사용할 수 있는 방법으로 Google Analytics가 있지만, 내 입맛대로 분석하기에는 상당한 한계를 가지고 있다. 팀 내부적으로 구축한 데이터 로그 수집 및 분석 서버가 최선이라는 것을 알고 있었지만, 필자가 속한 팀 내부에 아무도 (필자를 포함해) 이런 로그 수집 및 데이터 서버를 구축해본 경험이 없었다. 이 문서는 경험과 지식이 전무한 입장에서, 모바일 로그 데이터 분석 서버를 구축해나가며 생겨났던 질문들과 이에 대한 (개인적으로 찾은) 해결책을 정리한 글이다.

핵심 질문

모바일 로그 데이터 분석 서버를 구축하기 위해서 1) 어떤 데이터베이스에 데이터를 저장해야하고, 2) 무엇으로 서버를 돌려야 하고, 3) 어디에 데이터를 저장해야하지?

알고있는 기존의 스택 사용?

가장 먼저 생각한 방법은 Node.js를 통해 웹 서버를 만들고 MongoDB를 통해 데이터를 저장하고 DigitalOcean에 데이터를 축적시키는 방식이다. 하지만, 이 방식으로 데이터를 저장할 경우에는 다음과 같은 문제들이 발생할 것으로 예상된다.

  • Node.js가 얼마나 많은 Connection을 동시에 안정적으로 Handle 할 수 있을까?
  • MongoDB를 통해 데이터를 저장하면, 데이터를 다시 검색할 때 너무 많은 시간이 걸리지 않을까?
  • DigitalOcean에 데이터를 저장하면, 데이터의 양이 늘어감에 따라 비용이 너무 많이 들지 않을까?
  • DigitalOcean에 데이터를 저장하면 후에 데이터 양이 많아지면 용량이 감당이 안되지 않을까?

이 부분에 대한 답은 아직 잘 모르겠다.

1. ELK Stack

1) 어떤 데이터베이스에 데이터를 저장해야하지?

아무런 지식도 경험도 없는 상황에서 최선의 결정은 남들이 미리 간 길을 따라가는 것이라고 생각한다. 그렇다면 사람들이 가장 많이 사용하는 기술은 무엇일까? 필자는 구글에 이를 검색하는 대신 DigitalOcean에서 제공하는 One-click application에서 이 답을 찾았다. DigitialOcean의 One-click appilcation은 클라우드 서버를 만들 때, 한번의 클릭만으로 사람들이 기존에 많이 사용하는 기술 Stack을 설치해주는 기능이다. 다시 말해, 여기서 제공하는 기술은 이미 많은 사람들이 사용하고 있다고 검증된 기술이라는 것이다.

DigitalOcean의 ELK stack 수십개의 One-click application들 중에서 단연 눈에 들어온 것은 (그 이름 때문인지) ELK Logging Stack 이었다. ELK는 Elasticsearch, Logstash, Kibana의 약자로 데이터 로그 저장, 검색, visualization을 제공하는 기술 스택이다. 몇번의 검색끝에 ELK 스택이 우리가 원하는 로그 데이터 분석 서버를 구축하는데 적합하다는 것을 알았다. ELK 스택을 사용하면 생기는 장점은 다음과 같다.

한가지 여기서 확실하게 하고 넘어가야하는 부분은 ELK Stack 전체가 데이터베이스는 아니라는 것이다. ELK에서 E를 담당하고 있는 Elasticsearch만이 데이터베이스 역할을 하는 것이며, Logstash는 이 DB의 Input단을 Kibana는 사용자와 Interaction을 하는 Output단으로 이해하면 된다.

그렇다면 MongoDB로 서비스를 구축하지 않고 ELK를 이용해서 구축하면 어떤 장점이 있는 것일까? ELK stack이 MongoDB를 사용하는 것과 비교하여 가지는 장점을 정리해야함.

2. Nginx

2) 무엇으로 서버를 돌려야하나?

ELK Stack은 찾았지만, ELK Stack이 하는 것은 데이터를 읽고, 저장하고, 검색하는 것을 하는 것 뿐이다. 여기서 우리가 필요한 것은 모바일에서 보내는 Log 데이터를 받은 서버의 앞단이 필요하다. 이를 위해서 우리는 웹 서버를 돌릴 수 있는데, 앞에서 이야기한 것 처럼 시도해 본 것이 Node뿐이라서 Node JS를 이용하면 될 줄 알았다.

하지만, Node.JS는 자주 웹서버가 죽어버리는 상황이 생기기 때문에 데이터가 사라질 큰 문제가 있다. 이를 해결하기 위해서 오래전부터 Standard 처럼 사용되고 있는 Apache나 Nginx를 이용해서 앞단의 웹서버를 구축하면 된다.

Apache vs. Nginx Apache는 굉장히 오래전부터 있어온 기술이며, 상대적으로 Nginx는 최신의 기술이다. 이 때문에 Apache는 쓸데 없는 기능들이 너무 많이 들어가서 무겁고 Memory 소모가 크다고 한다. 잘은 모르지만, 이런 간단한 이유로 일단 Nginx를 사용하기로 결정하였다.

3. Amazon S3

3) 어디에 데이터를 저장하지?