이 글의 정보들은
데이터베이스 개론
과면접을 위한 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를 사용하고 있다.- 참고) - DB-Engines Ranking
-
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
는 기업의 인사, 회계 자료와 같이 일관성이 중요하고 조인과 같이 복잡한 질의 처리가 필요한 정형화된 데이터를 관리하는 용도일 때 더 적합하다. -
NoSQL
은 SNS를 통해 양산되는 이미지와 텍스트 데이터, CCTV를 통해 촬영되는 영상들, 센싱 데이터와 같이 빠른 속도로 엄청난 양이 생성되지만 수정보다는 삽입 연산 위주의 데이터를 저장하고 관리하는 용도일 때 더 적합하다. -
다음은 관계 데이터베이스와 NoSQL을 몇 가지 측면에서 간단히 비교한 것이다.
구분 | RDB | NoSQL |
---|---|---|
처리 데이터 | 정형 데이터 | 정형 데이터, 비정형 데이터 |
대용량 데이터 | 대용량 처리 시 성능 저하 | 대용량 데이터 처리 지원 |
스키마 | 미리 정해진 스키마가 존재 | 스키마가 없거나 변경이 자유로움 |
트랜잭션 | 트랜잭션을 통해 일관성 유지를 보장함 | 트랜잭션을 지원하지 않아 일관성 유지를 보장하기 어려움 |
검색 기능 | 조인 등의 복잡한 검색 기능 제공 | 단순한 데이터 검색 기능 제공 |
확장성 | 클러스터 환경에 적합하지 않음 | 클러스터 환경에 적합함 |
라이선스 | 고가의 라이선스 비용 | 오픈소스 |
대표적 사례 | MySQL, PostgreSQL, Oracle, Microsoft SQL Server, MariaDB | MongoDB, Redis |
예상 질문
-
RDB의 특징은 무엇인가요?
-
NoSQL이 생겨난 이유와 특징에 대해 설명해 주세요.
-
RDB, NoSQL 비교해서 설명해 주세요.