MongoDB 사용법
이번 글에서는 MongoDB와 SQL 언어를 비교하여 각각의 특징과 장단점을 살펴보고, MongoDB를 사용하는 방법에 대해 소개하겠습니다.
MongoDB를 사용하면 좋은 경우는 어떤 경우일까요? 유연한 데이터 구조가 필요한 경우: MongoDB는 스키마를 강제하지 않기 때문에, 데이터의 구조가 자주 변경되거나 복잡한 데이터 구조를 다룰 때 유용합니다. SQL은 고정된 스키마를 가지고 있어서 데이터 모델링이 더 복잡할 수 있습니다.
대량의 비정형 데이터 처리가 필요한 경우: MongoDB는 JSON과 유사한 BSON 형식으로 데이터를 저장하므로, 비정형 데이터를 다루는데 적합합니다. 이는 로그, 센서 데이터, 소셜 미디어 데이터 등과 같은 비정형 데이터를 효율적으로 처리할 때 유용합니다.
MongoDB vs. SQL 비교
- 데이터 모델: SQL은 관계형 데이터 모델을 사용하며, 데이터는 테이블로 구성됩니다. MongoDB는 NoSQL 데이터베이스로, JSON과 유사한 BSON 형식으로 데이터를 저장합니다. 이는 자유로운 스키마 디자인과 중첩된 구조를 허용합니다.
- 쿼리 언어: SQL은 구조적인 쿼리 언어로, SELECT, INSERT, UPDATE, DELETE 등의 구문을 사용합니다. MongoDB는 JSON 기반의 쿼리 언어를 사용하며, 쿼리는 객체와 배열의 조합으로 작성됩니다.
- 확장성: MongoDB는 수평적 확장에 용이하며, 샤딩(Sharding)을 통해 대규모 데이터를 처리할 수 있습니다. SQL 데이터베이스도 확장이 가능하지만, 수직적 확장이 주로 사용됩니다.
MongoDB를 잘 사용하기 위해서는 SQL의 구조와 비교하며 전체 구조를 이해하는 것이 좋습니다.
구성요소 | MongoDB | SQL |
데이터베이스 | Database | Database |
컬렉션 | Collection | Table |
문서 | Document | Row (or Record) |
필드 |
Field | Column |
위의 표를 통해서 MongoDB의 각 요소가 SQL의 어떤 요소와 매칭되는 지 확인할 수 있습니다. 데이터의 최소 단위는 Document이며 데이터의 정보를 필드로 표현하는 것을 알 수 있습니다.
Collection
SQL (관계형 데이터베이스):
- 데이터베이스는 테이블의 집합으로 구성됩니다.
- 각 테이블은 열(Column)과 행(Row)으로 이루어져 있습니다.
- 각 행은 고유한 식별자인 Primary Key에 의해 식별됩니다.
- 테이블 간에 관계를 설정할 수 있습니다 (ex: 외래 키를 사용한 관계 정의).
MongoDB (NoSQL 데이터베이스):
- 데이터베이스는 컬렉션의 집합으로 구성됩니다.
- 각 컬렉션은 JSON 형식의 문서(Document)의 집합으로 이루어져 있습니다.
- 각 문서는 고유한 _id 필드를 가지고 있으며, 이를 통해 식별됩니다.
- 컬렉션 간에 명시적인 관계를 정의하지 않습니다. 대신, 중첩된 문서를 활용하여 데이터를 구조화합니다.
문서와 레코드
SQL (관계형 데이터베이스):
- 레코드는 테이블 내에 있는 단일한 데이터 엔트리를 나타냅니다.
- 각 열(Column)은 해당 레코드에 대한 특정 속성(필드)을 나타냅니다.
MongoDB (NoSQL 데이터베이스):
- 문서는 컬렉션 내에 있는 단일한 데이터 엔트리를 나타냅니다.
- 문서는 BSON(Binary JSON) 형식으로 저장되며, JSON과 유사한 형식을 가지고 있습니다.
- 각 문서는 여러 필드로 구성되어 있으며, 필드는 값의 키-값 쌍을 가지고 있습니다.
스키마와 스키마 없는 구조
SQL (관계형 데이터베이스):
- 각 테이블은 사전에 정의된 스키마에 따라 구조화됩니다.
- 스키마는 각 열의 데이터 타입과 제약 조건을 정의합니다.
MongoDB (NoSQL 데이터베이스):
- MongoDB는 스키마가 없는 구조를 가집니다.
- 각 컬렉션 내의 문서는 자유로운 형식으로 구성될 수 있습니다.
- 이는 유연성을 제공하며, 필요에 따라 동적으로 데이터 구조를 변경할 수 있습니다.
정규화와 비정규화:
SQL (관계형 데이터베이스):
- 정규화는 데이터를 중복이나 중복된 데이터의 업데이트 문제를 방지하기 위해 테이블을 분해하는 과정을 의미합니다.
- 이는 데이터를 관리하기 위해 효율적인 방법입니다.
MongoDB (NoSQL 데이터베이스):
- MongoDB는 일반적으로 비정규화된 구조를 선호합니다.
- 중복된 데이터를 허용하고, 데이터를 적절하게 중첩시켜 읽기 성능을 최적화합니다.
MongoDB Command 정리
데이터베이스 관리:
- use <데이터베이스명>: 사용할 데이터베이스 선택
- show dbs: 현재 데이터베이스 목록 표시
- db: 현재 사용 중인 데이터베이스 표시
컬렉션 관리
- db.createCollection('<컬렉션명>'): 새로운 컬렉션 생성
- show collections: 데이터베이스 내 컬렉션 목록 표시
- db.<컬렉션명>.drop(): 컬렉션 삭제
문서 조회 및 삽입:
- db.<컬렉션명>.find(): 컬렉션 내 문서 조회
- db.<컬렉션명>.insertOne(<문서>): 단일 문서 삽입
- db.<컬렉션명>.insertMany([<문서1>, <문서2>, ...]): 다중 문서 삽입
문서 수정 및 삭제:
- db.<컬렉션명>.updateOne(<조건>, <수정할 내용>): 단일 문서 수정
- db.<컬렉션명>.updateMany(<조건>, <수정할 내용>): 다중 문서 수정
- db.<컬렉션명>.deleteOne(<조건>): 단일 문서 삭제
- db.<컬렉션명>.deleteMany(<조건>): 다중 문서 삭제
MongoDB는 NoSQL 데이터베이스로, SQL 데이터베이스와는 다른 특징을 가지고 있습니다. MongoDB를 사용하면 유연성과 확장성이 향상되지만, SQL 데이터베이스와는 다른 쿼리 언어와 데이터 모델을 사용해야 합니다.
'Programming' 카테고리의 다른 글
REST API를 생성하고 호출하기 (2) | 2024.03.18 |
---|---|
REST API(Representational State Transfer API) (1) | 2024.03.17 |
Plotly로 막대 그래프 그리기와 색상 변경하기 (0) | 2024.03.15 |
정보관리는 Obsidian으로 (0) | 2024.03.13 |
우분투와 윈도우 운영체제 사이의 파일 공유 (1) | 2024.03.08 |