devFancy BE Developer

[DB] RDB와 NoSQL

2023-02-12
devFancy

이 글의 정보들은 데이터베이스 개론면접을 위한 CS 전공지식 노트 교재를 공부하면서 정리한 내용을 토대로 작성하였습니다.

RDB

  • RDB는 키(key)와 값(value)들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터베이스이다.

  • 관계 데이터베이스 모델의 주요 이점은 직관적인 데이터 표현 방법을 제공하고 관련 데이터 포인트에 쉽게 접근할 수 있다는 점이다.

  • 관계 데이터베이스를 사용하면 데이터를 관리하고 저장할 때 다음과 같은 여러 가지 장점이 있다.

  • RDB의 장점

    • [1] 정형화된 데이터를 저장하기 때문에 데이터의 형태와 크기를 미리 정하고 테이블 단위로 구분하여 데이터를 저장할 수 있다.

    • [2] 트랜잭션을 통해 ACID (원자성, 일관성, 격리성, 지속성)를 보증하여 안정적인 데이터 관리가 가능하다.

    • [3] 조인을 포함해 복잡한 조건을 포함하는 데이터 검색이 가능하다. (복잡한 질의 처리 가능)

    • [4] 데이터베이스 정규화 : 관계 데이터베이스는 데이터 중복성을 줄이고 데이터 무결성을 개선하는 정규화라는 설계 기법을 사용한다.

RDBMS

  • RDBMS란 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스를 가리키며 SQL이라는 언어를 써서 조작한다.

  • RDBMS 종류에는 MySQL, PostgreSQL, Oracle, Microsoft SQL Server, MariaDB 등이 있다.

  • 현재 기준(2023.02.13) 가장 인기있는 10가지 DBMS는 다음과 같다.

  • 관계 데이터베이스의 경우 표준 SQL은 지키기는 하지만, 각각의 제품에 특화시킨 SQL을 사용한다.

    • 예를 들어 Oracle의 경우 PL/SQL 이라고 하며 SQL Server에서는 T-SQL, MySQL은 SQL을 사용한다.

MySQL

  • MySQL 은 대부분의 OS(운영체제)와 호환되며 현재 2위로 많이 사용하는 데이터베이스 관리 시스템이며 메타, 트위터 등 많은 기업에서 MySQL를 사용하고 있다.

  • C, C++로 만들어졌으며 MyISAM 인덱스 압축 기술, B-tree 기반의 인덱스, Thread 기반의 메모리 할당 시스템, 매우 빠른 조인, 최대 64개의 인덱스를 제공한다.

  • 대용량 데이터베이스를 위해 설계되어 있고 롤백, 커밋, 이중 암호 지원 보안등의 기능을 제공하며 많은 서비스에서 사용한다.

  • MySQL의 스토리지 엔진 아키텍쳐는 다음과 같다.

  • 데이터베이스의 심장과도 같은 역할을 하는 곳이 바로 스토리지 엔진인데, 모듈식 아키텍쳐로 쉽게 스토리지 엔진을 바꿀 수 있으며, 데이터 웨어하우징, 트랜잭션 처리, 고가용성 처리에 강점을 두고 있다.

  • 스토리지 엔진 위에는 커넥터 API서비스 계층을 통해 MySQL 데이터베이스와 쉽게 상호 작용할 수 있다.

  • 또한, MySQL은 쿼리 캐시를 지원해서 입력된 쿼리 문에 대한 전체 결과 집합을 저장하기 때문에 사용자가 작성한 쿼리가 캐시에 있는 쿼리와 동일하면 서버는 단순히 구문 분석, 최적화 및 실행을 건너뛰고 캐시의 출력만 표시한다.

  • 하지만 MySQL에는 단점들이 있다.

    • 복잡한 쿼리를 사용할 때에는 성능 저하를 일으킨다.

    • 트랜잭션 지원이 완벽하지 않다.

    • 사용자정의 함수의 사용이 쉽지 않고 유연하지 않는다.

