MongoDB: SQL과의 차이점과 간단한 파이썬 예제

안녕하세요. 오늘은 mongoDB와 같은 noSQL과 SQL의 차이점에 대해 알려드리겠습니다.

MongoDB는 NoSQL이라고 불리는 데이터베이스입니다. NoSQL은 Not only SQL의 약자로, SQL과는 다른 방식으로 데이터를 저장하고 관리하는 데이터베이스를 의미합니다. 주로 문서라는 데이터 단위를 사용하며 JSON 형식으로 표현됩니다. JSON은 키와 값의 쌍으로 이루어진 데이터 구조입니다. 예를 들어 아래는 문서의 예제입니다.
1 2 3 4 5 6 |
{ "name": "홍길동", "age": 22, "hobbies": ["독서", "요리", "여행"] } |
MongoDB에서는 문서를 컬렉션이라는 그룹으로 저장합니다. 컬렉션은 SQL에서의 테이블과 비슷한 개념인데, 컬렉션은 테이블과 달리 데이터의 구조와 제약조건을 정의하는 스키마가 없습니다.반대로 테이블은 스키마에 따라 구분하고 검증합니다.
컬렉션은 스키마가 없으므로 같은 컬렉션이어도 문서마다 다른 구조와 속성을 가질 수 있습니다.
예시
1 2 3 4 5 6 |
{ "name": "홍길동", "age": 22, "hobbies": ["독서", "요리", "여행"] } |
1 2 3 4 5 6 |
{ "name": "김철수", "gender": "남자", "job": "엔지니어" } |
MongoDB와 SQL의 차이점
가장 큰 차이점은 데이터 모델입니다. 데이터 모델이란 데이터베이스에서 데이터를 어떻게 표현하고 조직하는지의 방식입니다. mongoDB는 문서를 사용하는데, sql은 테이블을 사용합니다. 문서와 테이블의 차이점을 알려드리겠습니다.
SQL과는 다르게 문서는 JSON 형식으로 표현되며, 키와 값의 쌍으로 이루어진 데이터 구조이고 테이블은 행과 열로 이루어진 데이터 구조입니다.
문서는 스키마가 없어서 같은 컬렉션에 속해도 문서마다 다른 구조와 속성을 가질 수 있는데, 테이블은 스키마가 있어서 같은 테이블에 속하는 행은 모두 같은 구조와 속성을 가집니다.
문서는 비정형 데이터를 저장하기에 적합합니다. 비정형 데이터란 구조가 없거나 변화하는 데이터를 의미합니다. 예를 들어서 SNS의 게시물이나 댓글, 웹 페이지의 내용 등이 있습니다.
테이블은 정형 데이터를 저장하기에 적합합니다. 비 정형 데이터와는 반대로 구조가 고정되고 일정한 데이터를 의미합니다. 예를 들어서 쇼핑몰의 회원 정보나 주문 내역, 재고 현황 등이 정형 데이터입니다.
장단점 비교
특징 | MongoDB | SQL |
---|---|---|
장점 | 단점 | |
유연성 | 스키마 없음, 다양한 형태의 데이터 저장 가능 | 스키마 정의로 데이터 구조 제한 |
확장성 | 수평적 확장 가능 (컬렉션 분산) | 수직적 확장 불가 (복잡한 작업 필요) |
성능 | 빠른 읽기/쓰기 속도, 내장 관계 지원 | 데이터 분리로 인한 느린 읽기/쓰기 속도 |
장점 | 단점 | |
일관성 | 최종 일관성, 동기화 지연 가능 | 일관성, 동기화 보장 |
기능 | 제한적인 쿼리 언어, 조인/트랜잭션 미지원 | 표준화된 쿼리 언어, 다양한 기능 지원 |
보안 | 보안 기능 비활성화, 설정 필요 | 기본적으로 보안 기능 활성화, 안정적 |
어떤 상황에 적합한가
- MongoDB
- 데이터의 구조가 자주 변화하거나 다양한 형태의 데이터를 저장해야 하는 경우
- 데이터의 양이 많고 성능이나 확장성이 중요한 경우
- 데이터 간의 관계가 복잡하지 않거나 내장 가능한 경우
- SQL
- 데이터의 구조가 고정되거나 일정한 형태의 데이터를 저장해야 하는 경우
- 데이터의 품질이나 정확성이 중요하고 일관성을 보장해야 하는 경우
- 데이터 간의 관계가 복잡하고 조인이나 서브쿼리 등의 기능이 필요한 경우
파이썬에서 MongoDB 사용법
파이썬에서 간단히 MongoDB를 사용하는 방법을 알려드리겠습니다. 파이썬에서 pymongo라는 라이브러리를 설치해주시고, 설치 후에 서버에 연결하고 쿼리를 실행할 수 있습니다.
먼저 pymongo를 설치합니다.
1 |
pip install pymongo |
그 다음 파이썬 스크립트에서 pymongo를 불러오면 됩니다.
1 2 3 |
from pymongo import MongoClient client = MongoClient('mongodb://localhost:27017/') |
이제 연결한 클라이언트에서 데이터베이스를 선택하거나 만들 수 있습니다.
1 |
db = client['mydatabase'] |
이제 선택한 데이터베이스에서 컬렉션을 선택하거나 만들 수 있습니다.
1 |
collection = db['mycollection'] |
데이터를 삽입해 봅시다.
1 2 3 4 5 6 7 |
data = { "name": "홍길동", "age": 22, "hobbies": ["독서", "요리", "여행"] } collection.insert_one(data) |
이제 데이터를 조회해 봅시다.
1 2 3 4 |
result = collection.find_one({"name": "홍길동"}) print(result) |
결론
이상으로 mongoDB와 sql과의 차이점에 대해 정리해보고 간단 사용법에 대해 알아보았습니다. 오늘도 읽어주셔서 감사드리고 다른 글도 한번씩 읽어주세요. 감사합니다.