레디스(Redis) 파헤치기 (1) - 기본 개념 및 특징

김민건·2022년 5월 8일
0

기술

목록 보기
18/19

#주저리주저리

싸피 입과 전, 신생 스타트업에서 근무를 할 때, Redis를 사용하여 서비스를 구성하였다.
하지만 단편적인 지식만을 가지고 접근하여 Redis가 가진 특성을 100% 발휘하지 못했던 것 같아, 이번 기회에 정리해보려고 한다.
최근 여러 기업들의 기술 블로그를 탐방하는 과정에서 Redis가 생각보다 다양한 활용 방법이 있다는 것을 뼈저리게 느끼게 되었고, 이와 관련된 내용을 담아 글을 적어보려한다.

다만 이번 글에서는 레디스와 관련된 전반적인 내용들만 간략히 다루고, 이런 특성들이 응용되는 방법이나 세부적인 동작 방식들에 대해서는 차례차례 정리하는 시간을 가져보려 한다.

(최근 IT기업들의 기술 블로그에서 현업에서 발생하는 문제를 해결한 케이스들을 탐방하는 데에 많은 시간을 보냈는데... 차마 이와 관련된 포스팅을 할만한 지식이 아직 부족하다고 생각해서 미루다가 하나하나 관련 글을 작성해보려고 한다ㅠ)

Redis란?

Redis는 인메모리 데이터 저장소 중 하나이다. 같은 메모리 기반의 데이터 저장소인 Memcached와 자주 비교되는데, 이는 같은 종류임에도 불구하고 각각이 지니는 특성이 많은 부분에서 다르고, 그로 인한 차이점과 영향에 대해서 개발자가 직접 알고 다룰 수 있어야하기 때문이다. 먼저 Redis가 지니는 특징부터 하나하나 살펴보자.

Redis 특징

In-Memory, Key-Value 기반의 데이터 저장소

Redis는 기본적으로 In-Memory, Key-Value 기반의 데이터 저장소이다. 실제로 직접 사용하게된 케이스도 휘발성 데이터에 대해 불필요한 디스크로의 접근을 최소화하여 성능을 높이고, 기본적으로 키에 대응하는 값을 가져오는데 O(1)이라는 높은 수준의 시간복잡도 (자료구조나 명령어마다 다르지만) 를 적절히 사용하기 위함이였다.

다양한 자료구조 제공

또한, 다양한 자료구조를 제공하기 때문에 개발 시 생산성과 편의성을 증진시킬 수 있다는 장점을 가지고 있다. 다만, 적절한 자료구조를 선택하지 못하거나, 내부 동작에 대한 확실한 이해가 없는 경우 성능에 영향을 줄 수 있기에 무작정 사용해서는 안된다.
레디스(Redis) 파헤치기 (2) - 자료구조

싱글 쓰레드

Redis는 또, NodeJS처럼 실행 흐름 자체는 싱글 쓰레드로 동작하기 때문에 데이터에 접근할 때, 여러 쓰레드들에 대한 동기화를 고려하지 않아도 된다. ( 내부적으로는 각종 서브 쓰레드들의 지원을 받아 처리되지만, 대부분의 사용자 요청에 대해서는 메인 쓰레드가 온전히 담당한다 )
다만, 이로 인한 단점도 있기 때문에 Redis가 싱글 쓰레드로 동작한다는 점을 인지하고 사용해야한다.

디스크 기반의 영속성 관리

추가적으로 Redis는 메모리 기반의 데이터 저장소지만, 백업을 위해, 혹은 메모리 부족을 방지하기 위해 디스크 공간을 적절히 사용한다. 게다가 기본적으로 Replication 기능도 제공한다. 따라서 메모리 기반의 저장소임에도 불구하고 데이터 보존에 강인하다는 특징을 가지지만, 성능 혹은 메모리 상의 이슈가 발생할 수 있다.

마치며

이번 게시글은 단순히 Redis의 주요 특징들과 그에 대한 핵심 개념만을 나열하는 형태로 작성하였다. 하지만 이 내용은 극히 일부분일 뿐이며, 내부적으로 이런 특징을 어떻게 가지게 되었고 세부 내용에 대해서도 숙지해야만 Redis를 실무에서 적절히 사용할 수 있다고 생각한다.

앞으로 약 한달 동안 매주 하나의 핵심 내용에 대해서 추가적인 링크를 추가하여 글을 수정할 예정이다.

References

profile
백엔드 꿈나무

0개의 댓글