프로젝트에서 채팅 기능을 구현하면서 데이터베이스 선택에 대한 고민이 있었습니다.

NoSQL 데이터베이스인 MongoDB를 사용했고 실제 적용 과정에서

채팅이 1, 2분 간 일시적으로 전송되지 않는 문제가 발생했습니다.

해당 과정에서 DB의 동시성 문제에 대해 이야기가 나왔고, 이에 대해 생각할 필요가 있었습니다.

이 글에서는

  1. 기존에 어떤 이유로 MongoDB를 사용했는지

  2. 해당 채팅 문제는 무엇 때문에 발생했을 지에 대한 추론과 향후 계획

을 이야기해보고자합니다.


들어가기 앞서 저희 프로젝트는 채팅 이외에 도메인에 관계형 데이터베이스인 MySQL을 사용해왔습니다.

왜 NoSQL인 MongoDB를 사용하게 되었는지 서술하도록 하겠습니다.

왜 NoSQL 인가?


가장 처음에는 디스코드와 페이스북 메신저가 채팅 구현에 NoSql을 사용한다는 것에서 이점이 있을 것이라고 판단하여 알아보게 되었습니다!

Discord Chooses ScyllaDB as Its Core Storage Layer - ScyllaDB

  1. I**/O비용이 낮아서**

먼저 RDBMS에 채팅 내용을 담으면 I/O비용이 큽니다. I/O 비용이 크다는 말은 데이터를 넣고 빼는데 리소스(cpu, disk, memory)를 사용하는 양이 크다는 뜻입니다.

실제로 NoSQL 데이터베이스의 읽기 및 쓰기 작업은 데이터 체크가 없기 때문에 빠릅니다. 또한 RDBMS과는 달리 외래키로 인한 참조 데이터를 신경을 쓰지 않아도 되므로 모든 데이터 작업을 제한 없이 병렬로 처리할 수 있어 속도 향상에 이점이 있다는 것을 알게 되었습니다. 따라서 NoSQL은 상대적으로 적은 리소스를 사용하여 실시간 채팅에서 낮은 레이턴시를 제공해줄 수 있다고 판단했습니다.

  1. 확장성이 좋아서

NoSQL 데이터베이스는 여러 서버에 데이터를 분산할 수 있으므로 추후 필요에 따라 확장하거나 축소하는 것이 쉽습니다. 따라서 프로젝트가 실제로 사용될 경우 확장성과 안정성을 염두해 둔다면 NoSql이 적합할 수 있다고 판단하였습니다!

RDBMS vs NoSQL: How To Choose In 2023

Database Scaling