※ pymongo 설치 및 연결
Python에서 MongoDB를 다루기 위해서는 공식 드라이버인 pymongo를 사용합니다.
pymongo는 Python과 MongoDB 서버 간의 통신을 담당하며,
CRUD 명령을 Python 코드에서 직접 수행할 수 있도록 해줍니다.
📦 1) 설치
pip install pymongo
📡 2) MongoDB 서버 연결
from pymongo import MongoClient
# MongoDB 서버 연결 (로컬 환경)
client = MongoClient("mongodb://localhost:27017")
# 원격 서버 (예: 클라우드) 연결
# client = MongoClient("mongodb://username:password@host:27017")
# 데이터베이스 선택 (없으면 자동 생성)
db = client["school"]
# 컬렉션 선택 (없으면 자동 생성)
students = db["students"]
print("✅ MongoDB 연결 완료:", db)
✅ MongoClient(): MongoDB 서버와 연결을 생성하는 객체
✅ Database / Collection: MongoDB는 DB나 컬렉션이 존재하지 않아도 접근 시 자동 생성됩니다.
※ JSON과 dict 활용
MongoDB의 데이터 구조는 JSON 기반이고, Python에서는 dict 자료형이 이에 직접 대응합니다.
따라서 별도의 변환 과정 없이 그대로 데이터를 삽입할 수 있습니다.
📁 JSON ↔ dict 예시
// MongoDB JSON
{
"name": "지우",
"age": 26,
"major": "AI Engineering",
"skills": ["Python", "Docker"]
}
# Python dict (동일 구조)
student = {
"name": "지우",
"age": 26,
"major": "AI Engineering",
"skills": ["Python", "Docker"]
}
✅ JSON = 문자열 표현 / dict = Python 객체
✅ pymongo는 dict를 내부적으로 BSON(JSON의 이진 포맷)으로 변환하여 MongoDB에 저장합니다.
※ 데이터 삽입 (insert_one / insert_many)
# 단일 문서 삽입
doc = {"name": "민준", "age": 24, "major": "Data Science"}
result = students.insert_one(doc)
print("✅ 삽입 완료 - ID:", result.inserted_id)
# 다중 문서 삽입
docs = [
{"name": "수현", "age": 25, "major": "AI"},
{"name": "하늘", "age": 23, "major": "Math"}
]
result_many = students.insert_many(docs)
print("✅ 다중 삽입 완료 - IDs:", result_many.inserted_ids)
✅ insert_one() : 단일 문서 삽입
✅ insert_many() : 리스트 형태로 여러 문서를 한 번에 삽입
※ 데이터 조회 (find_one / find)
# 단일 문서 조회
student = students.find_one({"name": "민준"})
print("📄 단일 조회:", student)
# 여러 문서 조회
for doc in students.find({"major": "AI"}):
print(doc)
# 특정 필드만 Projection
for doc in students.find({}, {"_id": 0, "name": 1, "age": 1}):
print("📌 Projection 결과:", doc)
# 조건 조회 (비교 연산자)
for doc in students.find({"age": {"$gte": 24}}):
print("📊 나이 24 이상:", doc)
✅ find_one() : 조건에 맞는 첫 번째 문서 반환
✅ find() : 커서(Cursor)를 반환하며 반복문으로 전체 결과 조회
✅ Projection : `_id` 제외, 특정 필드만 출력 가능
※ 데이터 수정 (update_one / update_many)
# 단일 문서 수정
students.update_one(
{"name": "민준"},
{"$set": {"major": "Computer Science"}}
)
# 다중 문서 수정
students.update_many(
{"major": "AI"},
{"$inc": {"age": 1}} # age 필드 +1
)
# 배열 수정 (push)
students.update_one(
{"name": "지우"},
{"$push": {"skills": "Kubernetes"}}
)
✅ $set : 필드 값 변경
✅ $inc : 숫자 증가/감소
✅ $push : 배열에 요소 추가
※ 데이터 삭제 (delete_one / delete_many)
# 단일 삭제
students.delete_one({"name": "수현"})
# 조건에 맞는 다중 삭제
students.delete_many({"age": {"$lt": 24}})
# 전체 컬렉션 비우기
students.delete_many({})
✅ delete_one() : 조건에 맞는 첫 번째 문서 삭제
✅ delete_many() : 조건에 맞는 모든 문서 삭제
※ 전체 실습 코드
아래는 위에서 설명한 기능을 하나의 스크립트로 구성한 실습 예제입니다.
from pymongo import MongoClient
# 1. MongoDB 연결
client = MongoClient("mongodb://localhost:27017")
db = client["school"]
students = db["students"]
# 2. 데이터 삽입
students.insert_many([
{"name": "지우", "age": 26, "major": "AI", "skills": ["Python", "Docker"]},
{"name": "민준", "age": 24, "major": "Data Science"},
{"name": "수현", "age": 25, "major": "AI"}
])
# 3. 데이터 조회
print("\n📊 모든 학생:")
for s in students.find():
print(s)
# 4. 데이터 수정
students.update_one({"name": "민준"}, {"$set": {"major": "Computer Science"}})
students.update_many({"major": "AI"}, {"$inc": {"age": 1}})
# 5. 수정 확인
print("\n✅ 수정 후 데이터:")
for s in students.find():
print(s)
# 6. 데이터 삭제
students.delete_one({"name": "수현"})
students.delete_many({"age": {"$lt": 25}})
# 7. 최종 결과 출력
print("\n📁 최종 컬렉션 데이터:")
for s in students.find():
print(s)
✅ 이 예제는 MongoDB의 CRUD 전 과정을 Python으로 구현한 예시이며, 실무 프로젝트의 백엔드에서도 거의 동일한 구조로 사용됩니다.
'2025 현대오토에버 모빌리티 SW 스쿨(클라우드 2기) > 데이터베이스' 카테고리의 다른 글
| [Database] 데이터베이스 모델링과 E-R 다이어그램 (0) | 2025.10.07 |
|---|---|
| [Database] Python과 DB 연동 (2) – MariaDB (0) | 2025.10.07 |
| [Database] MongoDB 심화 활용 (0) | 2025.10.07 |
| [Database] NoSQL과 MongoDB 기본 (0) | 2025.10.07 |
| [Database] DML과 트랜잭션(TCL) (0) | 2025.10.07 |