내가 MongoDB를 선택한 이유

Moondy·2022년 8월 13일
1

💡 MongoDB가 무엇인지는 MonogoDB 정리글 참고

1. 1:N 관계가 많기 때문에

RDB vs MongoDB(NoSQL)

  • DB 아키텍처를 보면 1:N 관계가 많다

    • 예를들어 MeetUP과 memeber_id관계를 보면, 한 밋업(모임)에 여러명의 참가자(MemberId)가 있을 수 있기 때문에 1: N의 관계이다

    • RDB로 구현할 경우

      • MeetUp과 DevUser에 1: N의 관계를 만들고(Reference Key 설정), MeetUp을 조회할 때마다 DevUser와 Join해야한다.
      • 대용량 트래픽이 발생하는 서비스의 경우 Read를 할 때마다 Join을 해야한다면 성능 저하 이슈가 생길 수 밖에 없다.
      • 그 외에 정규화, 트랜잭션을 고려해서 사용해야 RDB의 장점을 잘 활용할 수 있다.
    • MongoDB같은 NoSQL을 사용할 경우

      • Schema-less 하기 때문에 Field 안에 Object를 넣는 방식으로 구현할 수 있다.
      • 여기서는 memeber_id를 List<String>으로 정의하여 Depth 있게(계층적으로) Document를 구현했다.
      public class MeetUp {
      
         @Id
         @Field("_id")
         private ObjectId id;
      
         @Field("category")
         private String category;
         
         (... 일부 생략)
      
         @Field("member_id")
         private List<String> memberId;
      
         @Field("pending_id")
         private List<String> pendingId;
      
         @Field("is_open_yn")
         private Boolean isOpenYn;
      
         @Field("is_recruiting")
         private Boolean isRecruiting;
      
          @Field("leader_id")
          private String leaderId;
      }

2. 일반적인 NoSQL DB 기능으로서의 높은 활용도

Elastic Search vs MongoDB

구분MongoDBElastic Search
검색Field기준으로 Find 해야함역색인 구조로 검색이 빠름 (특히 Full-Text Scan)
저장MongoDB는 범용 데이터베이스 용도로 개발되었기 때문에 Document 형식으로 Schema-less 하게 저장 가능ES에서 segment는 불변이기 때문에, 문서가 업데이트 될 때 마치 새 문서가 인덱싱되듯 새 segment에 쓰이게 되기 때문에 Write가 느림
장점상대적으로 Write가 빠르다상대적으로 Read가 빠르다, 검색기능이 다양하다
  • 고도화된 검색기능보다 DB 데이터의 수정 및 삭제가 빠른것이 더 중요했기 때문에 MongoDB가 더 적합하다고 판단했다.

3. ACID보다 성능이 더 중요

RDB vs MongoDB

  • 트래픽이 많은 서비스라고 가정하고 개발했기 때문에 여러 사용자가 동시 접근했을 때 발생하는 동시성 이슈를 해결하는것이 더 중요했습니다.
  • RDBMS
    • ACID를 구현하기 위해 Table 단위로 Blocking 하는 RDB는 대용량 트래픽에서 성능 이슈가 발생할 수 있습니다.
  • MonogoDB
    • 도큐먼트 단위로 Lock을 할 수 있는 MongoDB가 동시성 이슈를 해결하며 빠른 성능을 낼 수 있다고 생각했습니다.
    • 더불어 트랜잭션과 같은 기능이 필요할 경우 Kafka 등의 MQ를 사용하거나 RDB를 인메모리 유효성 데이터만 끌고와서 처리하는 식으로 한계를 극복할 수 있습니다.

4. 트래픽이 많은 서비스에 유리

  • Devstagram은 트래픽이 많은 서비스라고 가정하고 개발했습니다.
  • MongoDB는 Sharding, Clustering을 통해 Scale-Out을 구현할 수 있습니다.
profile
DevOps를 살짝 찍먹하는 BackEnd 개발자

0개의 댓글