jrcfore***
2021-04-17

몽고DB 기본 개념과 동작 원리부터 활용법까지 설명하는 입문서. 다양한 예제를 통해 애플리케이션을 개발하고 관리하는 방법을 익힌다.
대중적인 MySQL의 시대를 뒤로하고 지금은 다양한 스타일의 DB가 등장하고 있다. In Memory 데이터 Storage인 Redis와 Document 스타일의 MongoDB (noSQL), 분산 DB 등 이를 비롯한 다양한 DB가 현재 실무에서 다양한 용도로 쓰이고 있기 때문이다.
요즘 필자가 근무하는 조직에서는 한참 MongoDB를 활용한 데이터 관리가 핫한 주제로 떠오르고 있다. 그만큼 MySQL 외에 MongoDB가 실무에서 대중화가 되었고 MongoDB의 고도화 수준이 안정선에 이르른 것이라 생각된다. 아마 MongoDB의 출연 연도를 생각해 보았을 때, 이 정도 안정화는 어찌 보면 당연한 것일 수도 있겠다는 생각이 든다.
다만 최신 기술이라 하여 모든 서비스에 적용 가능한 만능은 아니라 생각된다. 멀티 샤딩, 존 샤딩, 그리고 어그리게이션 등 MongoDB에서도 다양한 기능들을 제공하고 있다. 기능들만 봐서는 정말 MongoDB만 알면 모든 서비스들을 손쉽게 구축하여 데이터를 관리할 수 있을 것 같이 느껴진다. 그러나 몇몇 sql 기반의 DB가 MongoDB보다 강점인 부분이 분명히 존재하는 만큼 실무 개발을 하려는 초, 중급 개발자들이라면 이 부분을 명확히 집고 갔으면 싶다. (이와 관련된 자세한 내용들은 구글링 해보시길 권한다)
필자의 서론이 길었다. 그렇다면 간략하게나마 해당 도서에 관해 소개하면 책의 포커스는 다음과 같을 것이다.
- MongoDB를 단순히 학습 목적으로 공부해보고 싶은 사람
- MongoDB를 실무에 적용해보고자 하는 뉴비 혹은 중급자
필자가 다년간 한빛미디어 도서를 리뷰한 경험에 따르면 한빛미디어의 책들은 굉장히 친절하다. (어느 정도 CS 지식만 갖췄다면) 그렇기 때문에 이번 도서도 기본적인 SQL 혹은 DB에 관한 지식을 가졌다면 학습하는 데에 그리고 실무에 적용하는 데에 큰 무리가 없을 것이라 생각된다.
【어떤 독자를 위한 책인가】
이 책은 앞서 언급한 바와 같이 MongoDB를 처음 시작하는 뉴비와 중급자를 대상으로 한다. 고급자들은 해당 도서를 공부하기보단 MongoDB 사이트에서 제공하는 레퍼런스를 참고하는 편이 좋을 수 있다. (그런데 필자의 경험상 MongoDB 사이트의 내용이 최신 버전의 내용을 못 따라가는 것으로 알고 있다. 필시 개발을 하면서 stack overflow에 신규 기능들은 사람들의 의견을 종합하여 도입하도록 하자)
하지만 해당 도서를 공부하기 전에 기본적인 DB에 관한 지식을 알고 있으면 좋을듯싶다. 적어도 SQL과 noSQL의 개념 정도는 알아둬야 한다고 본다. A가 있고 B가 있는데 A와 B중 무엇이 어떤 상황에서 좋고 나쁜지를 가늠하려면 적어도 비교 군에 대한 대략적인 정보 혹은 지식수준이 있어야 한다. 이런 비교 학습은 머리에도 오래 남고 실무에 추후 적용할 때도 훨씬 유연하게 대처할 수 있으므로 필시 사전 지식으로 갖추고 학습에 임한다면 훨씬 도움이 될 것이라 생각된다.
중급 개발자의 경우, 이 책은 통해 기초 지식과 실습 자료들을 한 번 더 수행해봄으로써 보다 MongoDB, Document 형태의 DB에 관한 지식의 고도화를 이룰 수 있을 것이라 생각된다.
【책의 구성】 'MongoDB 완벽 가이드'의 책의 구성은 어떠한가.
이 책은 크게 24개의 챕터 그리고 6개의 part로 구성되어 있다. 각 part는 다음과 같다.
1파트 : 몽고DB의 시작
몽고DB에 관한 배경지식에 대해서 설명한다 Document가 무엇인지 Collection이 무엇인지. 몽고 DB 시작을 어떻게 하면 좋은지 그릭 Document의 생성과 삽입에 관해서 어느 정도 다양한 예를 들어 설명한 후에, MongoDB에서 제공하는 기본적인 Query에 대해서 학습한다. 솔직히 실무에서 DBA가 아닌 이상 개발자가 알아도 되는 정도는 기본적은 CRUD에 대한 지식들이다. 그렇기에 해당 부분은 반드시 직접 실습하며 내 것으로 체득하길 추천한다.
2파트 : 몽고 DB 개발
이 파트에서는 몽고 DB 개발에 있어 Indexing 그리고 Indexing에 따른 collection 유형 등에 대해서 학습한다. 재미있는 주제인 정규화와 비정규화에 관한 서로의 장점을 설명한다. 모든 기술은 적절한 용도에 맞게 사용될 때 비롯이 서 빛을 발하는 법이므로 저자도 필자도 강조하는 서비스 목적에 맞는 방식을 잘 고민해서 적용해보도록 하자. 이후 해당 파트는 일관성 관리, 스키마 마이그레이션 등에 대해서 설명한다.
3파트 : 복제
이번 장은 실무에서 가장 중요시 다루는 부분이다. 바로 데이터의 안정성을 보장하는 파트이다. 아무리 빠른 처리를 보여주는 DB라 할지라도 언제든 접근 가능하지 못하고 내구성과 일관성을 보장하지 못한다면 해당 DB는 실제 서비스에서는 사용해선 안되는 DB이다. 그렇기에 필자의 경우, 해당 파트를 이 책에서 가장 중요시 봤고 아마도 실무에 적용하려는 대다수의 개발자들 역시 해당 부분을 메인으로 들여보지 않을까 싶다.
해당 파트는 3-노드 복제 셋을 설정하는 방법과 이러한 복제 셋 구성의 변경 방법, 그리고 프리머리 서버가 다운되었을 때 세컨더리 서버들이 대표를 어떻게 선정하는지 등에 대해서 자세히 서술되어 있다. (대표 선출에 사용되는 합의 알고리즘은 실무에서도 간혹 쓰이므로 알아두면 분명 좋을 것이라 생각된다)
그 외에 동기화 방법(oplog), 하트비트란 무엇인지 관리에 대한 자세한 내용을 다루므로 한번 살펴보길 권장한다.
4파트 : 샤딩
안정성 다음으로 실무에서 많이 고려되는 부분이 바로 샤딩이다. 특히 IDC를 여러 개 가진 대규모 회사나 혹은 다른 나라에 IDC를 가진 회사에서 일하게 된다면 존 샤딩을 비롯한 멀티 샤딩 등에 대해서 잘 알아야 한다. 왜냐하면 각 나라별로 샤드를 관리하여 그에 알맞은 데이터 파편화와 관리가 필요하기 때문이다.
이 파트에서는 샤딩이 무엇인지, Mongos/ Mongod 가 무엇인지 등을 다룬다. 또한 샤딩을 왜 해야 하고 언제 해야 하는지에 대해서도 저자 나름의 의견을 잘 정리해두었다. (저자의 의견 외에도 다양한 요건 혹은 상황에서 샤딩이 발생할 수 있다는 점도 알아두도록 하자) 또한 청크가 무엇인지 청크는 어떻게 관리되는지에 대해서도 저술하고 있다. 하지만 이 부분의 경우 다른 나라로 샤딩을 구성할 경우, 저자의 말 한 대로만 동작하지 않을 가능성이 있으므로 주의하도록 하자.
또한 샤드 키 같은 경우, MongoDB 버전에 따라서 수정 가능하고 가능하지 않은 버전이 있다는 부분 역시 명심하도록 하자 (MongoDB 4.2 이전, 이후로 나뉨)
5파트 : 애플리케이션 관리
해당 파트에서는 mongotop, mongostat 등의 사용 방법에 대해서 익힌다. 각각 linux의 top와 netstat 등의 명령어와 매핑되므로 직접 실행해서 어떤 것들인지 확인해 보도록 하자.
이 외로 해당 파트에서는 MongoDB의 보안과 영속성 그리고 몽고 DB에서 보장하지 않는 부분 등에 대해서 다룬다. (시스템의 파일 시스템과 연관된 파트이다.)
6파트 : 서버 관리
솔직히 해당 파트는 개발자보단 DBA 분들이 읽어보시면 좋을듯싶다. 말 그대로 MongoDB 모니터링과 백업 방법 등에 대해서 다룬다. 물론 MongoDB를 직접 설치 및 구성하고 관리하는 입장이라면 해당 파트를 유심히 들여다볼 것을 권장한다.
【 MongoDB 완벽 가이드를 읽고서…….】
모든 기술은 목적과 취지에 맞게 사용되어야 그 빛을 발할 수 있다. 최신 기술이라고 해서 모든 상황에 알맞은 것도 아니고 옛날 기술이라고 해서 요즘 기술에 사용하지 못하라는 법도 없다는 것이다.
왜 필자가 위와 같은 말을 하냐면 간혹 요즘 기술이라고 해서 기존에 잘 구성되어 있던 시스템을 무조건 갈아엎으려는 움직임이 종종 보이기 때문이다. 물론 시대의 트렌드를 따라가는 것은 좋다. 하지만 이것이 실재 서비스와 연관이 되면 좀 더 고려해봐야 한다. 특히 DB와 같은 고객, 사용자의 데이터를 보관하는 소프트웨어의 선택은 더욱더 신중할 수밖에 없다. (생각해 보라, 은행에 예금한 돈이 어느 날 DB 에러라고 해서 1억이 0원이 된다면 얼마나 난감하겠는가? 물론 은행의 예금 히스토리 시스템은 보다 안정적인? 방법으로 개발되어가고 있다. 이와 관련된 리뷰로 전에 썼던 '사토시의 서'를 읽어보길 추천한다.)
개발자로 살아간다는 것은 때론 보수적이며 때로는 진보적인 성향을 가져야 한다. 이 두 가지가 적절히 융합되어 본인이 구축하고자 하는 시스템을 정확히 이해하고 이에 맞는 소프트웨어 구성과 각각의 프레임워크 도입을 해낼 수 있다면, 요즘 말하는 억대 연봉을 받는 개발자는 손쉽게 이룰 수 있을 것이라 본다.
#본 도서는 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.