일개미 : 일상과 개발의 미학
RDBMS? NoSQL? DB의 세계 - (1)🧐 본문
🗃️ DB, 데이터베이스에 관한 이해
서버의 개발은 데이터베이스(Database = DB)와 아주 밀접하게 연관되어있다. 아마도 'DB없는 서버는 있을 수 없다' 해도 과언이 아닐정도로 말이다. 서버 내부의 비즈니스 로직(개발된 코드를 통해 문제 혹은 요청 등을 처리하는 과정)을 통해 데이터가 저장되는 장소가 바로 이 데이터베이스(줄여서 DB)라고 한다. 즉, '데이터의 집합'이라고 할 수 있다. 여기서 데이터란, 정보 단위의 모음을 말한다. 이는 문자가 될 수 도 숫자가 될 수도 있고, 미디어, 바이트 등 모두 데이터에 해당된다.
데이터베이스는 일상의 대부분에도 찾아볼 수 있다. 내가 주고받은 카카오톡 메세지, 선물한 내역, 인스타에 업로드한 사진, 좋아요한 게시물, 카페에서 주문한 음료 등의 정보들이 모두 각각의 데이터라고 할 수 있고 이는 데이터베이스에 기록되어 저장된다.
💾 DBMS
앞에서 말한 데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System의 약자)라 칭한다. 데이터들이 저장되는 장소가 있다면 그에 대한 관리가 필요할 것이고 그 얘기는 즉슨, 데이터는 사용되기도 하며 애플리케이션(응용프로그램, 웹서비스 등)과 공유되고 누군가는 접근이 가능하도록 관리되어진다 라고 할 수 있다. 또한 접근은 동시에도 가능해야 한다.
카카오톡의 주기능은 메세지를 주고받는 것으로 운영된다. 이는 카카오톡이라는 앱이 바로 DBMS라고 할 수 있으며, 카톡의 데이터베이스에는 대화방 내에서 주고받은 메세지들이 담겨있을 것이다. 그 메세지는 해당하는 채팅방 인원이라면 모두 확인할 수 있을 것이다. 그게 동시일지라도 말이다. 해당하는 인원들은 모두 각자의 스마트폰을 통해 접근이 가능하기 때문이다. 이러한 접근을 할 수 있도록 해주는 것이 DBMS의 주 역할이다.
DBMS는 주로 다음과 같이 분류된다.
1세대 | 2세대 | 3세대 | 4세대 | 5세대 |
파일 시스템 (File System) |
계층형 (Hierarchical) |
망형 (Network) |
관계형 (Relational) |
객체지향형 (Object-Oriented), 객체관계형 (Object-Relational) |
등이 다수 있지만, 현재는 그 중 관계형 DBMS인 RDBMS가 가장 많이 사용되어지고 있다. 오픈소스로, 많은 기업에서 활용되는 Oracle사의 MySQL도 RDBMS 중에 하나이다.
⛓️ 그렇다면 RDBMS 란?
데이터 저장 방식에 관해 자료를 찾다보면 앞서 언급한 RDBMS를 정말 많이 접할 수 있다. 또한 실무에서도 RDBMS를 다루는 역량을 요구하는 곳도 많이 볼 수 있다. 대체 RDBMS, 관계형이 뭐길래 주목받게 되었을까?
우선 RDBMS(Relational Database Management System의 약자)의 데이터베이스는 2차원의 테이블이라는 단위로 구성된다. 이 테이블은 하나이상의 열(column)과 행(row)으로 이루어져 있다. 여기서 테이블이 어떤 형태인지 모르겠다면 한글과 같은 프로그램에서 표를 생각하면 된다. 표를 바로 테이블이라고 한다. 테이블에서 열은 세로줄의 형태이고, 행은 가로줄의 형태이다.
RDBMS는 모든 데이터가 이처럼 테이블로 저장된다. 표의 형태로 열과 행으로 구성되어있다 라는 것을 이해했다면 RDBMS에 대해 반은 이해한 것이나 다름없다. 그렇다면 이를 왜 관계형이라고 할까? 데이터의 중복을 피하기 위해 '관계'를 이용하기 때문. 하나의 테이블에서 중복없이 한가지에 대한 데이터만을 관리하고 다른 테이블과의 관계를 정의하여 연관된 테이블끼리는 부정확한 데이터를 다룰 위험이 없다.
또한 표의 모양을 하고 있으므로 만들거나 이용하기도 비교적 쉽지만, 무엇보다 확장이 용이하다는 장점이 있다. 또한 열과 행의 속성(스키마를 이해하기 쉽게 표현한 말로 참고바람)을 통해 여러 데이터들을 정규화를 통해 중복성을 최소화하고 일관성있게 저장•관리할 수 있으며 데이터의 무결성을 높여준다. 이러한 장점으로 비즈니스 시스템에서 최적화되고 표준형으로 사용되고 있다.
다만 이는 속성(스키마 규격)에 반드시 맞춰야하고, 가변성이 잦은 데이터에 부적합한 형태이다. 관계성이 연결고리로 이어지게될 경우 복잡해질 가능성이 있다. 또한 연관관계를 지어줄 때 확장성이 제약될 수 있다. 이러한 단점들을 고려한 DBMS가 SQL의 반대인 바로 NoSQL (비관계형 데이터베이스)이다. 개발 분야에서도 DB를 크게 분류한다고 하면 가장 먼저 SQL과 NoSQL을 대비하여 언급할 것이다.
📚 NoSQL 이란?
NoSQL, 비관계형 데이터베이스란 관계형 데이터베이스에 반대되는 DBMS유형을 일컫는다. SQL이 No(non-SQL), 즉 RDBMS가 아닌 유형을 전부 NoSQL이라 한다. 주의할 점은 아예 데이터의 관계성을 띄워주는 것이 마냥 불가하다는 것은 아니다. 다만 RDBMS와 방식이 다르고 기본적으로 유형이 그렇다는 것이다.
이런 정의를 가진 NoSQL은 표준화 형식이 없기 때문에 그 형태도 다양하고, 그 중 운영할 서비스에 적합한 것으로 사용된다.
1. Key-Value 형
속성을 Key-Value(키-값)의 쌍으로 나타내는 데이터를 배열의 형태로 저장한다. 여기서 Key는 속성 이름을 뜻하고, Value는 속성에 맞는 데이터의 값을 말한다. 대표적으로는 Redis, Dynamo 등이 있다.
2. Document(문서) 형
말그대로 데이터를 문서처럼 저장하는 형태를 의미한다. 많은 문서형 데이터베이스에서 JSON 그 자체 혹은 그와 유사 형식의 데이터를 문서처럼 저장한다. 각 문서마다는 한 속성에 대한 데이터를 가지고 있고, Collection이라는 그룹으로 모아 관리된다. 대표적으로는 MongoDB 가 있다.
3. Wide-Column Store
열마다 키-값의 형태로 모아진 Collection의 구조를 가진다. 하나의 행은 다수의 열을 포함할 수 있고 이 다수의 열을 가리켜 column families(컬럼 패밀리)라고 하며 RDBMS의 테이블과 비슷해보이나 컬럼 패밀리에서의 열은 정의된 스키마를 엄격히 준수할 필요가 없고 유연성이 높다. 대표적으로는 Cassndra, HBase가 있다.
4. Graph형
마인드맵과 유사한 형태인 그래프 구조를 통해 데이터 간의 관계를 구성하는 DB이다. Node / Edge / Property 로 구성되며, 각 명칭은 다음을 의미한다.
• Node(노드) : 추적 대상이 되는 속성(혹은 구분 등), Entity
• Edge(엣지) : 노드 간의 관계를 표시하는 선이자 관계 그 자체
• Property(프로퍼티) : 노드나 엣지의 설명하는 정보
Node로 구분지어 데이터를 저장하고 Edge를 통한 관계성, Property를 통한 상세 정보를 파악할 수 있다. 대표적으로 Neo4J가 있고 Graph DB를 대중화시킨 우위를 점하는 DB중 하나이다.
🤔 그럼 무엇을 사용해야 좋은가?
DB유형을 선택하는 것에 있어서 좋고 나쁘고는 상대적이다. 특출나게 어느 서비스에서나 좋을 DB가 있다고한다면 아마 이렇게 여러 DB형태가 생겨나지 않았을거라 생각한다.
정답은 없으며, 다루게 될 데이터의 특징을 고려해 최적화된 DB유형을 선택하면 된다.
마지막으로 간략히만 요약하자면...
SQL
• 장점 : 데이터의 정규화(정의된 스키마)를 통해 중복성 최소화 및 데이터의 무결성 보장
• 단점 : 스키마의 계획 및 정의 필요(수정이 어려움), 관계성으로 인한 복잡한 쿼리의 발생 가능성과 일반적으로 수직적인 확장만 가능
► 데이터베이스의 ACID 성질을 필요로 하거나, 애플리케이션에 사용될 데이터가 구조적이고 일관적인 경우에 주로 사용된다.
* ACID는 Atomicity(원자성), Consistency(일관성), Isolation(격리성), Durability(지속성) 를 의미한다. 데이터베이스에서 실행되는 하나의 Transaction(트랜잭션)에 의한 상태의 변화를 수행하는 과정에서, 안전성을 보장하기 위해 필요한 성질들.
NoSQL
• 장점 : 스키마가 없어 비교적 높은 유연성(수정이 용이함), 애플리케이션이 요구하는 형식에 따라 저장되어 읽어들이는 속도 증가, 수직뿐만 아니라 수평 확장도 가능
• 단점 : 유연성으로 인해 데이터 구조 결정의 어려울 수 있음, 데이터 중복의 발생 가능성 및 중복된 데이터 변경시 모든 컬렉션에서 수정이 필요
► 데이터의 구조가 거의 또는 전혀 없거나 자주 변경되는 경우, 클라우드 컴퓨팅 등 서버의 저장공간을 최대한 활용해야할 경우 경우 주로 사용된다.
*클라우드 컴퓨팅은 스토리지, 서버, 애플리케이션 등을 인터넷을 통해 제공하는 구축 모델이다. 보통 온디맨드형으로 제공. 대표적으로 AWS, Azure가 있다.
이번 포스팅에서는 데이터베이스에 관해 각 유형별 특징을 간략히 알아보았다. 종류도 많고 한 포스팅으로 끝낼 수 없어서 주로 사용되는 DB들을 다시 아마 상세 포스팅하게 될 것 같다.
모쪼록 비교적 쉬운말로 작성하려 노력했는데 보시고 다른 내용이 있으면 댓글로 남겨주시길 ...!
*참고문헌
[데이터베이스 이해하기] Database(DB), DBMS, SQL의 개념
데이터베이스(Database, DB)란? : 데이터의 저장소. DBMS(Database Management System, 데이터베이스 관리 시스템)란? 데이터베이스를 운영하고 관리하는 소프트웨어. 계층형, 망형, 관계형 DBMS 중 대부분의 DBM
hongong.hanbit.co.kr
관계형 데이터베이스란?
관계형 데이터베이스의 정의와 이를 비즈니스에 이용하는 방법을 알아봅니다.
www.oracle.com
RDBMS란 무엇인가?
1. 정의
z2soo.github.io
와이드 컬럼 스토어(Wide column store)
키-값(Key-Value) 및 문서 데이터베이스는 행(row)에 초점을 맞춥니다. 이 말은 하나 또는 그 이상의 조...
blog.naver.com
그래프 데이터베이스(Graph Database)개념과 활용사례
안녕하세요. 오늘 주제는 [ 그래프 데이터베이스(Graph Database)개념과 활용사례]입니다.
jalynne-kim.medium.com
RDBMS와 NoSQL의 차이점 및 장단점
들어가기 전에 DBMS DataBase Management System 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어. SQL Strucured Query Language 관계형 데이
pythontoomuchinformation.tistory.com
'Developments > CS' 카테고리의 다른 글
HTTP란? (feat. HTTPS의 차이) (0) | 2022.12.07 |
---|---|
데이터 포맷(Data Format) : XML / JSON / CSV 의 특징 및 비교 (0) | 2022.12.03 |
SOAP API 와 REST API 의 장단점 및 차이 (0) | 2022.11.22 |