데이터베이스를 선택할 때 가장 중요한 결정은 관계형(SQL) 혹은 비관계형(NoSQL) 데이터 구조를 선택하는 것이다. 두 시스템 모두 고유한 장점을 제공하고 서로 다른 요구 사항을 충족하므로 최적의 데이터 관리를 위해서는 두 시스템의 차이를 파악하는 것이 중요하다.
SQL
정의
- Structed Query Language(구조화 된 쿼리 언어)의 약자
- 관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어
- 데이터베이스 자체를 나타내는 것이 아니라, 특정 유형의 데이터베이스와 상호 작용하는데 사용하는 쿼리 언어
💡 관계형 데이터베이스(Relational DataBase) : 데이터를 행과 열의 2차원 표 형태로 저장하는 데이터베이스
특징
- SQL을 사용하면 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 저장, 수정, 삭제 및 검색할 수 있다.
관계형 데이터베이스의 핵심적인 2가지 특징
- 데이터는 정해진 (엄격한) 데이터 스키마에 따라 테이블에 저장된다.
- 데이터는 관계를 통해 여러 테이블에 분산된다.
1) 엄격한 데이터 구조(스키마)가 존재한다.
- 데이터는 테이블에 레코드 형태로 저장되며, 각 테이블에는 명확하게 정의된 구조가 있다.
- 구조는 필드의 이름과 데이터 유형으로 정의된다.
- 관계형 데이터베이스에서 스키마를 준수하지 않는 레코드는 테이블에 추가할 수 없다.
- 즉, 정해진 구조에 맞는 레코드만 추가 가능한 것이 관계형 데이터베이스의 특징 중 하나이다.
2) 관계를 사용한다.
- 데이터의 중복을 피하기 위해 관계를 사용한다.
- 하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에, 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어진다.
NoSQL
정의
- Not Only SQL의 약자
💡 Not Only SQL : 단순히 기존 관계형 DBMS가 갖고 있는 특성뿐만 아니라, 다른 특성들을 부가적으로 지원한다는 의미를 내포한다.
- NoSQL은 기본적으로 SQL(관계형 데이터베이스)와 반대되는 접근 방식을 따르기 때문에 지어진 이름이다.
- 스키마 없음
- 관계 없음
- 초고용량 데이터 처리 등 성능에 특화된 목적을 위해, 비관계형 데이터 저장소에 비구조적인 데이터를 저장하기 위한 분산 저장 시스템
특징
- NoSQL에서는 레코드를 문서(documents)라고 부른다.
- 문서(documents)는 json과 비슷한 형태를 가지고 있다.
관계형 데이터베이스처럼 여러 테이블에 나누어담지 않고, 일반적으로 관련 데이터를 동일한 '컬렉션'에 넣는다. - 따라서, NoSQL에서는 여러 테이블에 조인할 필요 없이 이미 필요한 모든 것을 갖춘 문서를 작성한다.
(NoSQL에서는 조인이라는 개념이 존재하지 않는다.)
- 문서(documents)는 json과 비슷한 형태를 가지고 있다.
- 테이블을 컬렉션(collection)이라고 부른다.
- 문서, 그래프 데이터베이스, 키-값 저장소와 같은 비관계형 데이터 구조를 사용하여 데이터를 저장하고 검색하는 데이터베이스의 한 유형이다.
- 기존의 관계형 데이터베이스보다 유연하게 설계되어 사용량이나 부하 변화에 따라 쉽게 확장 또는 축소할 수 있다.
- 비관계 데이터베이스 (NoSQL)도 관계형 데이터베이스와 방식은 다르지만, 관계 데이터를 저장할 수는 있다.
- 관게형 DB의 주요 특성인 ACID (Atomic, Consistency, Integrity, Durabity)를 제공하지 않는다.
- SQL은 스키마를 따르지 않으면 데이터를 저장하는 것이 불가능하지만, NoSQL은 다른 구조의 데이터를 같은 컬렉션에 추가하는 것이 가능하다.
- 확장성이 좋다. 수직적, 수평적 확장을 모두 지원한다.
- 데이터 저장 방식으로 인해 SQL 데이터베이스는 일반적으로 수직적 확장만 지원한다.
확장성(Scaling) : 대규모적인 재설계 및 재설치 없이 확장이 얼마나 쉽고 가능한지에 대한 용이성
- 수직적 확장
▪︎ 단순히 DB 서버의 성능을 향상시키는 것 (ex. CPU 업그레이드)
- 수평적 확장 :
▪︎ 더 많은 서버가 추가되어 DB가 전체적으로 분산되는 것
▪︎ 하나의 데이터베이스에서 작동하지만, 여러 호스트에서 작동한다.
▪︎ 샤딩 (Sharding)의 개념을 알고 있는 NoSQL 데이터베이스는 수평적 확장을 지원할 수 있다.
샤딩 : 하나의 거대한 데이터베이스나 네트워크 시스템을 여러 개의 작은 조각으로 나누어 분산 저장하여 관리하는 것
- 단순 검색, 데이터 추가 작업에 있어 매우 최적화된 키-값 저장 기법을 사용한다.
유형
1. Key-Value 타입
- 속성을 Key-Value의 쌍으로 나타내는 데이터를 배열 형태로 저장한다.
- Key는 속성 이름을 뜻하고, Value는 속성에 연결된 데이터 값을 의미한다.
- 대표적인 Key-Value 형식의 데이터베이스에는 Redis, Amazon DynamoDB 등이 있다.
2. 문서형(Document) 데이터베이스
- 데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스를 의미한다.
- 많은 문서형 데이터베이스에서 JSON과 유사한 형식의 데이터를 문서화하여 저장한다.
- 각각의 문서는 하나의 속성에 대한 데이터를 가지고 있고, 컬렉션이라는 그룹으로 묶어 관리한다.
- 대표적인 문서형 데이터베이스에는 MongoDB 등이 있다.
3. Wide-Column Store 데이터베이스
- 데이터베이스의 열(column)에 대한 데이터를 집중적으로 관리하는 데이터베이스이다.
- 각 열에는 key-value 형식으로 데이터가 저장되고, 컬럼 패밀리(column families)라고 하는 열의 집합체 단위로 데이터를 처리할 수 있다.
- 하나의 행에 많은 열을 포함할 수 있어서 유연성이 높다.
- 데이터 처리에 필요한 열을 유연하게 선택할 수 있다는 점에서 규모가 큰 데이터 분석에 주로 사용되는 데이터베이스 형식이다.
- 대표적인 Wide-Column 데이터베이스에는 Apache Cassandra, Apache HBase 등이 있다.
4. 그래프(Graph) 데이터베이스
- 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 데이터베이스이다.
- 노드(node)에 속성별(entity)로 데이터를 저장한다.
- 각 노드간의 관계는 선(edge)로 표현한다.
- 대표적인 그래프 데이터베이스에는 Neo4J, InfiniteGraph 등이 있다.
SQL의 장단점
장점
- 스키마가 명확하게 정의되어 데이터 무결성을 보장한다.
- 관계를 맺고 있는 테이블 간의 데이터를 중복 없이 한 번만 저장한다.
- NoSQL은 관계가 있는 컬렉션에 모두 데이터를 중복으로 저장해야 한다.
단점
- 덜 유연하다.
- 데이터 스키마를 사전에 꼼꼼히 계획해야 한다.
- 나중에 스키마를 수정하기 힘들다.
- 관계를 맺고 있어 조인문이 많은 복잡한 쿼리가 만들어질 수 있다.
- 대체로 수직적 확장만 가능하다.
NoSQL의 장단점
장점
- 스키마가 없어 유연하다.
- 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
- 데이터를 조회하는 속도가 빨라진다.
- 데이터가 애플리케이션이 필요로 하는 형식으로 저장되기 때문
- 수직, 수평으로의 확장이 가능하여 애플리케이션의 모든 읽기/쓰기 요청을 처리할 수 있다.
단점
- NoSQL의 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
- 데이터가 중복되기 때문에 불안정한 측면이 있다.
- 데이터 중복을 계속 업데이트 해야 한다.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정 시 모든 컬렉션에서 수행해야 한다.
SQL 데이터베이스 사용이 더 좋은 경우
- 관계를 맺고 있는 데이터가 자주 변경되는 경우
- NoSQL에서는 관계를 맺고 있는 컬렉션들을 모두 수정해야 하기 때문에 비효율적이다.
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에 중요한 경우
- 조인이나 복잡한 쿼리를 실행해야 하는 경우
-> SQL은 명확한 스키마와 데이터의 무결성이 보장돼야 할 때 유리하다. 그리고, 데이터가 자주 변경 및 수정될 때 더 좋은 성능을 보인다.
NoSQL 데이터베이스 사용이 더 좋은 경우
- 정확한 데이터 구조를 확정할 수 없는 경우
- 데이터 구조가 변경, 확장될 가능성이 있는 경우
- 읽기를 자주 하지만 데이터 변경은 자주 없는 경우
- 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야 하는 경우)
- ACID 조건이 요구되지 않는 경우
- 유연한 스키마가 필요한 데이터를 다루는 경우
- 데이터베이스에 제약 및 유효성 로직이 구현될 필요가 없는 경우
- 분산된 소스로부터 데이터를 로깅하는 경우
- 장바구니나 세션처럼 임시적인 데이터를 저장할 경우
-> NoSQL은 유연하고 수평적인 확장이 요구될 때 사용하면 좋다. 수정 시 모든 컬렉션에서 작업을 수행하기 때문에 읽기 처리 위주의 작업을 수행할 때 유리하다.
SQL과 NoSQL의 차이
비교 | SQL | NoSQL |
⭐️ 정의 | SQL 데이터베이스는 RDBMS 혹은 관계형 데이터베이스이다. | NoSQL은 비관계형 혹은 분산 데이터베이스이다. |
목적 | 전통적인 RDBMS는 데이터를 분석하고 가져오기 위해 SQL 문법과 질의를 사용하며 온라인 분석 처리를 위해 개발되었다. | 다양한 종류의 데이터베이스 기술을 구성하고 있고, 최신 어플 개발에 대응하기 위해 개발되었다. |
⭐️ 질의 언어 | 구조적 질의 언어 | 정의되지 않은 질의 언어 |
⭐️ 타입 | 테이블에 기초한 데이터베이스 | 문서, 키페어, 그래프의 형태를 가질 수 있음 |
⭐️ 스키마 | 사전 정의된 스키마 혹은 구조적 데이터 | 동적 스키마 혹은 비구조적 데이터 |
데이터 구조 | 정규화된 데이터 구조를 사용한다. | 비정규화된 데이터 구조를 사용한다. |
⭐️ 확장성 | 수직적 확장 가능 | 수평적 확장 가능 |
종류 | Oracle, PostgreSQL, MySQL | MongoDB, Redis, Neo4j, Hbase |
적합성 | 복잡하고 집약적인 쿼리 환경에 적합하다. JOIN 및 복잡한 쿼리를 지원한다. |
복잡한 쿼리에는 적합하지 않다. JOIN 및 복잡한 쿼리를 지원하지 않는다. |
계층 구조 | 계층적 데이터 저장소에는 적합하지 않다. | 키 값 페어 타입을 지원하기 때문에 계층적 데이터 저장에 적합하다. |
변형 | 한가지 타입과 부수적인 변형들을 가진다. | 그래프나 문서 같은 여러 다른 타입을 가질 수 있다. |
개발년도 | 1970년도 평면 파일 저장소에서 개념이 시작됐다. | 2000년도 SQL의 한계와 오류를 보완하기 위해 개발됐다. |
오픈소스 | 상엄적 용도와 프리웨어 등이 있다. | 오픈소스이다. |
일관성 | 강한 일관성을 가진다. | DB에 따라 다르다. |
최적 용도 | ACID 문제를 해결하기에 적합한 선택이다. (트랜잭션 관리를 위해 ACID를 따른다.) |
데이터 유효성 문제에 적합하다. (반드시 ACID 속성을 따르지 않는다.) |
중요도 | 데이터의 신뢰도가 매우 중요할 때 사용된다. | 정확도보다는 빠른 데이터가 중요할 때 사용된다. |
최적 옵션 | 동적 쿼리를 지원할 때 좋다. | 필요에 따라 확장이 필요할 때 좋다. |
하드웨어 | 전문적인 DB 하드웨어 (오라클 Exadata 등) | 일반 하드웨어 |
네트워크 | 고성능 지원 하드웨어 (Infiniband, FabricPath 등) | 일반 네트워크 (Ethernet emd) |
저장 방식 | 고성능 지원 저장소 (SAN, RAID 등) | 일반 저장소 (HDD, JBOD 등) |
장점 | 크로스 플랫폼 지원, 보안성, 무료 | 편리한 사용성, 고성능, 유연한 도구 |
모델 | ACID(원자성, 일관성, 고립성, 지속성) | Base(Basically Available, Soft state, Eventually Consistent) |
5가지 중요한 차이
- SQL 데이터베이스는 관계형 데이터베이스이고, NoSQL 데이터베이스는 비관계형 데이터베이스이다.
- SQL 데이터베이스는 구조화 쿼리 언어(SQL)를 사용하며 미리 정의된 스키마가 있다.
NoSQL 데이터베이스는 구조화되지 않은 데이터를 위한 동적 스키마가 있다. - SQL 데이터베이스는 수직적 확장이 가능한 반면, NoSQL 데이터베이스는 수평적 확장이 가능하다.
- SQL 데이터베이스는 테이블 기반인 반면, NoSQL 데이터베이스는 문서, 키-값, 그래프 또는 와이드 컬럼 스토어이다.
- SQL 데이터베이스는 다중 행 트랜잭션에 더 적합한 반면, NoSQL은 문서나 JSON과 같은 비정형 데이터에 더 적합하다.
SQL과 NoSQL 중 어떤 것을 사용해야 할까 ?
어떤 유형의 데이터베이스를 사용할지 결정할 때는 프로젝트의 특정 요구 사항과 필요에 따라 SQL 또는 NoSQL을 선택해야 한다.
예를 들어, 웹 애플리케이션을 위해 빠르고 확장 가능하며 안정적인 데이터베이스가 필요한 경우 NoSQL 시스템이 더 적합할 수 있다.
반면에 애플리케이션에 복잡한 데이터 쿼리와 트랜잭션 지원이 필요한 경우에는 SQL 시스템이 더 나은 선택일 수 있다.
궁극적으로 모든 경우에 적합한 솔루션은 없으며, 데이터베이스에 필요한 것이 무엇이고 어떤 유형의 시스템이 가장 효율적인 방식으로 이를 제공할 수 있는지에 따라 결정된다.
참고문헌
https://thisiswoo.github.io/development/sql-vs-nosql.html#google_vignette
[SQL] SQL과 NoSQL의 차이
#목차 SQL(Structured Query Language) 이란? 데이터베이스 구조(DB Structure) 관계형 데이터베이스(Relational database) NoSQL(Non SQL) 이란? NoSQL의 종류 Document Databases Key-Value-Based Databases DynamoDB의 JAVA API를 활용한 k
thisiswoo.github.io
https://appmaster.io/ko/blog/sql-dae-nosql-deiteobeiseu
SQL 대 NoSQL 데이터베이스: 차이점은 무엇입니까? | AppMaster
SQL 및 NoSQL 데이터베이스는 가장 널리 사용되는 데이터베이스 유형입니다. 둘 다 나름대로 가치가 있습니다. 비즈니스에 SQL과 NoSQL을 사용해야 하는 경우를 알아보십시오.
appmaster.io
https://www.integrate.io/ko/blog/the-sql-vs-nosql-difference-ko/
SQL과 NoSQL 비교: 5가지 주요 차이점
가장 큰 결정 중 하나는 SQL 또는 NoSQL 데이터 구조를 선택하는 것입니다. 사용자가 염두에 두어야 할 5가지 주요 차이점이 있습니다.
www.integrate.io
https://ittrue.tistory.com/195#google_vignette
[SQL] SQL과 NoSQL의 차이 (관계형 데이터베이스 vs 비관계형 데이터베이스)
SQL vs NoSQL 데이터베이스는 크게 관계형 데이터베이스와 비관계형 데이터베이스로 구분한다. 관계형 데이터베이스는 SQL을 기반으로 하고, 비관계형 데이터베이스는 NoSQL로 데이터를 다룬다. SQL
ittrue.tistory.com
https://siyoon210.tistory.com/130
SQL vs NoSQL (MySQL vs. MongoDB)
※이 포스팅은 academind의 SQL vs. NoSQL을 번역한 포스팅입니다. [개요]웹 애플리케이션 개발을 위한 첫 걸음을 내딛은 이후에 한가지 선택사항을 마주하게 됩니다. MySQL와 같은 SQL을 사용할 것인가?
siyoon210.tistory.com
https://velog.io/@octo__/SQL-vs-NoSQL
SQL vs NoSQL
데이터 베이스란 데이터의 모음을 말한다.
velog.io