🔎들어가기 전
관계형 데이터베이스 vs 비관계형 데이터베이스
SQL 기반 데이터베이스 vs. NoSQL 기반 데이터베이스
관계형 데이터베이스 vs. NoSQL
SQL vs. NoSQL
같은 듯 다른 말로 느껴지는데 각각 무슨 차이가 있는 걸까?
SQL이 뭐고 NoSQL이 뭔지는 알지만 위 비교문들이 각각 같은 의미인지 다른 의미인지에 대해
헷갈려서 확실하게 공부하기 위해 포스팅을 하게 되었다.
이번에는 관계형 데이터베이스와 비관계형 데이터베이스에 대해 중점적으로 포스팅해보려고 한다.
관계형 데이터베이스에서는 테이블의 구조와 데이터 타입 등을 사전에 정의
테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입 가능
테이블의 관계가 구조화된 데이터의 모음이기 때문에 구조화된 쿼리 언어를 사용할 수 있다.
여기서 구조화된 쿼리 언어가 즉 SQL이다
따라서 관계형 데이터베이스와 상호작용할 때 SQL 사용이 가능하다.
특정한 형식을 지키기 때문에, 데이터를 정확히 입력했다면 데이터를 사용 수월
또한, 관계형 데이터베이스에서는 테이블 간의 관계를 직관적으로 파악할 수 있다.
아래와 같다.
대답은 YES!
SQL은 관계형 데이터베이스 전용 프로그래밍 언어이다.
또한, RDBMS 프로그램에서 기본적인 SQL을 지원한다.
관계형 데이터베이스 시스템을 위해 만들어진 SQL이라는 언어를 사용 하므로 (문법은 조금씩 상이) 관계형 데이터베이스를 SQL이라고 부를 수 있다.
그래서 결론은 관계형 데이터베이스를 SQL이라고도 부른다.
비관계형 데이터베이스란 관계형 데이터베이스를 뺀 나머지 유형이라고 할 수 있다.
관계형 데이터베이스를 SQL이라고 하고 비관계형 데이터베이스는 NoSQL이라고 한다.
NoSql 약자에 대해
NoSQL, Not Only SQL, Non-Relational Operational Database SQL로 엇갈리는 의견들이 있다.
이 중 어느 것이 맞을까?
현재 Not Only SQL로 통용되고 있다.
이 말의 의미는 기존의 관계형 DBMS가 갖고있는 특성 뿐만 아니라 다른 특성들을 부가적으로 지원한다는 것이다.
실제로 Nosql을 관계형 DB처럼 쓸 수는 있긴 하다.
아무튼 NoSql의 약자는 No! SQL이 아니라
Not Only SQL 의 약자로, RDBMS와 같은 관계형 DB가 아닌 다른 형태의 데이터 저장 기술이다.
1. Key-Value 타입 Redis, Dynamo
2. 문서형(Document) 데이터베이스 MongoDB
3. Wide-Column Store 데이터베이스 Cassandra, HBase
관계형 데이터베이스는 SQL을 이용해서 데이터를 테이블에 저장한다.
또한 관계를 통해 각 데이터를 중복없이 한번만 저장할 수 있고, 따라서 데이터 무결성이 보장된다.
스키마를 미리 알고 계획해야하고 join 문이 많은 매우 복잡한 쿼리가 만들어질 수 있다.
즉, 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장해야 한다.
하지먄, NoSQL은 key-value, document, wide-column, graph 등의 방식으로 저장한다.
스키마가 없기 때문에 유연성이 높고, 저장된 데이터를 언제든지 조정하고 새로운 필드를 부담없이 추가할 수 있다.
또한, 애플리케이션에 필요한 형식으로 저장되고, 이렇게 하면 당연히 데이터를 가져오는 속도도 빨라진다.
대신 각 데이터에 대한 중복이 될 수 있어서 어떤 데이터가 수정되어야한다면 관련 데이터를 모두 각 컬렉션에 들어가서 확인해서 수정해야 하는 불편함이 있다.
SQL 기반의 관계형 데이터베이스는 수직적으로 확장이 가능하다.
NoSQL로 구성된 데이터베이스는 수평적으로 확장한다.
대답은 '둘 다 상황에 따라 다르다'!
관계형, 비관계형 데이터베이스를 모두 사용하여 서비스에 맞게 설계하는 것이 베스트이다.
NoSQL 기반의 비관계형 데이터베이스가 확장성이나 속도면에서 더 뛰어나다.
테이블끼리 따로 조인하지 않아도 데이터를 모두 가져올 수 있기 때문에 ?
그러나 고차원으로 구조화된 SQL 기반의 데이터베이스가 더 좋은 성능을 보여주는 서비스도 있다.
따라서 정답은 없다. 여러 사용 사례를 살펴보고 적절한 데이터베이스를 선택하는 것이 중요하다.
그럼 각각의 사례에 맞는 적절한 데이터 베이스는 어떻게 선택하지?
데이터베이스의 ACID 성질을 준수
데이터가 구조적이고 일관적인 경우
소프트웨어 개발에 정형화 되지 않은 많은 양의 데이터가 필요한 경우, NoSQL을 적용하는 것이 더 효율적일 수 있다.
대부분의 NoSQL 데이터베이스는 저장할 수 있는 데이터의 유형에 제한이 없기 때문에 필요에 따라, 언제든지 데이터의 새 유형을 추가할 수 있다.
정확한 데이터 요구사항을 알 수 없거나 관계를 맺고 있는 데이터가 자주 변경(수정)되는 경우
읽기(read)처리를 자주하지만, 데이터를 자주 변경하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 수정 할 필요가 없는 경우)
데이터베이스를 수평으로 확장해야 하는 경우 ( 즉, 막대한 양의 데이터를 다뤄야 하는 경우, 읽기/쓰기 처리량이 큰 경우)
관계형 데이터베이스 와 메모리 데이터 베이스는 어떠한 차이점이 있나요?
또한 둘의 쓰임새는 어떻게 다른가요?
관계형 데이터베이스중 각 강점들을 알려주실수 있나요?