PostgreSQL

  • PostgreSQL 역시 개발자들이 선호하는 데이터베이스 기술로 널리 인정받고 있다.(세계 4위)

  • PostgreSQL 은 수년간 압도적인 성장 속도를 보여주며 3위와의 격차를 좁혀나가고 있다.

  • PostgreSQL의 특장점은 다음과 같다.

    • [1] 라이선스에 대한 비용 문제가 전혀 없다. - BSD 라이선스이며, 라이선스의 가장 큰 특징은 소스를 변경하고 그 소스를 숨긴 채 재배포 해도 법적으로 문제가 없다는 점이다.

    • [2] 오래된 오픈소스의 안정성 - 매우 가볍게 돌아가는 데이터베이스지만, 대용량 데이터의 처리에도 큰 문제점이 발견되지 않았고, 표준SQL 잘 따르고있다.

    • [3] 여전히 발전중인 데이터베이스 - PostgreSQL은 생각보다 빠른 속도로 업데이트를 지속하고 있다.

    • [4] 장점이자 단점인 독창적인 자료형 및 문법 - 장애 시 참고자료로 국내자료에서 쉽게 찾아볼 수 없다. ostgreSQL의 최근 버젼들이 오류메시지를 한글화해서 보여주면서, 한글 오류를 해외 레퍼런스에서 검색하는데 있어 많은 어려움을 겪기도 했다.

Oracle

  • 미국의 오라클 회사에서 제작한 세계 점유율 1위 데이터베이스 관리 시스템이며 현재 유닉스 체제에서 가장 많이 사용되는 DBMS이다.

  • 오라클의 장점은 다음과 같다.

    • 관리 시스템 : 멀티플 데이터베이스 튜닝이 가능하고 다수의 사용자가 동시에 접근이 가능하다.

    • 변화 관리 : 변경 plan을 작성하고 실제 구현하기 전에 변경 사항의 효과를 볼 수 있다. 또한 생산 시스템을 방해하지 않는다.

    • 경고 : 오류가 발생하면 설정되어 있는 계정 및 이메일로 연락이 온다. 경고는 예정된 가종 정지 시간 동안 차단될 수 있다.

    • 분산 처리: DBMS 실행 컴퓨터, 서버 역할 컴퓨터, DB 응용 프로그램 실행 컴퓨터 각각 다르게 분산처리가 가능하다.

    • 용량과 처리 : 다른 데이터베이스보다 고성능의 트랜잭션을 처리한다. 그리고 비용을 최소화하기 위해 테이블과 인덱스를 분석한다.

  • 오라클의 단점은 다음과 같다.

    • 비용적인 부담이 있다.

    • 기능이 많기 때문에 초보자가 사용하기 어려움이 있다.

    • 높은 지원의 하드웨어 사양이 필요하다.

  • 대체적으로 돈이 적거나 중소기업들은 MySQL을 선호하고, 충분한 예산과 복잡한 비즈니스 요구를 수행하는 큰 프로젝트를 주로 수행하는 대기업은 Oracle을 선호한다.

NoSQL

  • NoSQL(Not only SQL)이라는 슬로건에서 생겨난 데이터베이스이다.

왜 NoSQL이 생겼을까?

  • 웹이 기하급수적으로 성장하면서, 이미지, 동영상 같은 멀티미디어 데이터뿐 아니라, SNS를 통해 작성되는 자유로운 형태의 텍스트와 로그 기록같은 비정형 데이터가 빠른 속도로 대량 생산되고 있다.

  • 이런 환경에서 관계 데이터베이스의 장점을 유지하면 엄청나게 많은 비용이 든다.

  • 단일 컴퓨터 환경에서 주로 사용되는 관계 데이터베이스는 여러 컴퓨터가 연결되어 하나의 시스템을 구성하는 클러스터 환경에서 효율적으로 동작하도록 설계되지 않았다는 문제점도 지니고 있다.

  • 이러한 웹에서 대량의 비정형 데이터의 저장과 처리를 위해 관계 데이터베이스를 대신할 새로운 대안으로 제시한 것이 NoSQL이다.

  • 실제로 소셜 네트워크 서비스를 제공하는 기업들을 중심으로 NoSQL 관련 기술이 발전해왔다.

