항해99 주특기 주차 Lv3 과제는 CRUD 게시판의 데이터 베이스를 MongoDB에서 MySQL로 바꾸는 것이었다.
따라서 사용하는 라이브러리도 mongoose에서 sequelize로 바뀌었다.
일단 두가지 DB를 사용해서 프로젝트를 진행해본 결과 mongoose가 더 편리했다.
schema를 언제든지 변경할 수 있고 변경하는 것에 따라 별다른 조작 없이 DB에 저장이 되었기 때문이다.
반면, sequelize는 하나의 스키마에 migration과 model 두개의 파일이 필요했고 구조가 변경될 때마다 거쳐야하는 과정들이 굉장히 번거롭게 다가왔다. 그런 과정들이 데이터가 일관성과 무결성을 획득하기 위해 필요하겠지만 아직 대규모 데이터 처리를 해본 경험이 없어서 딱히 중요성을 체감하지 못한 상태다.
아무튼 아직 개발 어린이에 불과한 내가 짧은 시간동안 얕은 경험에 의해 편견을 가지지 않기 위해 각 DB의 차이점과 장단점을 찾아서 정리해 보았다.
MongoDB와 MySQL의 차이점
- 데이터 모델링
MySQL: 관계형 데이터베이스(RDBMS)로, 데이터를 정해진 스키마에 따라 테이블에 저장한다.
MongDB: NoSQL 데이터베이스로, 데이터를 유연한 형태의 문서(Document)에 저장한다. 이를 통해 MongoDB는 복잡한 데이터 구조를 처리하고 저장하는데 더 적합하다. - 쿼리 언어
MySQL: SQL(Structured Query Language)을 사용하여 데이터에 접근하고 조작한다.
MongDB: 자체 쿼리 언어를 사용한다. MongDB의 쿼리 언어는 JSON 형태로 작성되며, SQL보다 더 직관적이고 유연한 문법을 제공한다. - 확장성
MySQL: 수직적 확장(vertical scaling)만 지원한다. 이는 서버에 더 많은 자원을 할당하는 방식으로 확장하는 것을 의미한다.
MongoDB: 수평적 확장(horizontal scaling)을 지원한다. 이는 여러 대의 서버를 사용하여 데이터를 분산 저장하고 처리함으로써 확장하는 것을 의미한다. 이를 통해 MongoDB는 대규모 데이터 처리와 높은 가용성을 제공할 수 있다. - ACID 특성
MySQL: ACID(원자성, 일관성, 고립성, 지속성) 특성을 지원한다. 이는 데이터 일관성과 무결성을 보장한다.
MongoDB: ACID 특성을 지원하지 않고 일관성 모델을 제공한다. 이는 일관성을 보장하면서도 더 높은 성능과 확장성을 제공할 수 있게 해준다. - 커뮤니티 및 생태계
MySQL: 많은 기업 및 개발자들이 사용하는 전통적인 데이터베이스 시스템이다. 많은 커뮤니티와 다양한 도구 및 지원 서비스가 제공되고 있다.
MongoDB: 빠르게 성장하고 있으며, 대규모 기업들도 사용량이 증가하고 있다. MongDB도 다양한 커뮤니티가 있으며 무료 버전 및 상용 버전과 클라우드 기반 서비스도 제공하고 있다.
MongoDB와 MySQL의 장단점
MySQL의 장점
- 데이터의 일관성과 무결성을 보장하는 ACID 특성을 지원한다.
- 전통적인 RDBMS로서 많은 개발자와 기업에서 사용하며 안정적인 시스템으로 인정받고 있다.
- SQL을 사용하여 데이터를 조회, 조작하는 것이 직관적이다.
MySQL의 단점
- 수직적 확장만 지원하기 때문에 대규모 데이터 처리 및 확장이 어렵다.
- 정해진 스키마에 맞춰 데이터를 저장해야하기 때문에 복잡한 데이터 구조를 처리하기가 어렵다.
- NoSQL 데이터 베이스보다 유연성이 부족하다.
MongoDB의 장점
- 유연한 데이터 모델링을 지원하며 문서(Document) 형태로 데이터를 저장하기 때문에, 복잡한 데이터 구조를 처리하기 쉽다.
- 수평적 확장을 지원하기 때문에 대규모 데이터 처리와 높은 가용성을 제공할 수 있다.
- 자체 쿼리 언어를 사용하기 때문에 SQL보다 직관적이고 유연한 쿼리 작성이 가능하다.
MongoDB의 단점
- ACID 특성을 지원하지 않기 때문에 일관성 보다는 유연성과 성능을 우선시하는 데이터 베이스이다.
- SQL이 아닌 자체 쿼리 언어를 사용하기 때문에 기존에 SQL을 사용하던 개발자들이 적응하는데 시간이 필요하다.
- MySQL과 비교해서 생태계가 상대적으로 작고, 일부 기능이 부족하다.
차이점과 장단점을 간단하게 정리해보았다.
위와 같은 특징과 장단점을 잘 체크해서 진행하는 프로젝트에 맞는 DB를 선택해 사용하면 좋을 것 같다.
그리고 ACID가 여러번 언급되는데 트랜잭션과 연결되는 개념이고, Lv5 과제를 진행하며 수강해야할 강의에
나오기 때문에 그때 디테일하게 파헤쳐봐야겠다.
'Development > TIL' 카테고리의 다른 글
Transaction과 ACID (1) | 2023.04.29 |
---|---|
Thunder Client (0) | 2023.04.28 |
Sequelize 탐구 (0) | 2023.04.26 |
Sequelize (0) | 2023.04.25 |
JsonWebToken (0) | 2023.04.23 |