[DataBase] RDBMS vs Not Only SQL (NoSQL)

먹보·2023년 2월 1일
0

MUK_BO's DataBase

목록 보기
2/6

프로그래밍을 배우기 시작하면 언어와 프레임워크외에 필수로 배우게 되는 개념이 바로 데이터베이스이다.

오늘은 그 데이터 베이스에서도 우리가 사용하는 데이터베이스에는 어떤 것들이 있고 그런 것들이 어떤 특징을 갖고 있는지 알아보려고 한다. 또한 필자도 아직까지는 다양한 경험이 없어 어떨 때 MySQL을 사용하고 어떨 때 NoSQL을 사용하는지 이번 기회에 알아볼 예정이다.

✍ RDBMS (Relational DataBase Management System)

RDBMS, 관계형 데이터베이스란 데이터 간의 관계를 정의하여 관계형 방식을 적용하여 행과 열을 가지는 테이블 형식으로 저장하고 데이터를 SQL(Structured Query Language)란 구조화된 쿼리 언어를 사용하여 데이터를 삽입, 수정, 그리고 읽어 올 수 있다.

📝 RDBMS에는 무엇이 있을까?

필자는 다양한 RDBMS를 사용해 보지는 않았지만 주로 다뤄온 데이터베이스는 MySQL이며, 그외에는 MSSQL 그리고 PostreSQL을 잠깐 써보았기에 이번 시간에 한 번 각 각의 차이점을 알아보려고 한다.

그리고 DB-Engine의 통계에 따르면, 가장 인지도가 높은 RDBMS는 Oracle인데 아직 한 번도 접해보지를 않았다.

상기 자료는 DB-Engine에서 가져온 자료로 자체적으로 점수를 내어 순위를 보여준다.

✏️ MySQL (돌고래)

  • 장점
    - 뛰어난 호환성 : 다양한 OS 환영에서 사용이 가능하다.
    - 확장성 : MySQL은 소규모 프로젝트부터 대규모 프로젝트까지 다양한 규모의 프로젝트의 적용이 가능하다.
    - ACID 준수 : MySQL은 데이터베이스 트랜젝션의 4가지 원칙인 원자성, 일관성, 고립성, 지속성을 따른다.
    - 보안성 : MySQL은 민감한 정보를 보호하기 위해 독자적으로 암호화, 인증 기능과 같은 보안 관련 기능들을 제공한다.
    - 유연성 : 데이터를 저장하고 읽는데 있어 다양한 저장 엔진들을 사용하며 사용자가 직접 데이터 타입을 커스텀 할 수 있다.
    - 높은 성능 : 쿼리 성능이 뛰어나며 동시 요청에 대한 다량의 데이터를 관리할 수 있다(쿼리 캐시 지원).
    - 오픈소스 : 오픈소스 라이센스이기에, 누구나 사용 가능하며 수정 할 수 있다.
    - 모듈식 아키텍쳐로 인해 스토리지 엔진을 쉽게 변경 할 수 있다.
  • 단점
    - 제한된 확장성 : 위에서 확장성을 언급하기는 했지만 규모가 엄청나게 커지고 복잡해질 경우 추가적인 개발 툴가 전략이 필요하여 적합하지 않을 수도 있다.
    - 복잡한 트렌젝션 제어 : 복잡한 트렌젝션이 필요한 서비스에 적합하지 않을 수 있다.
    - Relatively Weak Full-text Searching : Full-text Searching (특정 데이터 찾기) 기능이 상대적으로 느리다.
    - 분석 기능 부족 : MySQL은 내장된 데이터 마이닝이나 분석 지원이 없기 때문에 데이터를 관리하는 기능은 다소 부족하다.
    - 오픈소스 기반으로 인한 커뮤니티 의존 : 오픈소스 기반이기에 커뮤니티에 의존하여 다른 RDBMS 서비스에 비해 버그 관리나 개발이 느려 질 수 있다.

✏️ MSSQL (Microsoft SQL Server)

	위에서 언급했었던 DB에 특징은 상세히 언급하지 않겠습니다.
    

  • 장점
    - 확장성
    - 보안성
    - MS 제품들과의 호환성 : MSSQL은 마이크로소프트(MS)에서 만든 제품 답게 다른 MS 제품들과 호환성이 뛰어나 MS 기술을 사용하고 있는 기업에서 사용하기 편하다.
    - 증진된 분석 기능 및 BI : MSSQL은 내장된 분석 및 BI 관련 기능들을 탑재하고 있어 데이터 인사이트가 용이하다.
    - MS 기업에서 만든 제품 : MS에서 만들었기에 신용도가 높으며 프로그램의 유지보수가 뛰어나다.
  • 단점
    - 비싼 가격 : 상대적으로 비용이 많이 든다
    - 약한 OS 호환성 : Window OS를 제외한 다른 OS에서는 호환성이 제한되어 있다.
    - 높은 진입 장벽 : 다른 RDBMS에 비해 아키텍쳐가 복잡하여 공부하는데 시간이 든다.
    - 다른 MS 제품들과의 호환성이 MS를 사용하지 않는 기업에게 부작용이 될 수 있다.
    - 성능 : 높은 트래픽 환경에서 제대로 작동하지 않을 수 있다.

