1 분 소요

[SQL]MongoDB 기초 톺아보기

MongoDB 기초 톺아보기


1. 왜 MongoDB인가?

RDBMS(Relational Database Management System) 환경에서는 데이터를 테이블(행과 열)로 저장하고, SQL 언어로 조작함. 하지만 최근 대규모 비정형 데이터가 많아지면서 더 유연한 저장 방식이 요구되고 있음. 이럴 때 NoSQL, 그 중에서도 문서지향(Document-Oriented) 데이터베이스인 MongoDB가 많이 활용됨.


MongoDB는 어떤 특징이 있을까?

  • JSON과 유사한 형태(BSON)로 데이터 저장
  • 스키마 유연성: 컬럼이 고정되어 있지 않아 다양한 형태의 데이터 저장 가능
  • 수평적 확장에 유리 (Sharding)
  • 다양한 언어에서 사용 가능 (Python, JavaScript, Java 등)
  • 복잡한 조인보다는 중첩 문서 구조를 통해 데이터 표현

2. MongoDB 설치 및 시작


2-1. 로컬 설치 (Windows 기준)

  1. 공식 홈페이지에서 설치파일 다운로드: https://www.mongodb.com/try/download/community
  2. 설치 시, MongoDB Compass (GUI 클라이언트)도 함께 설치 가능
  3. 기본 포트는 27017번


2-2. 클라우드(MongoDB Atlas) 사용도 가능

  • 별도의 설치 없이 웹에서 바로 클러스터 생성 후 사용 가능
  • 무료 플랜도 제공

3. PyMongo로 Python에서 MongoDB 다뤄보기


!pip install pymongo
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
  • MongoClient()는 MongoDB에 연결할 수 있게 해주는 객체
  • 기본 포트는 27017이며, 다른 포트를 사용 중이라면 주소를 수정해주면 됨



4. 데이터베이스와 컬렉션



4-1. 데이터베이스 생성/선택

db = client['my_database']


4-2. 컬렉션 생성/선택

collection = db['my_collection']
  • MongoDB는 명시적으로 CREATE TABLE 같은 명령어가 없음
  • 데이터를 처음 삽입할 때 자동으로 컬렉션 및 데이터베이스가 생성됨



5. 문서(Document) 삽입하기



data = {"name": "Pikachu", "type": "Electric", "level": 25}
collection.insert_one(data)
  • MongoDB는 각 행을 문서(document)라고 부름
  • Python에선 dict 자료형으로 표현 가능


여러 개의 문서를 한 번에 삽입하려면?

docs = [
    {"name": "Charmander", "type": "Fire"},
    {"name": "Squirtle", "type": "Water"}
]
collection.insert_many(docs)

6. 문서 조회하기



전체 조회

for doc in collection.find():
    print(doc)

조건 조회

collection.find_one({"type": "Electric"})

조건과 함께 반복 조회

for doc in collection.find({"type": "Water"}):
    print(doc)

7. 문서 수정하기


collection.update_one(
    {"name": "Pikachu"},
    {"$set": {"level": 30}}
)
  • $set 연산자를 통해 필드값 수정 가능

8. 문서 삭제하기


collection.delete_one({"name": "Charmander"})

9. MongoDB 쿼리 작성 시 팁?

  • _id 필드는 자동 생성되며, 각 문서의 고유값 역할을 함
  • 정렬: .find().sort("name")
  • 조건 연산자: $gt, $lt, $in, $and, $or 등 SQL과 유사한 느낌으로 작성 가능

10. 마무리

MongoDB는 데이터 구조가 유동적이고 복잡한 경우 특히 유용함.

근데… 데이터 무결성이나 복잡한 조인 연산이 필요한 경우엔 관계형 DB가 더 낫다고 함..

댓글남기기