Redis는 빠른 성능과 유연성으로 많은 개발자들에게 인기 있는 오픈 소스 인-메모리 데이터 스토어입니다.
프로젝트에 따라 다양한 활용 방법이 있겠지만, 일반적으로 Redis는 다음과 같은 경우에 유용합니다:
- 캐싱: 데이터베이스 쿼리 결과나 계산된 값 등을 임시로 저장하여 빠른 응답 속도를 제공합니다.
- 세션 관리: 사용자 세션 정보를 저장하여 웹 애플리케이션의 상태를 유지합니다.
- 메시지 브로커: 메시지 큐를 통해 서비스 간 메시지를 전달하고 처리합니다.
- 실시간 애플리케이션: 채팅, 게임 서버 등 실시간으로 데이터를 교환해야 하는 애플리케이션에 적합합니다.
Java와 Spring Boot를 사용하여 REST API 서비스에 Redis 캐시를 적용하는 간단한 예제가 있습니다.
샘플 프로젝트를 시작하기 전에, Redis가 로컬 환경에 설치되어 있는지 확인하시고, 필요한 경우 Redis 공식 사이트에서 설치하실 수 있습니다.
설치가 완료되면, 프로젝트에 필요한 Redis 클라이언트 라이브러리를 추가하고, Redis 서버에 연결하는 설정을 진행하시면 됩니다.
Redis 특징
1. 다양한 자료구조 지원
2. 지속성 지원
3. 읽기 성능 증대를 위한 서버 측 복제 지원
사진처럼 Key, value 형식으로 다양한 자료구조를 value로 가질 수 있습니다.
특히 디스크 없이 주 메모리에만 저장하는 Memcached 와는 달리 영속성 지원을 위해 데이터를 디스크에 저장할 수 있습니다.
따라서 서버가 내려가더라도 재시작 시 디스크에 저장된 데이터를 읽어서 메모리에 로딩하고, 저장된 값을 꺼내 쓸 수 있습니다.
- 순간적으로 메모리에 저장된 데이터 전체를 디스크에 저장하는 RDB(Snapshotting) 방식
- Redis의 Write/Update 연산을 모두 log파일에 기록하는 형태인 AOF(Append On File) 방식
Redis를 사용하는 서버가 충돌할 경우, 전체 데이터베이스의 초기본을 복사받는 마스터/슬레이브 복제를 지원합니다.
마스터 가 다운되면, 슬레이브가 마스터 역할을 이어받아 서비스를 계속 제공할 수 있습니다.
이후 마스터가 재기동되면 다시 슬레이브가 마스터에게 역할을 위임하고 슬레이브가 됩니다.
설정을 통해 이런 전략을 취할 수 있다고 합니다.
Redis 장점
- 데이터 입력/삭제가 MySQL 보다 10배 빠르다.
- 메모리를 활용하면서 데이터를 영속적으로 보존할 수 있다.
- 명시적으로 삭제 또는 expires를 설정하지 않으면 데이터가 삭제되지 않는다.
- 스냅샷 기능을 제공하여 메모리 내용을 .rdb 파일로 저장하여 특정 시점으로 복구할 수 있다.
- Master-Slave 형태로 여러개의 서버를 띄울 수 있어, 데이터 손실 위험성을 줄일 수 있다.
활용방법 - 캐싱
DB에 데이터를 조회시 커넥션을 붙여 매번 조회하는 것 대신 메모리 기반으로 캐싱된 데이터를 가져와 쓴다면, 더 빠르게 값을 읽어올 수 있습니다.
이 덕분에 조회가 상당히 많은 작업일 경우, 유용한 전략으로 사용할 수 있습니다.
여시서 캐시(cache)란, 사용자에 입장에서 데이터를 더 빠르게, 더 효율적으로 액세스를 할 수 있는 임시 데이터 저장소를 뜻하며, 대부분의 어플리케이션에서 속도 향상을 위해 캐시를 사용한다고 합니다.
특히 db내부의 쿼리를 캐싱하는 기능 보다, 다른 지역(원격)의 캐시 프로그램과 연동하여 db자체의 부하를 줄이는 장점이 큽니다.
다만, 제대로 사용하기 위해선 redis를 어디에 배치하여 사용할 것인지에 대한 전략을 잘 짜는 부분이 중요합니다.
배치하는 위치에 따라 성능도 차이가 날 수 있다고 합니다.(설계의 중요성)
이후 캐시를 활용하는 방법에 대해 더 상세하게 다루며,
redis에 대한 정리를 끝내겠습니다.
'IT기술 > DB' 카테고리의 다른 글
[redis] 캐싱 전략(Caching Strategies) 정리하기, 어떤 식으로 설계하고 사용할 것인가? (1) | 2024.05.20 |
---|---|
[redis] 캐싱, 활용할 데이터 선정, 고려할 점 (0) | 2024.05.20 |
[Postgre] AutoCommit 테스트해보기 (0) | 2024.02.23 |
[DB, JBDC] 데이터베이스 연결, JDBC, SQL Mapper, ORM 정리 (0) | 2024.01.29 |
[DB] 데이터 모델링, 관계형 데이터베이스에서 1:1, 1:N, N:N 관계 (0) | 2024.01.27 |