Computer Science/DataBase

[DB] DataBase와 SQL VS. NoSQL

검은 까마귀 2024. 2. 19. 11:35

# DataBase

먼저, 데이터베이스의 정의가 무엇인지 알아보겠다.

여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합을 의미한다. 데이터베이스 관리 시스템(DBMS)를 통해 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다.

 

일반적으로 미들웨어를 통해서 관리된다.

※ 미들웨어(Middleware)

간단하게 설명하면, OS와 application 사이에서 실행되는 응용프로그램 사이에 존재하게 되며 분산 컴퓨터 환경(client와 server)에서 동작을 한다. 이는 컴퓨터와 컴퓨터간의 연결을 안전하고 용이하게 해주게된다. 

다시말해, 서로 다른 기기의 하드웨어나 프로토콜, 통신환경 등을 연결하게된다. 그게 우리가 아는 WAS, DBMS, Web Server 등등 이 있다.

나중에 3tier나 아키텍쳐 구조에 대해서 추가로 포스팅을 진행하겠다.

 

DB자체로는 거의 아무것도 못한다. 우리가 엑셀을 사용할때를 생각해보면 된다. 많은 정보가 있을때 엑셀로 정리를 해야만 그 정보들이 가치가 있는 데이터가된다.

 

마찬가지로 위에서 설명한 데이터베이스 관리 시스템 (DBMS)가 엑셀과 같은 역할을 한다. 자주 사용하는 DBMS중에는 RDBMS(관계형데이터베이스)가 있다. 그리고 관계형데이터베이스 관리시스템과 소통하기 위해  SQL(Sturctur Query Language)가 있다. 그 이외의 것들은 NoSQL(Not Only SQL)이라고 불린다.

 

데이터베이스의 보안 3요소는 꼭 필수적으로 알고 있어야한다.

  • 무결성
    • DB를 사용하기위해서는 오류가 없어야하며, 추가,갱신, 삭제로 오류가 발생하면 안된다.
  • 가용성
    • 권한을 가진 사람만 DB에 접근이 가능해야한다. 반대로 말해도 마찬가지다. 권한이 없으면 DB에 접근하면 안된다.
  • 기밀성
    • 외부 위협으로부터 자료의 기밀을 보호해야한다.

# RDBMS와 SQL

많은 서비스에서 관계형 데이터베이스가 아닌 것들도 사용하지만, 역시나 관계형데이터베이스가 지배적이다. 관계형 데이터베이스는 표를 생각하면된다. Row와 Colum이라는 표형태로 저장한다. 이를 테이블 이라고 부른다. 또한, Schema도 있다. 테이블을 디자인하기위한 청사진이라고 할 수 있다.

 

  1. Column
    • 유일한 이름을 갖고 있고, 자신만의 Type을 가질 수 있다.
    • field, attribute라고 불립니다.
  2. Row
    • 행은 관계된 데이터의 묶음이다.
    • 모든 행은 같은 수의 열을 가진다.
    • 튜플, 레코드라고 부른다.
  3. Value
    • Row, Column에 가지고 있는 값
    • Column에 해당되는 타입
  4. Key
    • Primary Key등등 (추가 포스팅 예정)
  5. Relationship
    • 1:1 관계
    • 1:M 관계
    • N:M 관계

 

이렇게 RDMS에 대해서 대략적으로 알아보았다. 디테일한건 다 나누어서 포스팅을 하겠다.

 

# NoSQL

SQL을 사용하지 않는 모든것을 NoSQL이라고 부른다. SQL 빼고 그외것. 그래서 너무 저장방식이 동일하지 않고 다양하다. RDBMS가 아닌 모든것이 아니라는 점을 알고 있어야한다.

 

아직은 따로 정확히 정의할 수 있는건 없다. 개발자는 언제쓰는지만 알면되니깐... 그리고 SQL인 관계형 DB와 다르게 대게 오픈소스로 구성이 되어있다는 것이다.(그래서 관계형 데이터베이스가 지배적일지도 모른다. 대게 솔루션을 구매해서 사용하니깐...)

# 특징 및 종류

DB에서 가장 중요한것은 데이터의 일관성(Consistency)이다. 데이터베이스의 정의된 모든 조건에 맞게 데이터 값이 변경됨을 의미하게된다. 하지만 NoSQL진영에서 일관성이 절대적인 요소가 아님을 주장하며, 근거로는 다수가 읽고 쓰는 상황에서의 성능 향상, 분산환경에서 노드들이 잘 동작하지만 시스템의 일부가 고장나면 DB를 사용할 수 없는 문제를 해결을 제시했다.

 

대게 인터넷환경을 사용하는 사용자수가 늘어남에 따라 대규모 트래픽을 처리해야할 일들이 생겼고, 시스템 마비가 아주 치명적으로 동작하기 때문에 위와 같은 주장과 그에 따른 근거가 나왔다.

개발하는 것도 사실 비슷하다. 대게 메모리구조, 즉 우리가 코드 단에서 작성하는 데이터를 정리하는 것들을 생각해보면 테이블 구조와 많이 다르다. Map, vector, 객체를 사용해서 데이터를 정리하지만, 테이블 구조인 Row, Column만 봐도 그렇다. 이를 대체하기 위해서 ORM을 많이 사용하기도 한다. 하지만 NoSQL을 사용하지 않으면 ORM자체가 필요 없다.

 

 

크게는 4가지로 나눌 수 있는데. Key-Value, Document, Column-Family, Graph로 나누어져있다.

  • Key-Value
    • 수평적 확장이 용이
    • 쿼리 사용이 불가능하고 어플리케이션 단에만 처리가 가능하다.
    • 매우 속도가 빠르다.
    • Redis, AWS Dynamo DB가 있다. ➡️ Redis는 오픈소스다. 자주 사용한다.
  • Document
    • Key-Value의 상위 버전이라고 생각할 수도있다.
    • Key-Document의 형태로 저장된다.
    • Document는 객체와 비슷한 형태를 갖고 있다.
    • 하나의 단위로 취급하게 된다.
    • MongoDB, CouchDB, MarkLogic가 있다. ➡️한번 스프링에 붙여봐야겠다.
  • Column-Family
    • Key에 Key 값, Column-Family , Column-name이 들어가있다.
    • 즉, 군집화(클러스터링)이 쉽다는 것이다.
    • 초기 디자인이 중요하고 스키마를 변경하는 것이 어렵다.
    • Cassandra가 있다.
  • Graph모델
    • 위의 3개의 종류는 객체지향에 가까웠다면, 그래프는 관계형 모델에 가깝다.
    • node, relationship, Attribute 형태로 저장된다.
    • 객체와 관계를 그래프 형태로 표현한 것이다. 
    • 소셜 네트워킹에서 많이 사용, 연관된 데이터 추천 
    • Graph DB가 있다.

 

대충 개요?에 대해서 살펴보았다. 사실 수박 겉핥기도 아니라 꼭다리 만지기 랄까? RDBMS에 대해서 집중적으로 더 파볼 예정이다.

 

NoSQL도 실습 한번 해봐야겠다. 컨테이너로 띄워보기도 하고~ 

 

반응형

'Computer Science > DataBase' 카테고리의 다른 글

[DB] Anomaly(이상) & Normalization(정규화)  (0) 2024.02.23
[DB] Key의 종류  (0) 2024.02.21
[DB] 데이터 모델과 용어정리  (0) 2024.02.20