CS/데이터베이스

프로젝트에 Redis를 도입하는 근본적인 이유 (feat. 기술 면접)

stars_one 2025. 3. 5. 19:54

 

엮은이는 자신있게 대답할 수 있어요!

 

0. 우당탕탕 모의 기술 면접

 

최근, 기술 면접(모의 면접)을 볼 수 있는 기회가 생겨서 경험해보았다.

이번 기술면접은 스프링 위주의 질문들이 대부분이었다.

 

아무래도 지금 하고 있는 부트캠프가 스프링부트 관련이다 보니,

면접관(멘토님)이 스프링 부트 관련 질문만 하실 수 밖에 없다.

 

면접 질문의 절반은 대답을 못한 것 같다...

아무래도 프로젝트에만 집중을 하고, 스프링부트 관련 개념들과 동작방식은

구체적으로 공부하지 못한 탓이라고 생각한다.

(그래도 프로젝트 관련 질문은 답변을 할 수 있었다!! 하하..?..하?)

 

 

그러다가 Redis 관련 질문이 나왔고,

Redis를 왜 사용하는지에 대한 질문이 나왔다.

 

그때 나는,

대용량 트래픽으로 인해, 순간적으로 몰리는 쿼리 수행으로 인한 데이터베이스 과부하를 방지하고자

캐싱 전략을 사용하기 위해 Redis를 사용한다고 답변했다.

 

뭔가 참 애매한 답변이었다. 아니나 다를까 면접관님께서는 애매한 답변이라는 피드백을 주셨다.

 

레디스가 최근 라이센스 이슈가 있다고 하네여

 

아무래도 Redis를 사용만 해봤지, 근본적으로 왜 사용하고, Redis의 정확한 역할이 무엇인지 깊이 고민해보지 않았기 때문이다.

 

그래서 이번에는 Redis는 무엇이고, 근본적으로 왜 사용하는 지에 대해 이야기 해보려고 한다.

 


 

1. 레디스 도입을 고민하게 된 이유 (인메모리 저장소의 필요성)

 

나는 스프링부트를 사용하면서 mariadb, mysql, postgreSQL 등등(RDBMS)

관계형 데이터 베이스(RDB)를 사용했다.

이러한 관계형 데이터베이스를 사용하는 주된 목적은 아무래도 "영속성 데이터"를 위해서 이다

즉, 파일시스템에 데이터를 저장함으로써, 서비스가 종료되더라도 데이터가 없어지지 않고 유지시키기 위해서이다.

 

그런데 이번에 온라인 주문 플랫폼 서비스를 제작하면서,

"사용자 액세스 토큰 정보, 장바구니 데이터, 등과 같은 일시적인 데이터는 어떻게 관리해야 할까?" 

라는 고민이 생겼고,

이는 레디스 도입을 고려하게 되는 계기가 되었다.

 

 

 

왜냐하면 이 정보들은 사용자의 행동에 따라 너무 빈번하게 데이터 수정이 발생하기 때문이다..!

 

이러한 상황에서, 너무 빈번하게 변하는 정보들을 내가 기존에 사용하던 RDB를 사용하여 구현하기에는,

파일 시스템에 데이터를 저장하는 특성상 속도가 느릴 수 밖에 없다. 

(데이터 쓰기 작업은 읽기 작업보다 느리다)

 

그래서 파일시스템을 사용하는 데이터 베이스 대신,

메모리를 사용해 데이터를 일시적으로 보관하는 데이터베이스를 찾아보게 되었고

그게 Redis 이다!

 


 

2. Redis는 무엇이고, 왜 사용할까

Redis(Remote Dictionary Server)는 java의 map과 같은 방식으로 데이터를 저장합니다.

 

일반적인 관계형 데이터베이스와 가장 다른 특징은, In-Memory 데이터베이스라는 점입니다.

 

파일시스템에서 데이터 변경

 

RDB는 데이터 영속성을 제공하는데 목적을 두고 있고,

이는 데이터가 사라지지 않게 하기 위해 파일시스템(SSD,HDD)에 저장한다는 의미이며,

컴퓨터가 종료되어도 데이터가 사라지지 않습니다.

기본적으로 데이터를 읽고 쓰는 작업이 오래걸립니다.

 

메모리에서 데이터 변경

 

하지만 Redis는 메모리(RAM)에 데이터를 저장하기 때문에,

복잡한 입출력 과정이 필요하지 않고, RDB에 비해 빠르게 읽기/쓰기가 동작합니다.

 

빠르게 동작하는 대신, 언제든 사라질 수 있는 데이터를 다룬다는 차이를 가진다고 보면 됩니다.

 

그래서, 빠르게 업데이트되는 정보들을 위해서 많이 사용되는 데이터베이스 입니다.

(사용자 세션정보, 조회수, 장바구니 데이터 등등)

 

앗 그리고 Redis는 NoSQL입니다!!

Key-Value 방식으로 작동합니다!!

 

더보기

이야기를 좀 덧붙이자면,

관계형 데이터베이스가 가진 약점인,

확장성, 유연성, 성능에 대한 문제를 해결하기 위해 NoSQL이 사용되는 경우가 많습니다.

요즘에는 비정형 데이터를 더 높은 성능을 위해 사용하는 경우가 많아여!

 

NoSQL 데이터 저장방식

 

위의 사진에서 볼 수 있는 것처럼

관계를 기준으로 데이터를 다루지 않기때문에 스키마를 만들지 않습니다.

그렇기 때문에 비정형 대규모 데이터를 매우 빠르게 다룰 수 있습니다.

 

 

 

정리하자면,

 

Redis는 NoSQL/key-value 방식으로 작동하는 인메모리 데이터베이스이고,

지연이 적은 읽기/쓰기 성능을 가졌습니다.

 

그렇기 때문에 일시적인 데이터 변경이 빈번한 데이터를 다뤄야 하는 상황에서 많이 사용된다고 볼 수  있습니다!

(장바구니 데이터, 사용자 세션 정보, 조회수 등등)

 

 

 

끝으로, Redis를 활용하여 쉽게 구현할 수 있는 기능들 입니다!

더보기
  • Session Clustering: 여러 애플리케이션 인스턴스에서 같은 세션 정보를 사용할 수 있도록 도와줍니다.(레디스에서 세션을 직접관리해줌 ㄷㄷ, 원래 JSESSION은 TOMCAT이 관리함)
  • Caching: 자주 사용되는 데이터를 저장해두어, 데이터베이스 조회를 줄이고 전반적인 응답속도를 개선합니다.
  • 지원하는 다양한 자료구조를 바탕으로 리더보드, 방문수 트래킹, 좌표 기반 검색 등의 기능을 쉽게 구현할 수 있게 해줍니다.
    (Redis 공식문서에서, 몇몇 데이터를 조회하는 명령어(여러가지 있음)들의 시간복잡도가 O(1) 이라고 하네여 ㄷㄷ)
728x90