SQL
SQL은 구조화된 쿼리 언어 (Structured Query Language) 이다.
따라서 데이터베이스 자체를 나타내는 것이 아니라, 특정 유형의 데이터베이스와 상호 작용하는 데 사용하는 쿼리 언어.
SQL 을 사용하면 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 저장, 수정, 삭제 및 검색할 수 있다.
이러한 관계형 데이터베이스에는 두 가지 특징이 있다.
- 데이터는 엄격한 데이터 스키마(정해진 규칙)를 따라 데이터베이스 테이블에 저장된다.
데이터는 테이블에 레코드 형식으로 저장되며, 각 테이블에는 명확하게 정의된 구조(테이블에 들어갈 수 있는 데이터와 그렇지 않을 수 있는 데이터를 정의하는 필드의 집합)이 있다.
구조는 필드의 이름과 데이터 유형으로 정의된다. - 데이터는 관계를 통해서 연결된 여러 테이블에 분산된다.
SQL은 규칙을 통해 목적을 가진 테이블에 정보를 저장한다. 명확한 구조를 가지고 있기 때문에 데이터에 담긴 정보의 내용을 확인하기도 쉽다.
DDL(Data Definition Language) : 데이터 정의어
- DB 오브젝트를 생성, 삭제, 변경하는 역할. DB 설계 단계에서 주로 사용된다. CREATE, DROP, ALTER
DML(Data Manipulation Language) : 데이터 조작어
- DB를 조회, 삽입, 삭제, 변경하는 역할을 하며, 관리 목적의 쿼리문입니다. SELECT, INSERT, UPDATE
DCL (Data Control Language) : 데이터 제어어
- 사용자의 권한을 관리하는 역할을 합니다. GRANT, DENY, REVOKE
- DCL은 일반 개발자는 잘 사용하지 않으며 DBA가 주로 사용한다.
관계형 데이터 베이스의 장점과 단점
장점
- 데이터의 무결성을 보장한다
- 각 데이터는 중복 없이 한 번만 저장된다
- 고착화된 방식이기 때문에 개발 과정에서 별도의 교육이 많이 필요하지 않다.
- 데이터베이스를 추가하기 전에 유효성 검사를 통해 데이터 품질을 향상시킬 수 있다.
- VIEW를 이용한 보안 설정이 가능하기 때문에 허가를 받지 않은 사용자들로부터 데이터의 조회, 변경 및 삭제를 막을 수 있다.
- 관계형 데이터베이스들은 가튼 오픈소스를 공유하는 경우가 많기 때문에 다른 개발 환경에서도 쉽게 적응할 수 있다.
단점
- 관계를 맺고 있기 때문에 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다.
- JOIN이 많고 복잡한 쿼리가 만들어졌을 경우, 수정이 번거롭거나 불가능한 경우가 생긴다.
- 데이터베이스의 모델링이 개발 전에 완료되어야 하기 때문에 개발 속도를 더디게 만들 수 있다.
- 수편적 확장이 어렵고, 대체로 수직적 확장만 가능하기 때문에 데이터 처리량 성장에 한계가 있다.
- 가변성이 있는 데이터의 경우, 테이블에 저장하는 것이 쉽지 않다.
NoSQL
NoSQL은 SQL과 반대의 접근 방식을 가지고 있다.
기존 SQL과 핵심적인 부분에서 큰 차이점을 가지고 있다.
NoSQL은 다른 구조의 데이터를 같은 컬렉션(테이블)에 추가할 수 있다. SQL이 정해진 스키마를 따르지 않는다면 데이터를 추가할 수 없는 것과는 다르다. NoSQL은 특정 데이터 모델에 대해 특정 목적에 맞춰 구축되는 데이터베이스로서 현대적인 애플리케이션 구축을 위한 유연한 스키마를 갖추고 있다.
NoSQL은 테이블을 나누어 데이터를 저장하는 SQL과는 다르게 데이터를 동일한 컬렉션에 저장한다. JOIN을 통해 여러 컬렉션을 사용할 필요가 없다. 대신 컬렌션을 통해 데이터를 복제하여 각 컬렉션 일부에 속해있는 데이터를 정확하게 산출하도록 한다.
NoSQL 특징
- 관계형 모델을 사용하지 않으며 테이블 간 연결해서 조회할 수 있는 JOIN 기능이 없음
- 데이터 조회를 위해 직접 프로그래밍 하는 든의 비 SQL 인터페이스를 통한 데이터 접근
- 대부분 여러 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성
- 관계형 데이터베이스에서는 지원하는 데이터 처리 완결성(Transaction, ACID 지원)이 보장되지 않음
- 데이터의 스키마와 속성들을 다양하게 수용하고 동적으로 정의(Schemaless)
- 데이터베이스의 중단없는 서비스와 자동 복구 기능 지원
- 대다수 제품이 Open Source 로 제공
- 대다수의 제품이 고 확장성, 고가용성, 고성능 특징을 가짐
비관계형 데이터베이스의 장점과 단점
장점
- 데이터 모델링이 완료되기 이전에도 테스트 데이터의 조회가 가능하다
- 스키마가 없기 때문에 훨씬 더 유연하다. 언제든지 저장한 데이터를 조정할 수 있다.
- 다양한 가변성이 있는 데이터의 저장이 쉽다.
- 데이터가 애플리케이션이 필요로 하는 형식으로 저장되기 때문에 데이터를 읽어오는 속도가 빠르다
- 수직 및 수평적 확장이 모두 가능하므로 애플리케이션에서 발생하는 모든 읽기, 쓰기 요청의 처리가 가능하다.
단점
- 유연성 때문에 데이터 구조 결정이 어려울 수 있다.
- 문서 저장이 단위 요소 수준에서 세밀한 보안을 제공하지 않는다.
- 익숙하지 않은 방식이기 때문에 추가적인 교육을 필요로 하는 경우가 많다.
- NoSQL마다 쿼리 언어를 각기 다르게 사용하는 경우가 많아 이식성이 낮다.
- 데이터베이스의 컬렉션이 다양할 경우, 수정할 때에 모든 컬렉션의 데이터를 수정해야 한다.
관계형과 비관계형 특성에 따른 선택
SQL은
관계를 맺고 있는 데이터가 변경되지 않고, 명확한 스키마가 사용자와 데이터에게 중요한 경우
NoSQL은
정확한 데이터 구조를 알 수 없거나 변경, 확장될 수 있으며, Read 처리를 자주 하지만 데이터를 자주 변경할 필요는 없는 경우, 막대한 양의 데이터를 다뤄야 하여 수평적 확장이 필요한 경우에