일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 개발자
- Java
- AWS
- 비전공자
- CS지식
- 코딩테스트
- hELLO 스킨
- 알고리즘
- 개발공부
- 14510 나무 높이
- mac 코드 블럭
- 딩코딩코
- 백준
- BOJ
- HTTP
- 문자열
- 빈 라인
- 인터럽트핸들러
- Roy Fielding
- 백엔드 면접지식
- it세계의 괴물들
- LAMBDA
- 파이썬
- 자바
- 그림자 문제
- transiant
- 카카오톡API
- CPU의 구성요소
- 백엔드
- sw적성진단
- Today
- Total
아직은 NULL NULL 합니다
RDB와 NoSQL의 차이 본문
서론
안녕하세요. is낫널입니다.
이번에 이번주를 마지막으로 CS 면접스터디를 마무리하게 되었어요.
스터디를 하다가 느낀 점이 CS 기초지식이 많이 부족하다는 것이었습니다.
꼬리질문을 받아도, 기초지식을 공부하느라 깊게 공부하지 못했다는 사실을 알게 되었거든요..😅
그래서 지금 제게 필요한 것은 CS 기초지식을 탄탄하게 먼저 쌓는 거예요.
면접스터디에서 다들 좋은 분이셔서 동기부여도 많이 받고, 자극을 꽤나 크게 받게 되었어요.
모든 꼬리 질문에 다 대답을 잘하시더라고요.
그리하여, 면접스터디는 멈추게 되었지만 기초지식을 쌓는 데에 집중을 해볼까 합니다.
그래도 그러한 기초지식도 꾸준히 업로드할 예정입니다 ㅎㅎ 오늘도 봐주셔서 미리 감사합니다.
본론
해당 사진은 RDB와 NoSQL 의 대표적인 예시 사진입니다.
RDB(Relation DataBase) 란?
RDB는 풀어서, 관계형 데이터베이스 로 불립니다.
데이터베이스(DB)에서 가장 많이 사용되는 방식이 바로 RDB 방식입니다.
RDB는 위의 사진과 같이 열과 행으로 이루어진 테이블 구조로
엑셀 시트처럼 정해진 번호의 칸 안에 내용을 차곡차곡 쌓아 나가는 방식입니다.
이렇게 열과 행으로 엄격한 테이블 구조로 구성되어 있기 때문에, 내용을 찾아 정렬하는 속도가 매우 빠른 편입니다.
RDB 방식을 사용한 서비스
이러한 관계형 데이터베이스를 사용하는 서비스는 ORACLE, MySQL, MS SQL, SQL Lite 등 다양하게 존재합니다.
ORACLE(오라클) 은 가장 대표적인 서비스로 규모가 크고, 대용량 설비에 적합하다는 평가를 받고 있습니다. 또한 UNIX 나 Linux, 윈도우 같은 여러 OS 에서 호환성이 좋은 편이기 때문에 오프라인에 규모가 큰 서버를 구축할 때 좋은 선택이 될 수 있습니다.
MySQL 은 오라클이 배포하는 오픈소스 기반의 RDB 입니다. 오픈소스 기반으로 만들어졌기에 다른 DB에 비해 비용이 저렴한 편입니다. 이 또한, 오라클에서 지원하는 서비스여서 여러 OS 에서 호환성이 좋은 편입니다.
MS SQL 은 마이크로소프트가 만든 RDB 로, 윈도우 OS 기반이기에 호환성이 좋은 편은 아닙니다. 그래서 여러 환경에서 안정적인 유지보수가 어려운 편입니다.
SQL Lite 는 서버가 아닌 응용프로그램을 넣어서 사용하는 비교적 가벼운 데이터베이스 입니다. 그래서 일반 디스크 파일을 직접 읽고 쓰는 것이 주요한 특징입니다. 대규모보단 중소규모의 데이터 처리에서 유용한 편입니다.
RDB의 특징
다음으로 RDB의 특징으로 장단점을 정리해 보았습니다.
- 전체 데이터의 구조를 의미하는 스키마가 존재합니다.
- 이처럼 명확한 데이터 구조를 가지고 있기 때문에, 데이터 무결성을 보장합니다.
그러나 컬럼을 추가하거나 삭제 등 값을 새로운 데이터를 추가하고 싶을 때 스키마의 변경이 필요하게 됩니다.
⇒ 이러한 특징은 데이터의 규모가 클수록 스키마의 변경은 부담되고, 위험을 초래할 수 있게 됩니다.
== > 그래서 RDB 는 유연한 확장성이 부족한 단점을 가지고 있습니다.
- 이처럼 명확한 데이터 구조를 가지고 있기 때문에, 데이터 무결성을 보장합니다.
- 데이터가 중복이 되지 않는 방향으로 설계를 하도록 가이드가 되어있습니다.
- 즉, 중복 제거를 위해 정규화를 진행하는 것이 보편적입니다.
⇒ 그래서 데이터 중복이 없어서 데이터 update에 용이합니다. - 하지만, 중복이 되지 않기 때문에 시스템이 커지면서 테이블을 많이 Join 하게 되면 CPU 를 많이 사용하게 됩니다.
무엇보다 응답시간이 느려지는 단점이 발생합니다.
⇒ 그래서 복잡한 Join 은 read 성능의 하락으로 이어집니다.
- 즉, 중복 제거를 위해 정규화를 진행하는 것이 보편적입니다.
- 수평적 확장(Scale Out)이 까다로워 수직적 확장(Scale Up)이 주로 사용됩니다.
- RDB는 트랜잭션의 ACID 원칙을 보장하기 위해 수평적 확장이 쉽지 않습니다.
- 또한, RDB는 multiple sever로 수평적 확장을 하게 되면 join을 하기 위해 상당히 복잡한 과정이 필요합니다.
⇒ 왜냐하면, 수평적 확장을 위해선 샤딩(sharding : 데이터가 수평적으로 분할되고 기기의 모음 전반에 걸쳐 분산되는 것)이 필요한데, ACID 원칙을 준수하면서 샤딩하는 것은 까다롭기 때문입니다.
* Scale Out, Scale Up 에 대한 개념정리
- Scale Out : 수평적 확장으로, 장비를 추가해서 확장하는 방식을 말합니다.
- 비슷한 사양의 서버를 추가로 연결해 처리할 수 있는 데이터 용량이 증가할 뿐 아니라,기존 서버의 부하를 분담해 성능 향상의 효과를 기대할 수 있습니다.
- Scale Up : 수직적 확장으로, 기존의 서버를 보다 높은 사양으로 업그레이드 하는 것을 말합니다.
- 예를 들어, 성능이나 용량 증강을 목적으로 하나의 서버에 디스크를 추가하거나, CPU 나 메모리를 업그레이드 시키는 것을 말합니다.
- Scale out 보다 관리비용이나 운영이슈가 적고, 사양만 올리면 돼서 비교적 쉽습니다.
이러한 특징을 가진 RDB 가 존재하는데 왜 NoSQL 이 탄생하게 됐는지 간단하게 살펴볼까요?
NoSQL의 탄생 배경
2000년대 초 중반에, 인터넷 보급이 활성화되면서 세계적으로 사람들이 인터넷을 많이 사용하기 시작하였습니다.
그러면서, high-throughput(높은 처리량)이 요구되었고, 뿐만 아니라, low-latency(빠른 응답시간)이 요구되기 시작했습니다.
게다가 다양한 사람들에게서 나오는 다양한 형태의 데이터를 발생하게 되면서 비정형 데이터가 증가하게 되었습니다.
그래서 이러한 니즈를 충족시키기 위해 탄생하게 된 것이 바로 NoSQL입니다.
NoSQL(Not Only SQL) 이란?
NoSQL 은 비관계형 데이터베이스를 의미합니다.
대량의 분산된 데이터를 저장하고 조회하는데 특화되었으며 스키마 없이 사용가능하거나 느슨한 스키마를 제공하는 방식입니다.
NoSQL이라고 해서 SQL을 사용하지 않는다,라는 의미가 아닌 SQL 만을 사용하지 않는 데이터베이스 관리시스템을 의미합니다.
위에서 설명한 RDB(관계형 데이터베이스) 의 한계를 극복하기 위해 여러 유형의 데이터베이스를 사용하고 있습니다.
NoSQL 방식을 이용한 서비스
먼저 NoSQL 방식을 이용한 서비스는 MongoDB, Redis, Elasticsearch,Neo4j 등 다양하게 존재합니다.
이 서비스에 대해 설명하기 전에 NoSQL에 대한 종류를 설명하겠습니다.
NoSQL 데이터베이스의 유형
앞서 탄생배경에서 소개했듯 NoSQL 이 탄생하게 된 계기 중 하나가 비정형 데이터의 증가였습니다.
이러한 비정형 데이터를 담아내기 위해 NoSQL 은 여러 가지 방식으로 데이터를 구성하기 위해 여러 유형의 데이터베이스를 사용합니다.
- Key-Value 저장소
이 유형은 일반적으로 NoSQL 데이터베이스 중 가장 단순한 형태로 간주됩니다.
스키마가 없는 해당 유형은 Key-Value(키-값) 쌍으로 구성된 사전으로 조직화되며, 각 항목은 키와 값을 갖고 있습니다.
키와 값이 하나의 묶음으로 저장되는 구조로 단순한 구조여서 속도가 빠르며 분산 저장 시 용이합니다.
해당 유형의 대표적인 서비스로는 Redis 가 있습니다.
- Document 저장소
이름에서 알 수 있듯이 데이터를 문서로 저장하는 유형입니다.
이 유형도 스키마가 없으며, 계층적 트리 데이터 방식인 XML, JSON, BSON으로 저장이 됩니다.
데이터를 여러 서버에 분산 저장이 가능하고, 복제와 회복이 가능한 형태여서 장애가 발생하더라도 대응에 유리합니다.
해당 유형의 대표적인 서비스로는 MongoDB, Elasticsearch 가 있습니다.
- Graph 저장소
이 데이터베이스 유형은 일반적으로 지식 그래프의 데이터를 보관합니다.
데이터 요소는 노드, 엣지, 속성으로 저장됩니다.
데이터를 노드로 표현하며, 노드 사이의 관계를 엣지로 표현하고 있습니다.
RDBMS 보다 Performance 가 좋고 유연하며 유지보수에 용이한 것이 특징입니다.
그래프 데이터베이스는 그래프 내 요소들 간의 연결 네트워크를 저장하고 관리하는 데 사용되고 있습니다.
해당 유형의 대표적인 서비스로는 Neo4j 가 있습니다.
이뿐만 아니라, 정보를 컬럼에 저장하는 Wide-Column 유형과 디스크가 아닌 메인 메모리에 보관되는 디스크 기반의 In-Memory 유형도 존재합니다. 하지만 오늘은 RDB 와 NoSQL 의 차이에 대해 설명하기 위해 글을 쓰고 있기 때문에 대표적으로 3가지만 설명하도록 하겠습니다.
NoSQL 의 특징
- Json Doument / key-value / 그래프 등 여러 유형의 데이터베이스 구조를 사용합니다.
- 그렇기 때문에 유연하고 자유로운 데이터 구조를 가지고 있습니다.
즉, 언제든지 저장된 데이터를 조정하고 새로운 '필드'를 추가할 수 있습니다.
하지만 그만큼 자유롭기 때문에 application 레벨에서 스키마 관리를 하여 데이터를 읽어오는 속도가 빨라지지만,
개발자들이 각 컬렉션 별로 어떤 데이터가 들어가는지 관리해야 합니다.
⇒ RDB 는 RDBMS 에서 관리합니다.
- 그렇기 때문에 유연하고 자유로운 데이터 구조를 가지고 있습니다.
- NoSQL 은 Join을 회피하기 위해 중복을 허용합니다.
- join 문이 적어지면서 성능이 저하될 염려를 하지 않아도 되는 장점이 있으나,
application 레벨에서 중복된 데이터들이 모두 최신 데이터를 유지할 수 있도록 이 또한 개발자들이 관리해줘야 합니다.
즉, 데이터가 여러 컬렉션에 중복되어 있기 때문에,
수정(Update)을 해야 하는 경우 모든 컬렉션에서 수행해줘야 하기 때문입니다.
- join 문이 적어지면서 성능이 저하될 염려를 하지 않아도 되는 장점이 있으나,
- 수평적 확장(Scale out) 이 용이합니다.
- 서버 여러대로 하나의 클러스터를 구성하여 사용하는 방식입니다.
- ACID 원칙을 일부 포기하고 high-throughput(높은 처리량), low-latency(빠른 응답시간)를 추구합니다.
- ACID 원칙을 포기하기 때문에 금융시스템처럼 consistency 가 중요한 환경에서는 사용하기가 조심스럽습니다.
마무리
이렇게 RDB 와 NoSQL 의 특징을 비교하며, 장단점을 확인해 보았습니다.
장점과 단점을 비교해 보면서 적절한 방식을 사용해보면 될 것 같습니다.
원래 RDB에 대해선 알고 있었는데 NoSQL에 대해 배워보니 한번 어떤 식으로 사용하는지 배워보고 싶어 지네요.
특히 Elasticsearch 은 풀 텍스트 검색 엔진을 포함하는 문서기반의 데이터 베이스 라고 하는데
프로젝트 때 검색 기능을 맡았다 보니 한번 공부해보고 싶어 졌습니다. 어떻게 유용하게 사용될지 궁금하네요.

[참고 링크]
유튜브 쉬운코드 님 영상을 보고 공부하였고, 아래 링크를 참고하여 글을 작성하였습니다.
NoSQL 데이터베이스란? | IBM
"not only SQL", "non-SQL"으로도 불리는 NoSQL은 관계형 데이터베이스의 전통적인 구조 밖에서 데이터 저장 및 쿼리를 가능하게 하는 데이터베이스 설계 접근법입니다.
www.ibm.com