본문 바로가기
Programming

MongoDB 사용법 (SQL과 비교)

by 느리게 걷는 즐거움 2024. 3. 16.
반응형

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 데이터베이스와는 다른 쿼리 언어와 데이터 모델을 사용해야 합니다.

반응형