✏️ PostgreSQL (코끼리)

  • 장점
    - 강력한 추가 기능 : 복잡한 어플에 적합한 다양한 데이터 타입, 저장 절차, 외래키와 같은 증진되 데이터베이스 기능들을 제공한다.
    - 쿼리 성능
    - ACID 준수
    - 뒤어난 호환성
    - 오픈소스
    - JSON을 이용해 데이터를 접근할 수 있다.
    - 디스크 조각이 차지하는 영역을 회수 할 수 있는 장치인 VACCUM이 큰 특징
  • 단점
    - 높은 진입 장벽
    - 오픈 소스와의 호환성은 높지만 Propreitary Technology(사유기술)과의 호환성은 떨어 질 수 있다.
    - 오픈소스 기반으로 인한 커뮤니티 의존
    - BI 기능 부족
    - 확장성에서 부족

✍ Not Only SQL (NoSQL)

쉽게 말해 SQL을 사용하지 않는 데이터베이스를 뜻하며 관계형 데이터베이스와는 다르게 다양한 모델 방식(Key-Value, graph, column-based model)을 채택하여 데이터를 저장하기 때문에 구조화 되지 않는 데이터를 다루는데 적합하다.

📝 NoSQL에는 무엇이 있을까?

NoSQL이라고 해서 처음에는 다 비슷한 것인 줄 알았지만 위에서도 언급하였듯이 각 각의 NoSQL은 모델 방식이 다르기 때문에 사용법이 달라지는 것 같다.

RDBMS와 마찬가지로 전부 다 알아볼 것은 아니고 대표적으로 사용되는 MongoDB와 Redis만 알아볼 것이다.

✏️ MongoDB (나뭇잎)

상기 자료는 DB-Engine에서 가져온 자료로 자체적으로 점수를 내어 순위를 보여준다.

MongoDB는 JSON을 통해 데이터에 접근 할 수 있고, Binary JSON 형태로 데이터가 저장되며 와이어드타이거 엔진이 기본 스토리지 엔진으로 장착된 키-값 데이터 모델에서 확장된 Document 기반의 데이터 베이스 입니다.

  • 장점
    - 유연성 : 데이터 마이그레이션 없이도 데이터의 구조를 쉽게 바꿀 수 있으며 다양한 데이터 형식을 저장하고 가져 올 수 있다.

    • 학장성 : 고가용성과 샤딩 그리고 레플리카셋을 지원하기에 Scale Out에 용이하다.
    • 뛰어난 성능 : 빅데이터를 저장하는데 용이하다.
    • 사용하기 쉽다.
  • 단점
    - 트렌젝션의 지속성 기능 부족 : 관계형 베이스와는 상대적으로 트렌젝션 기능이 부족하다.

    • Steep Learning Curve for SQL User : SQL을 지원하지 않는다
    • 인덱싱이 복잡하다 : Document 기반이기에 관계형 데이터베이스를 다뤄온 사람에게 접근이 어렵다.
    • 보안성이 떨어진다.

✏️ Redis


상기 자료는 DB-Engine에서 가져온 자료로 자체적으로 점수를 내어 순위를 보여준다.

Redis는 인메모리 데이터베이스이자 Key-Value 모델 기반의 데이터베이스이다.

  • 장점
    - 다양한 기능 제공 : PUB/SUB 기능을 활용한 채팅 시스템, 캐싱 계층, 세션 정보 관리, 실시간 순위표 서비스
    - 속도 : 인메모리 기반의 데이터베이스이다보니 데이터 접근 및 조회가 굉장히 빠르다
    - 유연성 : String, Hashes, Lists, Sets, 그리고 Sorted Sets까지 다양한 데이터 구조를 지원한다.
    - 확장성
    - 사용하기 쉽다
  • 단점
    - 제한된 메모리 : 512MB로 메모리가 한정적이기에 더 필요할 경우 서버를 여러개 운영해야 한다.
    - 단일 인스턴스 : 단일 인스턴스로 인해 Redis서버가 다운될 경우 데이터를 전부 잃게 된다.
    - 지속성 결핍 : 인메모리 방식이기에 디스크에 데이터가 저장되는 것이 아니라 서버가 다운될 경우 데이터 손실이 발생한다.
    - 보안성 취약

✍ MySQL vs NoSQL

기능RDBMSNoSQL
데이터 모델관계형 모델비관계형(Key-Value,Graph,Column)
구조테이블 및 스키마스키마가 없거나 동적인 스키마 관리
ACID 준수 여부준수사용하는 NoSQL마다 다름
쿼리 언어 지원지원사용하는 NoSQL마다 다름
사용되는 경우복잡한 트렌젝션이나 구조화된 데이터를 사용하는 서비스빅 데이터, 실시간 웹 서비스, 비구조화된 데이터
profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글