MongoDB에 관하여

2022. 2. 21. 20:55·Etc
목차
  1. MongoDB
  2.  
728x90

회사 내 스터디를 통해 MongoDB를 사용해볼 기회가 생겨 공부하는 겸사겸사 블로그에 정리하려고 한다.

MongoDB를 알기 위해서는 DB의 종류에 대하여 알 필요가 있다.

 

NoSQL

No SQL, Not Only SQL, Non-Relational Operational Database SQL 등 의견이 분분하지만, 현재는 Not Only SQL로

풀어 설명하는 것이 다수를 차지하고 있다. 즉, SQL을 사용하는 관계형 데이터베이스(이하 RDBMS)가 아닌 데이터베이스를 의미한다.

우리가 흔히 알고 있는 관계형 데이터베이스로는 MySQL, Oracle, PostgreSQL 등이 있고, NoSQL 쪽으로는

MongoDB, Redis, HBase 등이 있다.

 

NoSQL이 등장한 이유는 무엇이며 RDBMS와 비교하였을 때 다른 점은 무엇일까?

 

지난 몇 십년간 데이터를 저장하고 관리하는 데에는 RDBMS가 사용되어 왔다. 하지만 웹2.0 환경과

빅데이터가 등장하면서 RDBMS는 "데이터를 처리하는 데 필요한 비용의 증가"라는 벽에 부딪혔다. 때문에

"데이터의 일관성"을 약간 포기하는 대신에 여러 컴퓨터에 데이터를 분산하여 저장하는 것(수평적 확장)을 목표로

NoSQL이 등장한 것이다. 아래에 표를 보면 다른 점을 확인할 수 있다.

  RDBMS NoSQL
적합한 사용 데이터 정합성이 보장되어야 하는 은행 시스템 낮은 지연 시간, 가용성이 중요한 SNS 시스템
데이터 모델 정규화와 참조 무결성이 보장된 스키마 스키마가 없는 자유로운 데이터 모델
트랜잭션 강력한 ACID 지원 완화된 ACID
확장 하드웨어 강화 수평 확장 가능한 분산 아키텍처
API SQL 쿼리 객체 기반 API 제공

* ACID - 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어

 

NoSQL에 대해서는 이정도만 알면 될 것 같다.


MongoDB

MongoDB의 레코드는 filed : value 쌍으로 구성된 데이터 구조를 가진다. value에는 문자열, 숫자, 날짜

배열, 다른 document를 저장하는 것 또한 가능하다.

이미지 출처: https://docs.mongodb.com/manual/introduction/

 

MongoDB는 스키마를 고정하지 않는 형태(Schema-less 구조)이다. 특징으로는 필드 추가 및 제거가 간편하다는 점이다.

 

또한 MongoDB를 사용하면서 JSON, BSON을 설명하지 않을 수 없다.

MongoDB에서는 JSON, BSON 타입 모두 사용한다.

 

JSON

JSON은 Javascript Object Notation의 약자로 javaScript 언어의 일부로 정의되었지만 2013년에 형식이 공식 지정되었다.

JSON은 사람이 읽고 쓰기 쉽고, 기계가 파싱하고 생성하기 쉽다는 장점을 가지고 있습니다.

하지만 JSON을 데이터베이스 내부에서 사용하기에 적합하지 않게 만드는 몇 가지 문제가 있습니다.

  • JSON은 텍스트 기반 형식이며 텍스트 구문 분석이 매우 느리다.
  • JSON의 읽을 수 있는 형식은 공간 효율성과 거리가 멀다.
  • JSON은 제한된 수의 기본 데이터 유형만 지원한다.

따라서 MongoDB 내부에서는 JSON이 아닌 BSON을 사용한다.

 

BSON

BSON은 Binary JSON의 약자로 JSON 문서를 바이너리로 인코딩한 포맷이다. JSON과 비교했을 때 BSON은

스토리지 공간과 스캔 속도 모두에서 효율적으로 설계되어 있다는 장점이 있다.

이는 애플리케이션 코드 소비를 단순화하는 방식으로 데이터에서 직접 비교 및 계산을 수행할 수 있도록 해준다.

 

  JSON BSON
부호화 UTF-8 문자열 바이너리
데이터 지원 문자열, 부울, 숫자, 배열 문자열, 부울, 숫자(정수, 부동 소수점, Long,
Decimal...), 배열, 날짜, 원시 바이너리
가독성 인간과 기계 기계만

 

MongoDB의 개념은 이정도로 알고 넘어간 후

CRUD 쿼리에 관한 내용이라던지 다른 내용들이 더 있지만 남은 내용들은 실제로 서비스에 연동시키는 과정 속에서

공부해보도록 하자.

저작자표시 비영리 (새창열림)

'Etc' 카테고리의 다른 글

애플리케이션 뒤로가기 버튼 history back 이슈  (0) 2022.05.24
Ubuntu 20.04 Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. 오류  (0) 2022.04.27
Git stash - 작업 내용 임시 저장하기  (0) 2022.04.21
git commit 시 여러 계정을 사용하는 경우  (1) 2022.02.22
github git clone password 인증  (0) 2022.02.20
  1. MongoDB
  2.  
'Etc' 카테고리의 다른 글
  • Ubuntu 20.04 Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. 오류
  • Git stash - 작업 내용 임시 저장하기
  • git commit 시 여러 계정을 사용하는 경우
  • github git clone password 인증
요술공주밍키
요술공주밍키
조금씩이라도 꾸준히..
  • 요술공주밍키
    삽질의흔적
    요술공주밍키
  • 전체
    오늘
    어제
    • 분류 전체보기 (129)
      • Java (42)
        • Spring Boot (14)
        • Spring Boot 게시판 (14)
        • 공중화장실 찾기 (4)
        • 쇼핑몰 (8)
      • JavaScript (8)
        • NodeJS (2)
      • Python (5)
        • Django (4)
      • Server (10)
        • Docker (4)
        • K8S (0)
        • Jenkins (1)
      • 알고리즘 (22)
        • 프로그래머스 (17)
        • 백준 (5)
      • Etc (21)
        • 개발 팁 (1)
      • 일상 (20)
        • 독서 포스트 (18)
        • 회고록 (2)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
요술공주밍키
MongoDB에 관하여

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.