1. DIKW의 정의
2. RDBMS와 DBMS의 차이점
1) RDBMS
- 데이터를 테이블 형식으로 저장
- primary key 라는 식별자가 있다.
- 표준화 되어 있다.
- ACID를 위한 무결성 제약을 정의한다.
- Atomicity : 트랜잭션의 모든 작업이 모두 성공하거나 실패해야한다.
- Consistency : 트랜잭션이 완료되면 DB는 일관성 있는 상태를 유지해야한다.
- Isolation : 여러 트랜잭션이 동시에 실행되더라도 서로 간섭하지 않도록 보장해야한다.
- Durability : 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 보존되어야 한다.
- 시스템은 저장된 데이터에 접근하기 위해 데이터의 테이블 형식 구조를 지원한다.
- MySQL, Oracle, SQL Server 등이 있다.
2) DBMS
- 데이터를 파일로 저장한다.
- 데이터는 일반적으로 계층적 형식 또는 탐색 형식으로 저장된다.
- 표준화라는 것이 없다.
- 데이터 보관에 있어 어떠안 보안도 제공하지 않는다.
- 테이블간의 관계가 없다.
- 적은 데이터를 처리하기 좋다.
- 어플리케이션에 종속적이고, 복잡하며, 단순한 검색 기능
- XML 등이 있다.
3. SQL(Structured Query Language)
- RDBMS에서 데이터를 관리하고 조작하기 위해 사용되는 표준 프로그래밍 언어
- 표준화된 언어 : 다양한 DB 시스템(MySQL, PostgreSQL, Oracle 등)에서 일관되게 사용 가능
- 선언적 언어 : "무엇을 할 것인가"에 중점을 두는 선언적 언어로, 사용자가 원하는 결과를 표현하면 DB엔진이 최적의 방법으로 이를 수행한다.
- 관계형 데이터 모델 : SQL은 테읍ㄹ 형식의 데이터를 다루며, 이 테이블들 간의 관계를 정의하고 관리
- 다양한 기능 : 데이터의 조회, 삽입, 갱신, 삭제, 데이터베이스 및 테이블 구조 정의, DB 사용자 관리 등 다양한 기능 지원
- 확장성과 호환성 : 다양한 DB 시스템에 맞게 확장 및 최적화된 구문을 제공하여, 많으 ㄴ시스템 간에 높은 호환성을 유지한다.
- 강력한 쿼리 능력 : 복잡한 쿼리를 통해 여러 테이블에서 데이터를 결합(Join), 필터링, 집계하는 등의 강력한 데이터 처리 능력을 제공
4. CAP 이론
- 분산 시스템에서 세 가지 주요 특성인 일관성, 가용성, 파티션 내성을 동시에 만족시킬 수 없다는 것을 설명하는 이론
- CAP 이론은 세 가지 특정 중 오직 두 가지만 동시에 만족시킬 수 있다고 주장
- CAP 이론의 세 가지 요소
- Consistency(일관성) : 모든 노드가 동일한 데이터를 볼 수 있도록 보장한다. 즉, 데이터베이스에 쓰기 작업이 완료되면, 모든 읽기 작업은 항상 가장 최신의 데이터를 반환해야한다.
- Availability(가용송) : 모든 요청이 반드시 응답을 받아야 함을 보장한다. 심지어 일부 노드가 실패하더라도, 시스템은 계속해서 요청에 응답할 수 있어야 한다.
- Partition Tolerance(파티션 내성) : 네트워크 파티션(네트워크 일부가 다른 부분과 연결이 끊어짐) 동안에도 시스템이 계속 동장할 수 있도록 보장한다. 네트워크 장애가 발생해도 시스템이 지속정으로 운영될 수 있어야 한다.
- CAP 이론의 실질적인 예시
- CA(consistency + Availability) : 파티션 내성을 포기하고, 모든 노드에서 일관된 데이터를 제공하면서 높은 가용성을 유지한다. 하지만 네트워크 장애가 발생하면 시스템이 동작하지 않을 수 있다.
- CP(Consistency + Partition Tolerance) : 가용성을 일부 포기하고, 네트워크 장애가 발생해도 데이터 일관성을 유지한다. 그러나 일부 요청은 응답을 받을 수 없을 수 있다.
- AP(Availability + Partition Tolerance) : 일관성을 포기하고, 네트워크 장애가 발생하더라도 시스템이 계속 동작하며 높은 가용성을 제공한다. 하지만 모든 노드에서 일관된 데이터를 보장할 수 는 없다.
5. 수평 확장과 수직 확장
수평 확장 | 수직 확장 | |
개념 | 여러 대의 서버(노드)를 추가하여 시스템의 전체 처리 능력을 확장 하는 방법 | 기존 서버의 하드웨어 성능을 업그레디으하여 시스템의 처리 능력을 확장하는 방법 |
방법 | 기존 서버와 동일한 역할을 하는 새로운 서버를 추가하여 부하를 분산 시킨다. 여러 서버가 동시에 작업을 처리하여 성능을 높인다. | 더 강력한 CPU, 더 많은 메모리, 빠른 디스크 등으로 기존 서버의 사양을 향상시켜 성능을 높인다. |
장점 | 확정성 : 서버를 추가하는 방식으로 시스템의 용량을 무한대로 늘릴 수 있다. 고가용성 : 여러 서버가 분산 처리하므로, 특정 서버에 장애가 발생하도 다른 서버가 그 역할을 대신할 수 있어서 시스템의 안정성이 높아진다. 유연성 : 특정 하드웨어에 족송 되지 않으며, 필요에 따라 서버를 더 추가하거나 제거할 수 있다. |
단순성 : 기존 서버의 성능만 업그레이드하면 되믈 ㅗ관리가 비교적 간단하다. 비용 효율 : 초기에는 더 저렴하게 확장할 수 있으며, 추가적인 복잡한 인프라 관리가 필요 없다. |
단점 | 복잡성 증가 : 서버 간의 부하 분산, 데이터 일관성 유지 등의 복잡한 문제가 발생할 수 있다. 관리 비용 : 더 많은 서버를 관리해야하므로, 관리 비용과 노력이 증가할 수 있다. |
확장성의 한계 : 하드웨어 업그레디으에는 물리적 한계가 있어서 일정 수준이상으로 확장은 어렵다. 단일 장애점 : 모든 처리를 한 서버가 담당하므로, 서버에 문제가 생기면 시스템 전체가 영향을 받을 수 있다. |
6. NoSQL
- Not only SQL : 언어마다 관습화된 API, 선언적 구조의 쿼리 언어, 쿼리별 언어를 사용하여 질의 할 수 있다.
- 비관계형 DB 유형을 가르키며, 관계형 테이블과는 다른 형식으로 데이터를 저장한다.
- 주요 특징
- 스키마리스 데이터 모델 : RDBMS와 달리 고정된 스키마를 사용하지 않는다. 구조가 자주 변경되거나 다양한 형태의 데이터를 저장하는 데 적합하다.
- 수평 확장 : NoSQL 데이터베이스는 여러 서버에 데이터를 분산 저장하는 방식으로 쉽게 수평 확장이 가능하다.
- 다양한 데이터 모델 : 다양한 데이터 모델을 지원한다. Key-Value 저장소, Document 데이터베이스, Column 기반 저장소, Graph 데이터 베이스 등이 있다.
- 유연성 : 정형 데이터뿐만 아니라 비정형 데이터도 처리 가능하다. 예를 들어 소셜 미디어 데이터, 로그 데이터, IoT 데이터와 같은 다양한 데이터 유형을 저장하고 관리 할 수 있다.
- 고가용성 : 데이터 복제 및 분산을 통해 고가용성과 내결함성을 지원한다. 특정 노드가 장애를 일으켜도 시스템 전체가 영향을 받지 않도록 설계된다.
- 장점
- 유현한 데이터 모델
- 높은 확장성
- 빠른 성능
- 비정형 데이터 처리
- 단점
- 데이터 일관성 문제 : CAP이론에 따라 일관성, 가용성, 파티션 내성 중 일부를 포기해야할 수 있다.
- 제한된 쿼리 기능 : SQL 처럼 복잡한 쿼리를 지원하지 않으며, 각 NoSQL 솔루션 마다 쿼리 언어가 다를 수 있다.
- 표준화 부족 : NoSQL 데이터베이스는 각기 다른 데이터 모델과 API를 제공하므로, 시스템 간의 호환성 문제가 발생할 수 있다.
6. Document DB : Mongo DB
- JSON, BSON, XML 등의 형식으로 저장하는 NoSQL 데이터베이스 유형
- 데이터가 구주화된 문서 형태로 저장되며, 각 문서는 키-값 쌍을 포함하는 객체로, RDBMS의 행과 유사하다.
- 그러나 RDBMS와 달리 고정된 스키마가 없어서 문서마다 다른 구조를 가질 수 있다.
- 주요 특징
- 유연한 스키마 : 데이터 구조가 사전에 정의되지 않으며, 필요에 따라 문서의 구조를 자유롭게 변경 가능
- 계층적 데이터 구조 : 문서 내부에는 중첩된 객체, 배열 등을 포함할 수 있어, 복잡한 계층적 데이터를 직관적으로 표현할 수 있다.
- 빠른 개발 속도 : 데이터를 저장할 때 스키마를 미리 정의할 필요가 없기 때문에, 개발이 빠르고 유연하게 진행 될 수 있다.
- 다양한 데이터 타입 지원 : 문서 내에 문자열, 숫자, 날짜, 배열, 객체 등 다양한 데이터 타입을 지원
- 대표 예시 : MongoDB
- BSON(Binary JSON)형식으로 저장한다. JSON 형식을 이진(Binary)으로 직렬화 한것 으로, 더 빠르고 효율적으로 데이터 저장 및 전송을 가능하게 한다.
- 주요 기능
- 컬렉션 : RDBMS의 테이블과 유사하지만, 스키마가 없고, 같은 컬렉션 내의 문서들이 서로 다른 구조를 가질 수 있다.
- 간단한 쿼리 언어 : 복잡한 SQL 사용 필요 없이, JSON 스타일의 쿼리 언어를 통해 쉽게 조작, 조회 가능
- 인덱싱 : 성능 향상을 위한 인덱스를 지원하며, 복합 인덱스, 텍스트 인덱스, 지리공간 인덱스 등도 가능
- 수평 확장 : 샤딩을 통해 여러 서버에 분산 저장 가능하여 대규모 데이터 처리가 가능
- 집계 프레임워크 : 데이터를 그룹화하거나 필터링, 변환하는 데 사용할 수 있는 강력한 집계 기능을 제공
- 복제 및 고가용성 : 복제 세트를 통해 데이터 복제 및 장애 복구 기능을 제공
- 사용 예시
- 웹 애플리케이션
- 콘텐츠 관리 시스템
- IoT 및 빅데이터
- 모바일 애플리케이션
7. In-memory Data Store : Redis, Mem-cached
- 데이터를 디스크가 아닌 컴퓨터의 메인 메모리(RAM)에 저장하는 데이터 관리 시스템
- 데이터 접근 속도가 매우 중요한 곳에 사용된다.
- 특징
- 고속 데이터 접근 : 디스크 I/O지연이 없으며 매우 빠르기에 분석, 캐싱, 세션 관리, 게임 리더보드 등 속도가 중요한 애플리케이션에 적합
- 휘발성 : 시스템이 종료되거나 재시작 될 경우 데이터가 사라진다.
- 데이터 영속성 옵션 : 일부 인메모리 데이터 스토어는 데이터 영속성을 지원하기도 한다. 예를 들어 Redis는 스냅샷 저장 및 지속적인 로그 기록을 통해 데이터를 디스크에 저장하여 재시작 후에도 데이터를 복원 할 수 있다.
- 데이터 구조 다양성 : 키-값 쌍 외에도 리스트, 셋, 해시, 정렬된 집합 등 다양한 데이터 구조를 지원한다.
- 수평 확장 : 데이터가 메모리에 저장되기 때문에, 쉽게 수평 확장(클러스터링)을 지원할 수 있다. 대규모 데이터 처리를 분산하고, 성능을 높일 수 있다.
- 사용 사례
- 캐싱
- 세션 관리
- 실시간 분석
- 메시지 브로커
- 대표적인 예시
- Redis : 키-값 저장소로 많이 사용되며, 다양한 데이터 구조를 지원하고, 영속성을 위한 스냅샷 저장 및 로그 기록 기능을 제공
- Memcached : 단순한 키-값 저장소로 주로 캐싱 용도로 사용된다. 매우 빠른 성능을 제공하지만, Redis에 비해 기능은 단순하다.
- Amazon ElastiCache : AWS에서 지원하는 관리형 인메모리 데이터 스토어 서비스로 Redis와 Memcached를 지원한다.
8. Elastic Search
- 분산형 오픈 소스 검색 엔진으로, 다양한 유형의 데이터를 실시간으로 검색하고 분석할 수 있게 해준다.
- Apache Lucene 기반으로 개발되었다.
- 빠르고 확장 가능한 텍스트 검색과 분석 기능을 제공한다.
- 로그, 텍스트, 구조화된 데이터, 비정형 데이터를 포함한 다양한 데이터 유형을 처리할 수 있다.
- 특징
- 분산 아키텍처 : 데이터가 여러 노드에 분산되어 저장된다. 이를 통해 대규모 데이터를 처리하고, 성능과 안정성을 향상시킬 수 있다.
- 실시간 검색 및 분석 : 데이터가 Elasticsearch에서 인덱싱되면, 거의 실시간 검색이 가능하다.
- 강력한 검색 기능 : 텍스트 검색에 강점을 가지고 있으며, 키워드 검색, 자연어 검색, 정규식 검색 등 다양한 검색 방식을 지원한다. 또한, 검색 결과의 순위를 조정할 수 있는 스코어링 기능을 제공한다.
- RESTful API : RESTful API를 통해 데이터를 검색하고 조작할 수 있다.
- 확장성 및 탄력성 : 클러스터에 노드를 추가하여 쉽게 확장할 수 있다.
- 다양한 데이터 형식 지원 : 텍스트, 숫자, 날짜, 지리적 위치 정보 등 다양한 데이터 형식 처리 가능
- 애널리틱스 및 시각화 : Kinana와 같은 도구를 연동하여 데이터 시각화를 할 수 있다.
9. Kafka
- 대용량의 실시간 데이터 스트리밍을 처리하기 위해 개발된 분산형 메시지 브로커 플랫폼
- LinkedIn에서 개발 된 후 Apache Software Foundation에서 오픈 소스로 관리 중
- 대규모 데이터를 높은 성능으로 스트리밍, 처리, 저장할 수 있어, 다양한 데이터 파이프 라인 및 스트리밍 애플리케이션에 널리 사용된다.
- 주요 개념
- 토픽 : Kafka에서 데이터를 주고 받는 단위.
- 프로듀서 : 데이터를 생산하여 kafka에 전송하는 역할
- 컨슈머 : Kafka에서 데이터를 읽어들이는 역할
- 파티션 : 각 토픽은 하나 이상의 파티션으로 나뉘며, 메시지들은 파티션에 분산되어 저장된다.
- 오프셋 : 각 파티션에 메시지가 저장되는 위치를 나타내는 숫자. 이를 통해 컨슈머는 어디까지 메시지를 읽었는지 추적한다.
- 브로커 : Kafka 클러스터를 구성하는 서버. 각 브로커는 하나 이상의 파티션을 관리하며, 클러스터 내에서 데이터의 저장과 전송을 담당
- 주요 특징
- 높은 처리량 및 성능
- 확장성 : 분산 시스템으로 설계되어 노드를 추가하여 쉽게 확장 가능
- 내구성 및 데이터 복제 : 데이터를 디스크에 저장하고, 여러 브로커에 복제하여 데이토의 손실 방지
- 유연한 메시지 처리 : 메시지는 기본적으로 로그 구조로 저장되며, 컨슈머는 필요에 따라 과거 메시지를 다시 읽을 수 있다.
- 실시간 스트리밍 처리 : 실시간으로 데이터를 수집하고 스트리밍할 수 있으며, 이를 통해 실시간 데이터 분석, 로그 처리, 모니터링 시스템 등을 구축할 수 있다.
- 사용 사례
- 로그 및 이벤트 데이터 수집
- 실시간 데이터 파이프라인
- 메시지 큐 시스템
- 스트리밍 데이터 분석
- 데이터 리플리케이션
10. Graph DB : Neo4j, Arango
- 데이터를 그래프 구조로 표현하고 저장하는 데이터베이스 관리 시스템
- 노드(node), 간선(edge), 속성(property)로 이루어져있다.
- 노드 간의 관계를 표한하는데 특히 유용하다.
- 주요 개념
- 노드 : 개체(엔티티)에 해당한다. 각 노드는 고유한 식별자를 가지고 있으며, 속성을 통해 추가적인 정보를 저장할 수 있다.
- 간선 : 노드 간의 관계를 나타낸다. 방향성을 가질 수 있으며, 단방향 또는 양방향 관계를 표현한다
- 속성 : 노드나 간선에 부여되는 추가 정보
- 그래프 : 노드와 간선의 집합으로 이루어진 구조
- 주요 특징
- 직접적인 관계 모델링 : RDBMS는 JOIN 연산을 통해 관계를 정의하지만, 그래프 DB는 간선을 통해 직접적으로 관계를 표현 할 수 있다.
- 높은 성능 : 간선을 따라 탐색하는 방식으로 처리되기 때문에 더 빠르게 수행 될 수 있다.
- 유연성 : 스키마가 고정되어 있지않아 확장이나 변경에 유연하게 대응 가능
- 경로 및 패턴 탐색 : 경로나 패턴을 탐색하는 쿼리에 강력하다.
- 사용 사례
- 소셜 네트워크 분석
- 추천 시스템
- 네트워크 관리
- 지식 그래프
- 사기 탐지
- 대표적인 Graph DB
- Neo4j : 대표적인 그래프 DB로 ACID 트랜잭션을 지원하고, 다양한 언어의 API를 제공
- Amazon Neptune : AWS 서비스로, RDF와 Property Graph 모델을 모두 지원
- OrientDB : 멀티 모델 DB로 그래프와 문서, 객체 모델을 동시에 지원
- ArangoDB : 멀티 모델 DB로 그래프 모델과 문서 및 키-값 모델을 지원
11. 완전 관리형 클라우드 DB
- 클라우드 서비스 제공 업체가 데이터베이스의 설정, 유지보수, 확장, 백업 등을 자동으로 처리해주는 서비스
- 주요 특징
- 자동화된 관리 : 설정 및 배포, 백업 및 복구
- 확장성 : 자동 확장되며, 높은 가용성과 성능을 보장하며 장애 발생시 자동으로 복구되는 탄력성
- 데이터 암호화
- 접근 제어
- 빠른 응답 속도
- 자동 최적화
- 대표 예시
- AWS Dyanamo DB
12. Hadoop
- 대규모 데이터 처리를 위한 오픈소스 프레임워크
- 분산 저장과 분산 처리를 통해 큰 데이터 세트를 효과적으로 관리하고 분석
- 클러스터 내의 여러 컴퓨터를 활용하여 데이터 처리 작업을 병렬로 수행
- 주요 구성 요소
- Hadoop Distibuted File System(HDFS)
- 기능 : Hadoop의 분산 파일 시스템으로. 대규모 데이터를 여러 노드에 분산하여 저장.
- 장점 : 데이터의 내결함성을 제공하며, 대용량 파일을 효율적으로 저장하고 읽음
- MapReduce
- 기능 : 대량의 데이터 처리를 위한 프로그래밍 모델이자 엔진, 데이터 처리 작업을 두 단계로 나누어 수행
- Map 단계 : 데이터를 작은 조각으로 나누어 병렬 처리한다. 각 조각의 데이터는 키-값 쌍으로 변환
- Reduce 단계 : Map 단계에서 생성된 키-값 쌍을 집계하여 최종 결과 생성
- 장점 : 데이터의 병렬 처리와 분산 처리를 통해 성능을 높이고, 대규모 데이터 세트를 효율적으로 처리
- 기능 : 대량의 데이터 처리를 위한 프로그래밍 모델이자 엔진, 데이터 처리 작업을 두 단계로 나누어 수행
- YARN(Yet Another Resource Negotiator)
- 기능 : Hadoop의 자원 관리 및 작업 스케줄링을 담당한다. 클러스터의 자원을 관리하고, 다양한 애플리케이션의 작업을 조정하여 실행한다.
- 장점 : 자원 할당과 작업 스케줄링을 효율적으로 처리
- Hadoop Common
- 기능 : Hadoop의 다른 구성 요소들이 작동하는 데 필요한 공통 유틸리티와 라이브러리를 포함
- 장점 : Hadoop의 다양한 모듈들이 원활하게 협력할 수 있도록 지원
- Hadoop Distibuted File System(HDFS)
- Hadoop의 주요 특징
- 확장성 : 노드를 클러스터에 추가할 수 있고, 이를 통해 데이터 저장 용량과 처리 성능을 수평 확장할 수 있다.
- 내결함성 : 데이터 복제를 통해 손실에 대한 내결함성이 제공되며 노드나 블록에 장애가 발생할 경우 자동으로 복구 작업을 수행
- 유연성 : 비정형 데이터처리가 가능하고 다양한 데이터 소스와 형식을 처리 가능
- 비용 효율성 : 상대적으로 저렴한 하드웨어를 사용하여 클러스터를 구성할 수 있다.
- 오픈 소스 : 활발한 커뮤니티 지원과 지속적인 업데이트를 통해 기능을 개선하고 버그를 수정
- 사용 사례
- 대이터 분석
- 로그 처리
- 추천 시스템
- 클라우드 스토리지
- 사회적 네트워크 분석
13. Hadoop Eco System
- Hadoop 생태계는 Hadoop의 핵심 구성 요소와 이를 보완하는 다양한 도구들로 구성되어 있다.
- Hadoop Core Components
- HDFS
- MapReduce
- YARN
- Hadoop Common
- Hadoop Ecosystem Components
- Apache HBase
- 기능 : 분산형 NoSQL DB로, HDFS위에 구축되어 대규모의 비정형 데이터 저장과 빠른 읽기/쓰기 작업을 지원
- 특징 : 실시간 읽기 및 쓰기 성능을 제공하고 대량의 데이터를 효율적으로 처리
- Apache Hive
- 기능 : SQL 유사 쿼리 언어를 사용하여 HDFS에 저장된 데이터를 질의 할 수 있게 해주는 데이터 웨어하우스 시스템
- 특징 : SQL-Like 쿼리를 지원하며, 데이터 분석 작업을 쉽게 수행할 수 있다.
- Apache Pig
- 기능 : 데이터 흐름 프로그래밍 언어인 Pig Latin을 사용하여 데이터를 처리하고 분석하는 시스템
- 특징 : 복잡한 데이터 처리 작업을 간단히 스크립트로 표현하게 해준다.
- Apache Spark
- 기능 : 빠르고 범용적인 클러스터 컴퓨팅 시스템. 메모리 내 데이터 처리를 지원하여 실시간 데이터 분석과 머신 러닝을 효율적으로 수행할 수 있다.
- 특징 : 대규모 데이터 처리와 분석을 위한 다양한 라이브러리와 API를 제공
- Apache Flume
- 기능 : 대규모 로그 데이터를 수집하고, HDFS나 HBase로 전송하는데 사용
- 특징 : 데이터를 실시간으로 수집하고, 다양한 소스에서 데이터를 수집할 수 있다.
- Apache Sqoop
- 기능 : 관계형 DB와 Hadoop 사이에서 대량의 데이터를 효율적으로 전송하는 도구
- 특징 : DB에서 HDFS로, HDFS에서 DB로 데이터를 쉽게 전송할 수 있다.
- Apache Oozie
- 기능 : Hadoop 작업을 스케줄링하고 관리하는 워크플로우 시스템
- 특징 : 다양한 Hadoop 작업괴 작업 간의 의존성을 관리할 수 있다.
- Apache ZooKeeper
- 기능 : 분산 애플리케이션의 동기화와 구성 관리를 지원하는 서비스
- 특징 : 클러스터 내의 노드 간에 상태를 공유하고 조정하는데 사용
- Apache Solr
- 기능 : 분산형 검색 플랫폼으로 대규모 데이터에서 빠른 검색과 탐색을 지원
- 특징 : 데이터를 인덱싱하고 검색하는 기능을 제공
- Apache NiFi
- 기능 : 데이터 흐름을 자동화하고 관리하는 도구
- 특징 : 직관적인 사용자 인터페이스를 통해 데이터 흐름을 설계하고 모니터링 가능
- Apache HBase
14. 참고
1) CAP 이론 : https://onduway.tistory.com/106