회사 내 스터디를 통해 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를 저장하는 것 또한 가능하다.
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 |