개요
데이터베이스는 데이터의 체계적 저장과 관리를 위해 사용되는 시스템으로, 크게 RDBMS(관계형 데이터베이스 관리 시스템)와 NoSQL로 나뉩니다. RDBMS는 테이블 간의 관계를 기반으로 하는 구조화된 데이터 관리 시스템으로, 데이터 무결성과 ACID 속성을 중요시합니다. 반면, NoSQL은 비정형 데이터와 대규모 데이터 처리에 적합한 분산형 데이터베이스로, 문서, 키-값, 그래프, 열 기반 모델을 포함합니다.
각각의 DBMS는 사용 목적과 데이터 유형에 따라 적절한 선택이 필요합니다.
1. RDBMS
관계형 데이터베이스 관리 시스템(RDBMS)은 1970년대에 에드가 F. 커드에 의해 제안되었습니다. 이 시스템은 데이터 간의 관계를 테이블 형식으로 관리하며, SQL을 사용하여 데이터를 처리합니다. 테이블 간의 관계를 정의하고 관리하는데 주안점을 두어, 데이터의 무결성 유지와 중복 방지에 유리합니다.
장점
- 데이터 무결성: 데이터 관계와 트랜잭션을 강력하게 유지합니다.
- SQL 지원: 강력하고 표준화된 쿼리 언어 제공.
- 보안 및 ACID 지원: 높은 보안성과 원자성, 일관성, 격리성, 지속성을 보장.
단점
- 확장성 제한: 수직 확장에 한계가 있습니다.
- 복잡한 스키마: 스키마 변경이 어렵고 유연성이 부족합니다.
DB종류
- MySQL: 오픈 소스 관계형 데이터베이스로, LAMP 스택의 일부로 널리 사용
- PostgreSQL: 고급 기능과 ACID 준수 특성을 가진 오픈 소스 데이터베이스
- Oracle Database: 대기업에서 주로 사용하는 상용 데이터베이스 시스템
- Microsoft SQL Server: 마이크로소프트가 개발한 상용 관계형 데이터베이스
2. NoSQL
2000년대 이후 빅데이터와 클라우드 컴퓨팅의 등장으로 비정형 데이터의 처리 필요성이 증가했습니다. NoSQL 데이터베이스는 스키마리스 구조, 분산 저장, 높은 확장성을 제공하여 대규모 데이터 처리에 적합한 시스템으로 부상했습니다. 문서, 키-값, 그래프, 열 기반 저장소 등의 다양한 데이터 모델을 지원합니다.
장점
- 높은 확장성: 수평 확장을 통해 대규모 데이터 처리가 가능합니다.
- 유연한 데이터 모델: 다양한 형식의 데이터를 저장할 수 있습니다.
- 빠른 데이터 처리: 캐싱 및 분산 처리로 빠른 데이터 접근 가능.
단점
- 데이터 일관성 문제: 분산 시스템의 특성상 일관성을 완벽히 유지하기 어려울 수 있습니다.
- 표준화 부족: 쿼리 언어가 표준화되지 않았고, DBMS마다 차이가 큽니다.
DB종류
- MongoDB: 문서 지향 데이터베이스로, JSON 유사 문서 형식을 사용
- Cassandra: 분산형 NoSQL 데이터베이스, 높은 확장성과 가용성을 제공
- Redis: 키-값 저장소로, 빠른 데이터 접근을 위해 메모리 기반으로 동작
- Neo4j: 그래프 데이터베이스로, 노드와 관계로 데이터 모델링을 지원
- Elasticsearch: 분산형 검색 및 분석 엔진, 실시간 검색과 분석을 위한 JSON 문서 저장
3. RDBMS와 NoSQL 선택시 고려해야되는 항목
- 데이터 구조:
- RDBMS는 정형화된 테이블 구조가 필요할 때 유리합니다.
- NoSQL은 유연한 스키마가 필요할 때 적합합니다.
- 확장성:
- RDBMS는 수직 확장(서버 성능 향상)을 통해 확장할 수 있습니다.
- NoSQL은 수평 확장(서버 추가)을 통해 확장할 수 있습니다.
- 일관성 및 트랜잭션:
- RDBMS는 강력한 ACID 속성을 제공합니다.
- NoSQL은 일관성 대신 가용성 및 파티션 허용성을 중시할 수 있습니다.
- 성능 요구:
- RDBMS는 복잡한 쿼리와 조인이 필요한 경우 유리합니다.
- NoSQL은 높은 처리량과 낮은 지연시간이 중요한 경우 유리합니다.
4. RDBMS와 NoSQL 자주 사용되는 사례 예시
- RDBMS 사용 예시
- 은행 시스템: 고객 정보, 계좌 정보 등 정형화된 데이터를 관리하며, 트랜잭션의 일관성이 매우 중요합니다. 예를 들어, 고객의 입출금 기록을 정확하게 관리하는 데 RDBMS가 적합합니다.
- NoSQL 사용 예시
- 소셜 미디어 플랫폼: 사용자 생성 콘텐츠, 친구 관계, 활동 로그 등 다양한 형태의 비정형 데이터를 처리합니다. 빠른 읽기/쓰기 성능이 요구되며, 데이터 구조가 자주 변할 수 있는 환경에 적합합니다.
- 로그 분석 및 검색: 대량의 로그 데이터를 실시간으로 수집하고 검색하여 문제를 신속하게 진단하는 데 사용됩니다. 예를 들어, 서버 로그의 검색 및 분석을 통해 오류를 추적하는 경우입니다.
'개발메모 > 간단정리' 카테고리의 다른 글
[간단정리] 객체 지향 프로그래밍 SOLID 원칙 (0) | 2024.07.19 |
---|---|
[간단정리] {JSON}, <XML> 이란? (0) | 2024.07.18 |
[간단정리] 메세지 큐(Message Queue)란? (1) | 2024.07.13 |
[간단정리] Domain, Host, URL, URI 용어 정리 (1) | 2024.06.29 |
[간단정리] Java에서의 Hash(해시) 함수 (0) | 2024.03.14 |