DB 사용에 있어 SQL과 NoSQL의 개념을 이해 및 비교 하는 것이 중요하다.
각각의 사용 목적 및 특성을 고려하여 DB를 선택해야 한다.
그 중 NoSQL이면서 문서 데이터베이스인 MongoDB는 AI 시대에 점차 중요해지고 있다.
SQL
- SQL : Structured Query Language
- 데이터베이스 내 데이터 삽입, 업데이트 쿼리, 삭제와 같은 작업에 일반적으로 사용되는 도메인 특화 프로그래밍* 언어
- 데이터베이스 스키마**를 생성 및 수정하고 엑세스 및 관리 매개변수를 정의하는데 사용
- 정형 데이터***는 SQL 데이터베이스(특히, 관계형 데이터베이스)에 저장됨
- *도메인 특화 프로그래밍 언어 : 특정 작업이나 문제를 대상으로 하는 언어
- **데이터베이스 스키마 : 데이터 형식 지정 규칙, 테이블/인덱스 구조 등
- ***정형 데이터 : 일관적이며 사전에 정의된 형식으로 구성된 데이터
- 관계형 데이터베이스(RDBMS, 관계형 데이터베이스 관리 시스템)
- 테이블을 구성하는 데 사용되는 행과 열 내에 데이터를 저장
- 두 테이블(또는 그 이상) 간의 관계는 외래 키를 사용하여 만들 수 있음.
- 고정된 스키마를 사용하여 생성 및 관리된다는 점에 유의
- 정형 데이터나 반정형 데이터* 유형을 처리하는데 유리함
- *반정형 데이터 : 스키마가 고정되어 있지는 않으나, 메타데이터나 태그를 포함하여 구조를 식별할 수 있는 데이터
- 메타데이터나 태크 예시 :HTML, XML, JSON 등
- SQL 데이터베이스 예시
- Oracle : 가장 일반적으로 사용되는 엔터프라이즈 데이터베이스 시스템 (RDBMS)
- MySQL : 오픈 소스 관계형 데이터베이스 관리 시스템 (RDBMS)
- PostgreSQL : 오픈 소스 객체 관계형 데이터베이스 시스템, ACID 호환 기능 제공
- MSSQL: 대규모 엔터프라이즈 환경에서 대량의 트랜잭션 처리 등 제공하는 RDBMS
- SQLite : RDBMS 제공하는 서버리스 소프트웨어 라이브러리
NoSQL
- NoSQL : Not only Structured Query Language
- 데이터베이스 내에서 비정형 데이터*와 반정형 데이터를 수집, 저장, 조회하는데 사용되는 DB 관리 시스템 접근 방식
- 기존의 관계형 DB를 통합 분석하거나 계산 할 수 없는 데이터를 네이티브 형식**으로 유지
- 테이블 형식이 아닌 비관계형 데이터 모델을 처리
- SQL과 유사한 쿼리 언어를 지원
- *비정형 데이터 : 사전에 정의된 데이터 모델이나 일관적인 구성이 없는 데이터. ex) 사진, 오디오, 동영상
- **네이티브 형식: NoSQL DB의 다양한 데이터 저장 형식. ex) txt, JPG, MP3
- NoSQL Database Type
- 문서 데이터베이스 ; MongoDB, CouchDB
- 객체 지향 데이터베이스라고도 하며, JSON 객체와 유사하지만 같지 않은 문서에 데이터를 저장
- JSON, BSON 형태의 문서로 저장. 스키마가 유연하여 개발 속도가 빠름.
- 네이티브 객체에서 개발자가 사용하는 프로그래밍 언어로 반환된 드라이브를 사용하여 ORM 필요없음
- 숫자, 배열, 객체, 문자열, 부울 문자, 키-값 쌍, 중첩된 문서 등을 포함할 수 있음
- ORM(Object-Relational Mapping): 객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블을 자동으로 연결(매핑)해주는 기술 또는 도구
- 객체 지향 데이터베이스라고도 하며, JSON 객체와 유사하지만 같지 않은 문서에 데이터를 저장
- 키-값 데이터베이스 ; Amazon DynamoDB, ScyllaDB, Redis
- 데이터를 키-값 쌍의 그룹으로 수집, 조회, 저장.
- 각 데이터 레코드는 고유 키와 연관된 값으로 표현됨. (키는 데이터베이스에서 값 조회하는데 사용)
- 컬럼-패밀리 스토어 ; Apache Cassandra, HBase(Hadoop-based), Google Bigtable
- '와이드 컬럼 스토어' 라고도 불림
- 데이터를 행이 아닌 열으로 구성하므로, 깊이가 희박한 광범위한 데이터 세트로 작업할 때 유용
- 각 행에는 서로 다른 열(columns) 세트가 있으며 열은 패밀리로 모임.
- 성능 최적화를 위한 수평적 확장이 있는 대규모 세트로 작업할 때 유리
- 그래프 데이터베이스 ; Neo4j, Amazon Neptune, OrientDB
- 노드(데이터)와 에지(관계)로 저장. 추천 시스템이나 소셜 네트워크 분석에 특화.
- 노드 : 사람, 장소, 사물에 대한 정보 저장
- 에지 : 노드 간의 관계에 대한 정보 저장
- 그래프 구조(ex. 소셜 네트워크, 계층 구조) 를 쿼리하는데 유리
- 노드(데이터)와 에지(관계)로 저장. 추천 시스템이나 소셜 네트워크 분석에 특화.
- 문서 데이터베이스 ; MongoDB, CouchDB
SQL vs NoSQL
| 비교 항목 | SQL(관계형 데이터베이스) | NoSQL(비관계형 데이터베이스) |
| 저장 모델 | 테이블(Table) 기반 (행과 열) | 다양한 모델(문서, 키-값, 그래프 등) |
| 데이터 유형 | 정형 데이터만 처리 가능 | 비정형, 반정형, 정형 데이터 모두 처리 |
| 스키마 | 엄격한 사전 정의 스키마 | 유연한 동적 스키마 |
| 확장성 | 주로 수직적 확장 (Scale-up) | 주로 수평적 확장 (Scale-out) |
| 쿼리 언어 | SQL(표준화된 언어) | 모델별 상이(UnQL, 전용 API 등) |
| 데이터 관계 | JOIN 사용(테이블 간 연결) | 임베딩(Embedding) 또는 참조(Reference) |
| 트랜잭션 | ACID 강력 보장(데이터 정합성 최우선) | BASE(가용성 우선). 단, 일부는 ACID 지원 |
- 언제 어떤 DB를 사용?
- SQL 선택: 데이터 구조가 명확하고 변경될 가능성이 적으며, 데이터의 무결성과 정확성이 최우선일때.
- NoSQL 선택: 데이터 구조가 자주 변경되거나, 대용량의 비정형 데이터를 빠르게 처리하고 확장해야 할때.
- 확장성
- 수직적 확장(SQL) : 데이터 관계의 복잡성 때문에 하나의 강력한 서버(수직적 확장)을 선호
- 수평적 확장(NoSQL) : 대용량 데이터 처리를 위해 여러 대의 서버(수평적 확장)로 나누어 처리하는 구조
- 트랜잭션
- ACID (SQL) : 트랜잭션이 완벽하게 성공하거나 아예 실패함(All or Nothing)을 엄격하게 보장(정합성)
- BASE (NoSQL) : 즉각적인 정합성 보다는 최종적 일관성을 지향하는 유연한 속성
- MongoDB Atlas: ACID compliance를 유지할 수 있는 분산 시스템 NoSQL 데이터베이스
참고 자료
https://www.mongodb.com/ko-kr/resources/basics/databases/nosql-explained/nosql-vs-sql
NoSQL 대 SQL 데이터베이스
NoSQL 데이터베이스와 SQL 데이터베이스 간의 주요 차이점에 대해 알아보세요.
www.mongodb.com
'프로그래밍 > AI' 카테고리의 다른 글
| [Agent] In-Context Learning (feat. prompt) (0) | 2025.12.16 |
|---|---|
| [DB] MongoDB Atlas (0) | 2025.12.13 |
| [자료구조] 파이썬 객체지향과 모듈 (0) | 2025.08.16 |
| [meow] 데이터셋 및 모델 자체 평가 (2) | 2025.06.29 |
| [meow] Bert-score : 문장 간 의미 유사도 평가 (3) | 2025.06.17 |