글 작성자: 개발섭

 

사실 몽고 DB가 뭔지는 대충 알긴했지만...

 

몽고 DB가  NoSQL의 대표주자인 건 알고있고, RDBMS와는 다른 포지션을 가진 DB라는 것은 알고 있는데... 도대체 어디서 쓰는 게 좋을 까라는 생각을 되게 많이 했다. 이 MongoDB의 활용성을 극대화하는 것이 도대체 어떤 프로젝트일까라는 고민을 많이했다. 그냥 쓰기보다는 차라리 왜 써야하는 가라는 생각을 하고 그에 맞는 프로젝트를 찾는게 좋지 않을까라는 생각을 많이했다. 마침 그런 세션이 있길래 듣고 정리해본다. 

특히 나같은 경우 몽고 DB의 실제사용 사례와 특징들을 집중적으로 이야기해보겠다. 

 

실제 세션 영상

 

 

MongoDB 특징

몽고 DB는 4개의 특징이 있다. 신뢰성, 확장성, 유연성, Index 서포트 방식

 

  • 신뢰성

신뢰성을 위해서 Replica Set을 통해서 Primary DB와 Secondary DB로 쪼개서 DB에서 문제가 발생하면 바로바로 대처할수 있는 방식의 구조를 가지고 있다.

  • 확장성

DB서버가 커질 경우 Sharding하는 전략을 사용해서 데이터를 쪼개서 관리한다. 그리고 이런 샤딩전략시 한 샤드에 데이터가 몰릴 가능성이 있을수도 있는데, 이러한 경우 Mongos서버가 알아서 적절히 데이터가 분배되게 Sharding 하는 전략을 사용한다. 그리고 mongos가 알아서 Sharding되어있는 위치를 찾아준다. 

 

  • 유연성

NoSQL의 장점중인 하나인 다양한 데이터를 RDBS와 다르게 한 테이블안에 특징이 생겨도 계속계속 새로운 Feature들을 추가할  수 있다.

 

  • Index Support

MongoDB에서 특별히가지고 있는 특징. 필요한 필드에 필요한 만큼 INDEX 설정이 가능함. 그래서 필요한 정보를 빠르게 찾을 수 있다. 그리고 실제로 Index 형태가 다양한 형태로 작동함

 

1.  Hashed Index -> sharding 된 데이터 찾을때 쓰는 인덱스

2. TTL Index -> 시간지나면 삭제되는 인덱스

3. 공간 인덱스 -> 위치데이터

 

Kakao의 MongoDB 사용 사례 

1. 카카오 모빌리티 -> 복합인덱스를 이용함.

 

(일반+공간)  사용자 위치 기반 검색을 통해서 빠르게 배차하는 시스템의 방식

배치서버에 카카오 택시 기사들의 위치와 상태 서비스를 계속 제공하면서, 업데이트를 MongoDB에 계속 해주다가 실제로 사용자가 카카오 택시 콜을 불렀을 경우 그에 맞는 매칭을 해주는 시스템을 구성할 수 있었다.

2.  대용량 로그 저장 및 조회 -> 카카오톡,카카오커머스, 카카오페이지, 카카오모빌리티의 로그 수집후 처리

 

유저가 앱서버를 거쳐가면서 log가 발생한다. 이런 로그를 통해서 HBase에 로그 저장후 통계분석한 뒤에 admin 서버에 전송하는 방식으로 운용되고 있는데, RDBMS에서 원하는 로그를 찾아내는 것보다, MongoDB의 Index 유용성을 통해서 원하는 정보를 더 빠르게 찾을 수 있고 효율적으로 작동할 수 있다. 

3. MYSQL > MongoDB 마이그레이션

 

4. 서비스 MainDB 

톡서랍,추천서비스

 

 

마지막으로...

 

실제로 MongoDB를 통해서 무슨 프로젝트를 해야 효율적으로 이용할 수 있는가에 대해서 많은 고민을 했었다. 특히, 왜 MongoDB여야만 하는 가? 라는 스스로의 질문에 MongoDB는 이렇게 쓰는 것이다라고 이야기해준 아주 고마운 세션이였다. 실제로 내가 왜 써야하는지에 대한 여러가지 사용사례를 통해서 어떤 프로젝트에 MongoDB를 사용해야할지에 대해서 어느정도 감을 잡을 수 있었다.

특히, 위치데이터와 관련된 서비스를 제공하기 위해서는 MongoDB를 사용하는 것이 좋다는 것을 많이 느꼈고, 로그 서비스와 같은 경우에도 더욱 효과적으로 작동할 수 있다는 것을 많이 보았다.

이러한 좋은 세션을 만들어주신 서동주님에게 무한한 감사를 드립니다. 😊