본문 바로가기

개발/Back-end

MongoDB vs MySQL

반응형

Node를 공부하면서 MySQL과 MongoDB 둘다 공부를 하는데 두 시스템의 차이가 무엇인지, 왜 Node에선 MongoDB를 많이 사용하는지 궁금해졌다.

공부하면서 정리한 내용을 공유해보자.

 

 

MySQL은 오라클 사가 갖고 있는 대표적인 RDBMS이다. Table에 데이터를 저장하고 SQL을 이용하여 DB에 접근한다. MySQL 개발자는 Product에서 사용할 데이터를 위해 다양한 테이블의 정보를 합치는 JOIN 쿼리를 이용하게 된다. MySQL는 데이터베이스 스키마를 먼저 정의해야 하며 테이블에 들어갈 필드들에 대한 규칙을 규정하여 사용한다.

 

이에 반해, MongoDB는 NoSQL 데이터베이스로써 JSON과 닮은 형태의 document로 데이터를 저장한다. Document는 관련된 데이터를 한 번에 저장하며 MQL을 이용하여 DB에 접근한다. Document는 규정된 스키마를 두지 않기에, 각 필드는 항상 달라질 수 있다. 스키마 검증이 필요하면 Collection에 대하여 데이터의 조건을 옵셔널하게 추가할 수 있다.

 

Mongo DB의 장점 (MySQL대비)

  1. 빠르게 애플리케이션 구축이 가능하며, 다양한 데이터 타입을 핸들링할 수 있다. 또한 스케일링에 대한 관리 기능을 제공하기에 많은 기업들이 cloud database로써 mongoDB를 선택하고 있다.
  2. document는 객체 지향 프로그래밍에 언어와 자연스럽게 매피되기에 개발이 단순화된다. mongoDB를 사용하는 것만으로도 객체를 관계형 테이블로 반환하는 복잡한 매핑 계층이 사라진다.
  3. MongoDB의 데이터 구조는 유연하기에, 새로운 비즈니스 요구사항에 대해 잘 반영해준다. 반면, MySQL은 관계형 구조를 변형시키는데 큰 오버헤드를 가져온다.
  4. 분산 데이터센터에 대하여 스케일링이 가능하며, 데이터 볼륨 및 처리량이 증가함에 따라 중지 없이 쉽게 확장 가능하다.
  • 오버헤드는 어떤 처리를 하기 위해 들어가는 간접적인 처리시간
  • 4의 스케일링은 Horizontal Scaling, Vertical Scaling 이 있는데 Vertical은 Ram을 늘리는 방식이고 Horizontal에서 MySQL은 replica를 늘리고 MongoDB에서는 샤딩을 통해 효율적인 스케일링을 처리한다. 그중 샤딩은 MySQL에 비해 고 가용성을 보장해 분산데이터 처리에 좀 더 유리하다.

간단하게 정리를 하자면 SQL은 엄격한 스키마 정의가 특징이다. 이에 반해 NoSQL(Not only SQL)은 스키마 설정에 있어(JSON과 비슷한 구조) 좀 더 유연하다. 그렇다 보니 SQL은 변경되지 않는 데이터와 정확한 규격을 가진 서비스에서, NoSQL은 SQL과 비교해선 좀 더 유연한 서비스에서 사용을 한다. NodeJS가 아무래도 스타트업이나 빠른 확장성을 가진 서비스에서 사용이 자주되다 보니 MongoDB와 함께 자주 사용되는 것으로 판단된다.

참고

반응형