NoSQL 특징

  • NoSQL은 빠른 속도로 생성되는 대량의 비정형 데이터를 저장하고 처리하기 위해 ACID를 위한 트랜잭션 기능을 제공하지 않는 대신, 저렴한 비용으로 여러 대의 컴퓨터에 데이터를 분산,저장,처리하는 것이 가능한 데이터베이스다.

  • 더 융통성 있는 데이터 모델을 사용하고 스키마 없이 동작하기 때문에 데이터 구조를 미리 정의할 필요가 없고, 수시로 그 구조를 바꿀 수 있어서 비정형 데이터를 저장하기에 적합하여 대부분 오픈 소스로 제공된다.

  • 이처럼 NoSQL은 엄청난 속도로 대량 생산되는 빅데이터를 처리하기 위해, 관계 데이터 모델을 고집하지 않고 미리 정의된 스키마를 사용하지 않는 대신 클러스터 환경에 맞는 데이터베이스를 만들기 위해 노력해온 결과물이라 할 수 있다.

  • NoSQL을 관계 데이터베이스의 경쟁자로 볼 필요는 없다. 관계 데이터베이스와 NoSQL의 사용 목적이 다르기 때문에 NoSQL이 관계 데이터베이스를 완전히 대체하기는 어렵다.

  • 관계 데이터베이스는 트랜잭션을 통해 일관성을 유지하고 외래키로 테이블 간의 관계를 표현함으로써 조인과 같은 복잡한 질의를 처리할 수 있지만 빠른 속도로 증가하는 대량의 비정형 데이터를 저장하기에는 확장성 측면에서 비효율적이다.

  • NoSQL은 트랜잭션 기능을 제공하지 않고 정해진 스키마도 없기 때문에 자유롭게 구조를 바꾸며 대량의 비정형 데이터를 빠르게 저장하고 처리할 수 있다. 하지만 데이터 마이닝과 같은 별도의 분석 기술을 적용해 숨겨진 의미를 찾아내야 한다.

  • NoSQL 종류에는 대표적으로 MongoDB, Redis 등이 있다.

MongoDB

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

  • 확장성이 뛰어나며 빅데이터를 저장할 때 성능이 좋고 고가용성과 샤딩, 레플리카셋을 지원한다.

  • 또한 스키마를 정해 놓지 않고 데이터를 삽입할 수 있기 때문에 다양한 도메인의 데이터베이스를 기반으로 분석하거나 로깅 등을 구현할 때 강점을 보인다.

  • 그리고 MongoDB는 도규먼트를 생성할 때마다 다른 컬렉션에서 중복된 값을 지니기 힘든 유니크한 값인 ObjectID가 생성된다.

    • 이는 기본키로 유닉스 시간 기반의 타임스탬프(4바이트), 랜덤 값(5바이트), 카운터(3바이트)로 이루어져 있다.

Redis

  • Redis는 인메모리 데이터베이스자 키-값 데이터 모델 기반의 데이터베이스이다.

  • 기본적인 데이터 타입은 문자열(string)이며 최대 512MB까지 저장할 수 있다. 이외에도 Set, Hash 등을 지원한다.

  • Pub/Sub 기능을 통해 채팅 시스템, 다른 데이터베이스 앞단에 두어 사용하는 캐싱 계층, 단순한 키-값이 필요한 세션 정보 관리, 정렬된 Set 자료 구조를 이용한 실시간 순위표 서비스에 사용한다.

RDBMS vs NoSQL

  • 관계 데이터베이스와 NoSQL 중에 무엇을 선택해야 할지 고민한다면 자신이 데이터베이스를 사용하는 업무 환경과 역량에 가장 적합한 것을 고르면 된다고 조언하고 싶다.

  • 즉, 저장될 데이터의 형태와 처리목적에 더 적합한 것을 선택하면 된다.

  • RDBMS는 기업의 인사, 회계 자료와 같이 일관성이 중요하고 조인과 같이 복잡한 질의 처리가 필요한 정형화된 데이터를 관리하는 용도일 때 더 적합하다.

  • NoSQLSNS를 통해 양산되는 이미지와 텍스트 데이터, CCTV를 통해 촬영되는 영상들, 센싱 데이터와 같이 빠른 속도로 엄청난 양이 생성되지만 수정보다는 삽입 연산 위주의 데이터를 저장하고 관리하는 용도일 때 더 적합하다.

  • 다음은 관계 데이터베이스와 NoSQL을 몇 가지 측면에서 간단히 비교한 것이다.

구분 RDB NoSQL
처리 데이터 정형 데이터 정형 데이터, 비정형 데이터
대용량 데이터 대용량 처리 시 성능 저하 대용량 데이터 처리 지원
스키마 미리 정해진 스키마가 존재 스키마가 없거나 변경이 자유로움
트랜잭션 트랜잭션을 통해 일관성 유지를 보장함 트랜잭션을 지원하지 않아 일관성 유지를 보장하기 어려움
검색 기능 조인 등의 복잡한 검색 기능 제공 단순한 데이터 검색 기능 제공
확장성 클러스터 환경에 적합하지 않음 클러스터 환경에 적합함
라이선스 고가의 라이선스 비용 오픈소스
대표적 사례 MySQL, PostgreSQL, Oracle, Microsoft SQL Server, MariaDB MongoDB, Redis

예상 질문

  • RDB의 특징은 무엇인가요?

  • NoSQL이 생겨난 이유와 특징에 대해 설명해 주세요.

  • RDB, NoSQL 비교해서 설명해 주세요.

Reference


Comments

Index