일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자료구조
- 코딩테스트
- 쿼리dsl
- 스프링
- 스파르타코딩
- 웹개발
- 객체지향프로그래밍
- 정처기
- 운영체제
- 메서드
- 검증
- programmers
- db
- 면접
- 자바
- ModelAttribute
- OS
- Java
- 백준
- 반복문
- 스프링 MVC
- Bean Validation
- 네트워크
- 코테
- 자바의 정석
- 알고리즘
- JPA
- 브루트 포스
- 프로그래머스
- 스프링MVC
- Today
- Total
개발일지
DB종류 본문
목차
💡 MongoDB
특징
- NoSQL 데이터베이스로서 Document-Oriented 데이터 모델을 사용한다.
- 데이터를 JSON 형태의 문서로 저장하고, 컬렉션(Collection)에 문서를 그룹화하여 저장한다.
- 스키마가 유연하며, 필요에 따라 동적으로 데이터 모델을 조정할 수 있다.
- 수평 확장을 지원하여 대규모 데이터를 처리하는 데 적합하다.
- Replica Set을 통한 고가용성을 제공하여 장애 복구와 무중단 서비스를 지원한다.
사용 용도
✅ 비정형 데이터를 다루는 웹 어플리케이션, 소셜 미디어 플랫폼, 로그 분석 시스템 등에 적합하다.
✅ 데이터 모델이 자주 변경되거나 확장성이 필요한 경우 사용할 수 있다.
💡Redis🍀
특징
- In-memory 데이터 스토어로서 데이터를 메모리에 저장하므로 빠른 읽기/쓰기 작업을 제공한다.
- 다양한 데이터 구조를 지원하며, 주로 Key-Value 형태의 데이터 모델을 사용한다.
- Pub/Sub 메시징 시스템을 지원하여 실시간 데이터 처리에 적합하다.
- 데이터를 디스크에 지속적으로 저장할 수 있는 옵션도 제공한다.
사용 용도
✅ 캐싱, 세션 관리, 메시징 큐, 실시간 분석 등 빠른 응답 속도와 고성능이 요구되는 시스템에 적합하다.
✅ 주로 메모리 내 데이터를 효율적으로 저장하고 처리해야 하는 경우 사용된다.
자바 해쉬맵과의 비교
Redis와 자바 해쉬맵 모두 key-value 기반이고,
메모리 베이스이며, 원하는 value를 개발자가 원하는 표현방식으로 넣을 수 있다.
그러다면 HashMap을 쓰면 될텐데, 굳이 Java-Redis 연동 클라이언트를 써가며 Redis를 활용하는 이유가 있을까?
→ 서버가 1대 있다는 가정에서는 Redis의 장점이 크게 보이지 않지만, 분산 환경을 대입하면 장점이 보인다.
분산 환경에서의 장점
유저 요청이 크게 늘어나 서버를 몇 대 증설하였지만, 동일한 해쉬맵 데이터를 참조해야할 상황이 있다고 가정해보자.
이 때 원격 프로세스간에 동일한 해쉬맵 데이터를 참조해야 할 때, 분산환경에선 원격 프로세스간 데이터를 동기화 하기 어렵다.
하지만, 별도의 레디스 서버를 구성하고 해당 레디스에서 값을 꺼내 쓴다면 메모리 기반 데이터 구조의 빠른 응답성을 확보함과 동시에 데이터 불일치 문제를 해결할 수 있다.
Redis의 영속성 제공
메모리에 데이터를 관리하므로 매우 빠른 속도로 데이터를 저장 및 조회할 수 있다. 하지만 메모리 특성상 저장된 데이터는 사라질(휘발성) 가능성이 있다. 이를 보완하고자 레디스는 관리하고 있는 데이터 영속성을 제공한다. 즉, 메모리에 있는 데이터를 디스크에 백업하는 기능을 제공하며, RDB방식이나 AOF방식으로 백업할 수 있다.
1️⃣ RDB(Redis Database) : 메모리에 있는 데이터 전체에서 스냅샷을 작성하고, 이를 디스크로 저장하는 방식
특정 시간마다 여러 개의 스냅샷을 생성하고, 데이터를 복원해야 한다면 스냅샷 파일을 그대로 로딩만 하면된다. 하지만, 스냅샷 이후 변경된 데이터는 복수할 수 없다는 단점이 있다.
*스냅샷이란?
- 스냅샷은 특정 시점에서 메모리에 있는 데이터의 상태를 포착한 것을 말한다. 일종의 데이터 백업이라고 생각하면 된다. 스냅샷을 사용하면 DB의 현재 상태를 저장하거나 나중에 필요할 때 다시 복원할 수 있다.
- 스냅샷은 메모리에 있는 데이터를 디스크로 영구적으로 저장하는 과정이며, 이를 통해 데이터를 안정적으로 보존하고, 장애 발생 시에도 데이터를 복구할 수 있다.
2️⃣ AOF(Append Only File) : 데이터가 변경되는 이벤트가 발생하면 이를 모두 로그에 저장하는 방식
데이터를 생성,수정,삭제하는 이벤트를 초 단위로 취합 및 로그 파일에 작성하며, 모든 데이터의 변경 기록들을 보관하고 있으므로 최신 데이터 정보를 백업할 수 있다. 하지만, RDB방식보다 로딩 속도가 느리고 파일 크기가 큰 것이 단점이다.
레디스는 일반적으로 AOF와 RDB를 동시에 사용하여 데이터를 백업한다.
ex) 매일 7시마다 RDB 스탭샷을 생성하고, RDB 생성 이후에 변경되는 데이터는 AOF로 백업한다.
Redis는 싱글 스레드로 동작
- 레디스(Redis)는 싱글 스레드(single-threaded)로 동작하는 인메모리 데이터베이스이다.
- 이것은 Redis가 모든 요청을 처리하는 데 하나의 스레드만 사용한다는 것을 의미하며, 이러한 설계 결정은 Redis가 매우 빠르게 작동하고, 간단하면서도 효율적인 방식으로 데이터를 처리할 수 있도록 한다.
→ 즉, Redis는 동시에 하나의 명령만 처리할 수 있기에 각 요청을 순차적으로 처리하며 동시에 여러 요청을 처리할 수 없다.
장점
1️⃣ 스레드 간의 컨텍스트 전환 오버헤드가 없기 때문에 메모리를 효율적으로 사용할 수 있다.
2️⃣ 스레드 간의 동기화 문제가 없기 때문에 쉽게 확장할 수 있다.
단점
1️⃣ 싱글 스레드이기에 전체 데이터 스캔과 같은 오버헤드가 큰 명령어를 처리하는 동안 다른 명령어를 처리가 불가하다.
2️⃣ 단일 스레드에서 실행되므로 해당 스레드가 실패하면 서버 전체가 영향을 받을 수 있다.
💡MySQL🍀
특징
- 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)으로서, 데이터를 테이블과 열(Column)로 구조화하여 저장한다.
- ACID 트랜잭션을 지원하여 데이터의 일관성과 무결성을 보장한다.
- 다양한 저장 엔진과 스토리지 엔진을 지원하여 다양한 용도로 사용할 수 있다.
사용 시기
✅ 웹 애플리케이션, 전통적인 엔터프라이즈 시스템, 온라인 쇼핑몰, 블로그 플랫폼 등의 다양한 애플리케이션에 적합하다.
✅ 트랜잭션 처리와 데이터 일관성이 중요한 경우 사용된다.
장점
1️⃣ 무료로 사용할 수 있고 널리 지원되는 오픈 소스 데이터베이스다.
2️⃣ 다른 데이터베이스보다 빠르고 저렴하며 안정적인 고유한 스토리지 엔진 아키텍처가 있다.
3️⃣ 뷰, 트리거 및 저장 프로시저를 사용하여 개발자에게 더 높은 생산성을 제공한다.
4️⃣ 대부분의 운영 체제에서 단 하나의 명령으로 쉽게 설치할 수 있다.
5️⃣ 널리 사용되고 지원되므로 도움말과 리소스를 쉽게 찾을 수 있다.
6️⃣ 더 많은 기능을 제공하는 데 사용할 수 있는 다양한 도구와 플러그인이 있다.
단점
1️⃣ MySQL은 복잡하고 강력할 수 있으므로 소규모 애플리케이션에 적합하지 않을 수 있다.
: MySQL은 매우 강력하고 복잡한 데이터베이스 시스템이기 때문에, 간단한 소규모 애플리케이션에는 부담이 될 수 있다. 작은 규모의 프로젝트에는 더 간단하고 가벼운 데이터베이스가 적합할 수 있다.
2️⃣ 애플리케이션이 MySQL로 구축되면 기본 데이터베이스 또는 배포를 변경하기 어려울 수 있다.
MySQL로 애플리케이션을 구축한 후에는 다른 데이터베이스로의 변경이 어려울 수 있다. MySQL에 의존하는 애플리케이션을 다른 데이터베이스로 전환하려면 코드를 다시 작성하고, 데이터 이전 및 호환성 문제를 해결해야 할 수 있다.
3️⃣ MySQL은 PostgreSQL과 같은 일부 다른 데이터베이스만큼 기능이 풍부하지 않을 수 있다.
PostgreSQL과 같은 다른 데이터베이스 시스템에 비해 MySQL은 기능이 상대적으로 제한적일 수 있다. 특히 고급 기능이나 특정 작업에 필요한 확장성 측면에서 MySQL이 부족할 수 있다.
💡Oracle
특징
- 대규모 엔터프라이즈 환경에서 사용되는 고성능 관계형 데이터베이스 시스템(RDBMS)이다.
- 데이터의 일관성과 안정성을 보장하기 위해 ACID 트랜잭션을 지원한다.
- 고가용성, 데이터 보안, 백업 및 복구 기능 등의 기능을 제공한다.
사용 시기
✅ 대규모 엔터프라이즈 시스템, 금융 기관, 은행, 정부 기관 등에서 보안과 안정성이 중요한 경우 사용됩니다.
✅ 대규모 데이터 처리 및 안정성을 요구하는 비즈니스 애플리케이션에 적합합니다.
💡PostgreSQL
특징
- 오픈 소스 관계형 데이터베이스 시스템(RDBMS)으로서, 다양한 기능과 확장성을 제공한다.
- ACID 트랜잭션을 지원하여 데이터 일관성과 무결성을 보장한다.
- JSON 데이터 형식을 지원하여 NoSQL과의 통합이 가능하다.
사용 시기
✅ 웹 애플리케이션, 데이터 웨어하우스, 지리 정보 시스템(GIS), 과학 및 연구 분야 등 다양한 분야에서 사용된다.
✅ 데이터 일관성과 안정성이 중요하며, 다양한 기능과 확장성이 필요한 경우 사용된다.
자료출처
https://sihyung92.oopy.io/database/redis/1
레디스Redis가 뭐에요? 레디스 설치하기, 레디스 튜토리얼
서문. 레디스가 뭔가요?
sihyung92.oopy.io
'DB' 카테고리의 다른 글
RDMS와 NoSQL (1) | 2024.02.07 |
---|---|
정규화(특징,목적,형태) (1) | 2024.02.05 |
DB개념 - 용어 정리 (0) | 2024.02.05 |