What is the diffrence between SQL and NoSQL?
SQL vs NoSQL 개념?
데이터베이스는 크게 관계형 데이터베이스와 비관계형 데이터베이스로 구분된다. 관계형 데이터베이스는 SQL을 기반으로 작성되고, 비관계형 데이터베이스는 NoSQL를 기반으로 한다.
① SQL
관계형 데이터베이스에서는 테이블의 구조, 데이터 타입등을 사전에 정의한다. 데이터를 구조화 시키기 위함이다. 테이블에 정의된 스키마에 유효한 데이터만 삽입이 가능하다. 관계형 데이터베이스는 행과 열로 구성된 테이블을 생성하고 열에는 속성에 대한 정보를, 행에는 열의 데이터에 맞는 데이터를 저장하게 된다.
구조화된 테이블을 통해 데이터를 저장하기 때문에 사용할 때 수월하게 사용이 가능하다. SQL을 활용해 필요한 데이터를 필터링할 수 있다. 관계형 데이터베이스에서는 테이블 간 관계를 직관적으로 확인할 수 있다. 관계형 데이터베이스의 대표적인 예는 MySQL, Oracle, SQLite, PostgreSQL, MariaDB등이 있다.
② NoSQL
NoSQL은 말그대로 SQL문을 사용하지 않는 데이터베이스를 의미한다. 관계형 데이터베이스 처럼 데이터가 고정되어 있지 않은 데이터베이스다. NoSQL에서도 스키마를 사용한다. NoSQL에서는 데이터를 삽입할 때가 아닌 읽어올 때 스키마에 따라 데이터를 불러오게 된다. (schema on read) NoSQL에서는 데이터를 입력하는 방식에 따라 데이터를 읽어오는 방식이 변경된다.
NoSQL의 대표적인 예시로는 MongoDB, Casandra가 있다.
NoSQL의 특징
NoSQL 기반 비관계형 데이터베이스는 테이블 형식에 벗어나 데이터를 저장하는 양식이 자유롭다. NoSQL 데이터베이스는 크게 4가지의 데이터 구조를 가진다.
① 문서형(Document) 데이터베이스
데이터를 테이블 구조가 아니라 문서 처럼 저장하는 데이터베이스다. 많은 문서형 데이터베이스에서 JSON과 유사한 형식의 데이터를 문서화하여 저장하게 된다. 하나의 속성에 대한 데이터를 가지고있고, 컬렉션이라고 불리는 그룹으로 묶어 데이터를 관리하게 된다. 대표적인 문서형 데이터베이스에 MongoDB가 있다.
② Key-Value 타입 데이터베이스
속성을 Key-Value의 쌍으로 나타내는 데이터를 배열 형태로 저장한다. Key는 속성 이름을, Value는 속성에 연결된 데이터 값을 표시한다. 대표적인 Key-Value 타입 데이터베이스로 Redis, Dynamo가 있다.
③ Wide-Column 데이터베이스
데이터베이스의 열(Column)에 대한 데이터를 집중적으로 관리하는 데이터베이스다. 각 열에는 Key-Value 형식으로 데이터가 저장되며 컬럼 패밀리(Column Failmilies) 열의 집합체 단위로 데이터 처리가 가능하다.
하나의 행에 많은 열을 포함하고 있어 데이터 처리 유연성이 높은 편이다. 따라서 규모가 큰 데이터 분석에 자주 사용된다. 대표적인 wide-column 데이터베이스로는 Casandra, HBase가 있다.
④ 그래프(Graph) 데이터베이스
그래프 자료구조와 유사한 형식으로 데이터 간 관계를 구성하는 데이터베이스다. 노드(Node)에 속성별 데이터(Entities)를 저장한다. 각 노드간 관계는 선(Edge)료 표현된다. 대표적인 그래프 데이터베이스로는 Neo4J, InfiniteGraph가 있다.
SQL vs NoSQL 차이점
데이터베이스를 구축하는데 반드시 이걸 써야 한다는 개념은 없다. NoSQL 기반 비관계형 데이터베이스를 사용하는 경우 확장성과 속도가 빠르지만 SQL 기반 관계형 데이터베이스의 경우 고차원으로 구조화된 데이터베이스로 높은 안정성을 가질 수 있다. 두개의 데이터베이스는 명확한 차이점을 가지고 있기 때문에 적절한 데이터베이스를 선택할 수 있어야 한다.
① 스키마(Schema)
SQL을 활용하기 위해서는 고정된 스키마가 필요하다. 처리하고자 하는 데이터 속성별 열에 대한 정보가 미리 지정되어 있어야 한다. NoSQL은 관계형 데이터베이스에 비해 동적으로 스키마를 관리할 수 있다. 행을 추가할 때 즉시 새로운 열을 추가하고, 개별 속성에 대한 모든 열에 대한 데이터를 입력하지 않아도 된다.
스키마(Shema)란
데이터베이스 구조와 제약조건에 대한 명세를 기술한 것이다. 데이터베이스를 구성하는 데이터 객체, 객체의 질과 관계, 객체들이 가지는 데이터들의 관한 제약조건에 대한 정의를 총칭한다. 외부 스키마, 개념 스키마, 내부 스키마 3단계로 설계된다.
② 데이터 저장(Storage)
NoSQL은 key-value, wide-column, graph, document 형식으로 데이터를 저장한다. 반면 관계형 데이터베이스는 SQL을 통해 테이블에 데이터를 저장하게 된다. 미리 지정된 스키마를 반드시 사용한다.
③ 확장성(Scalability)
SQL 기반 관계형 데이터베이스는 수직적으로 확장된다. 여러 서버에 걸쳐 데이터베이스의 관계를 정의하고 사용할 수 있지만 구조가 복잡해지고 많은 시간이 소모된다. 관계형 데이터베이스는 구축된 하드웨어 성능을 많이 시용하기 때문에 메모리 사용량이 높아진다.
반면 NoSQL 기반 비관계형 데이터베이스는 수평적으로 확장한다. 저렴한 범용 하드웨어나 클라우드 기반 인스턴스에 데이터베이스를 호스팅할 수 있어 수직적인 확장보다 유지비용이 상대적으로 저렴해진다. NoSQL 데이터베이스를 위한 서버를 추가적으로 구축하면 많은 트래픽을 편리하게 처리할 수 있다. 클라우드 서비스 이용 확장이다.
④ 쿼리(Querying)
쿼리(Query)는 데이터베이스에서 필요한 데이터를 필터링 하기 위한 질의문이다. 관계형 데이터베이스에서는 스키마에 맞는 쿼리를 요청해야 한다. 따라서 SQL에 의존하게 된다.
NoSQL 기반 비관계형 데이터베이스에서는 쿼리가 데이터 그룹 자체를 조회하는것에 초점을 둔다. 따라서 구조화 되지 않은 UnQL(UnStructured Query Language)로도 데이터 요청이 가능해진다.
SQL 기반 관계형 데이터베이스 활용
① ACID 성질을 준수해야 하는 경우
데이터베이스에서 실행되는 트랜잭션에 의해 데이터의 상태가 변하는 과정에서 안정성을 보장하기 위한 성질이 ACID다. SQL 기반 관계형 데이터베이스에서는 데이터베이스와 상호 작용하는 방식을 사전에 정의하기 때문에 예외상황을 처리하고 데이터의 무결성을 보장하기 용이하다.
따라서 모든 전자 상거래 및 금융 서비스를 제공하는 소프트웨어에서는 ACID 성질을 준수하기 위해 SQL 기반 관계형 데이터베이스를 사용하게 된다.
② 데이터가 구조적/일관적인 경우
프로젝트의 규모가 많은 서버를 필요로 하지 않고 일관된 데이터를 사용하는 경우 일반적으로 관계형 데이터베이스를 사용한다. 이 경우 높은 트래픽을 지원하고 다양한 데이터 유형을 핸들링할 필요가 없기 때문이다.
NoSQL 기반 비관계형 데이터베이스 활용
① 데이터의 구조가 없는 대용량 데이터 핸들링
NoSQL 기반 비관계형 데이터베이스에서는 저장할 수 있는 데이터 유형에 제한이 없다. 따라서 언제든지 새로운 데이터 유형을 추가하고 사용할 수 있다. 정형화 되지 않은 대용량의 데이터가 필요한 경우 NoSQL 기반 비관계형 데이터베이스를 사용하는것이 일반적이다.
② 클라우드 컴퓨터 및 저장공간을 최대한 활용
데이터베이스 저장소를 구축할 때 클라우드 기반 저장소를 구축하면 저렴한 비용으로 솔루션을 사용할 수 있다. 빠른 배포 및 테스트를 진행하기 위한 소프트웨어에 활용되는 데이터베이스의 확장성이 중요한 경우 NoSQL이 답이 될 수 있다.
③ 데이터 업데이트가 빈번한 경우
별도의 스키마를 요구하지 않는 NoSQL의 경우 빠르게 소프트웨어 개발이 가능하다. 빠르게 프로토타입을 생성하고 시장의 피드백을 받기 위한 프로젝트에서 NoSQL이 답이 될 수 있다. SQL 기반 관계형 데이터베이스를 사용하는 경우 데이터베이스의 스키마를 업데이트 하기 위해서는 다운타임이 발생된다.
데이터 구조 업데이터가 빈번하게 발생하여 데이터베이스 서버를 오프라인으로 전환하여 데이터를 처리하는 진행시간인 다운타임을 줄이기 위해서는 관계형 데이터베이스 보다 NoSQL 기반 비관계형 데이터베이스가 답이 될 수 있다.
'Programming' 카테고리의 다른 글
[Database] Schema Query Design 관계형 데이터베이스 설계 방법 (0) | 2022.05.30 |
---|---|
[Database] Ubuntu 20.04 LTS MySQL 설치하기 (0) | 2022.05.30 |
[Database] 트랜잭션이란? (ACID 데이터베이스 속성) (0) | 2022.05.30 |
[Database] SQL이란? (0) | 2022.05.30 |
[Server] express req, res 속성, 메서드 종류 (0) | 2022.05.27 |
댓글