오늘은 본격적으로 프로젝트 코드 작성을 시작하는 날이었다. 기본적인 CRUD와 기능을 거의 다 완성해서 금방 기본 기능 구현은 끝날 것으로 예상된다. 그 이후에 새로 배운 것들을 적용해야하기 때문에 부지런히 움직여야 할 것 같다.
여기에는 이번에 새로 적용하게 될 Redis에 대해 공부한 것을 간단하게 정리해보았다.
1. Redis 기본 개념
- Redis란?
Remote Dictionary Server의 약자로 Key-Value 구조의 데이터를 저장하는 NoSQL(비관계형 데이터베이스)이다.
- Redis의 특징
1. Key: Value 구조로 데이터를 저장한다
Redis는 비관계형 데이터베이스(NoSQL)로 오직 Key: Value 형태로만 데이터를 저장한다.
TTL(Time To Live)은 Key에만 설정할수 있다. (Value에 오는 Hash 자료구조의 Key에는 TTL을 설정할 수 없다)
다양한 자료구조를 지원하는 Redis
Redis의 Value에는 위의 그림과 같이 다양한 자료구조가 저장될 수 있다.
여기에는 그 일부만 아주 간단히 정리해보았다.
- Strings : 기본적인 Key-Value 구조
- Lists : String element의 모음, 순서는 삽입된 순서를 유지하며 기본적인 자료구로 Linked List를 사용
- Sets : 유일한 값들의 모임인 자료구조, 순서는 유지되지 않음
- Sorted sets : Sets 자료구조에 score라는 값을 추가로 두어 해당 값을 기준으로 순서를 유지
- Hahses : 내부에 key-value 구조를 하나더 가지는 Reids 자료구조
Redis를 이용할 때에는 반드시 어떤 데이터를 저장할지를 토대로 적절한 자료구조를 고민해보아야 한다. Redis는 이렇게 다양한 자료구조를 제공해주기 때문에 개발 편의성이 좋고, 개발 시간도 단축할 수 있다는 장점이 있다.
TTL(Time To Live)이란?
Redis는 In-Memory 방식으로 동작되는 데이터베이스이기 때문에 메모리에 저장될 수 있는 데이터의 크기가 한정적이다. 따라서 메모리에 데이터가 가득 차게되면 데이터를 더 이상 저장할 수 없는 등의 문제가 발생할 수 있다.
Redis는 데이터를 저장할 때 데이터의 사용기간을 지정해줄 수 있다. 삭제되야할 시간을 정확하게 지정해줄 수도 있고, 얼마 뒤에 삭제되어야 하는지 시간 단위(예 5분 뒤)와 같이 지정해줄 수도 있다. 이 TTL은 오직 Key 값에만 지정해줄 수 있다는 것도 기억해야한다.
2. Memory에 데이터를 저장하는 In-Memory 방식으로 작동한다.
Redis는 디스크(예 하드디스크)가 아니라 메모리에 데이터를 저장하는 In-Memory 방식으로 작동한다. 따라서 데이터에 대한 접근 속도가 매우 빠르고 지연시간도 낮다. 따라서 빠른 데이터 처리가 필요한 애플리케이션에 유용하다.
메모리의 데이터는 전원 문제가 발생하면 데이터가 손실될 수 있다는 단점이 있다. Redis는 영속성을 위한 RDB,AOF 같은 옵션을 적용한다. 하지만 일반적으로는 영속성을 위한 용도로 Redis를 활용하지는 않는다.
3. Single-Thread로 동작한다.
Redis는 기본적으로 싱글 스레드로 동작하는 구조를 가지고 있다. 따라서 다중 스레드를 사용할 때 발생할 수 있는 경쟁상태(Race Condition)이나 교착상태(Deadlock) 문제를 피할 수가 있다는 장점이 있다.
싱글 스레드로 동작하는 Redis를 이용해 락을 구현하는 것과 같이 동시성 문제 해결을 위해 활용하는 것도 가능하다.
단점으로는 싱글 스레드이기 때문에 병럴 처리에 제한이 있고, Redis 한 대로만 운영할 경우 단일장애점이 될 수 있어 위험할 수 있다. Redis는 이에 클러스터링이라는 기능을 지원한다. 클러스터를 구성해 여러 인스턴스에 데이터를 분산시켜 부하를 분산하고 성능도 향상시킬 수 있다.
여기까지 레디스의 기본적이고 대표적인 특징에 대해 정리해보았다. 프로젝트에는 레디스를 캐시 저장소로써 활용하게 될 것 같다. 이런 활용법 말고도 레디스는 다양한 상황에서 활용할 수 있다. 사용법 자체는 그리 어렵지 않기 때문에 잘 찾아보고 이용할 수 있을 것 같다. 사용법보다는 어느 상황에서 어떻게 잘 활용할 수 있는지를 잘 고민하는 것이 더 중요한 것 같다. 잘 고민해보고 레디스를 잘 도입해보아야겠다.
2. 오늘 배운 것
- 프로젝트 첫 날이다. 계획은 잘 세웠고 내일부터 열심히 하면 될 것 같다.
- Redis 기본 개념에 대해 공부해보았다. 잘 활용할 수 있도록 해보아야겠다.
'오늘 배운 것' 카테고리의 다른 글
24-07-07 알고리즘 문제 풀이 (0) | 2024.07.08 |
---|---|
24-07-04 PostgreSQL 더미 데이터 생성하기 (0) | 2024.07.04 |
24-07-02 프로젝트 첫 날 (0) | 2024.07.02 |
24-07-01 NAPT (0) | 2024.07.01 |
24-06-30 알고리즘 문제 풀이 (0) | 2024.06.30 |