강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

이찬미님의 프로필 이미지
이찬미

작성한 질문수

[개념 & 이론] 대기업 근무하며 경험한 Redis를 야무지게 사용하기

비트맵 자료구조 관련 질문

해결된 질문

작성

·

18

·

수정됨

1

비트맵 자료 구조 강의를 수강하고, 해당 자료구조가 활용되는 상황에 대해 이해하지 못한 부분이 있어 질문 드립니다.

  1. 강의에서 말씀하신 비트맵을 사용하지 않았을 때 유저마다 고유한 키 값으로 string set으로 저장한다는 의미가 무엇인가요? 유저의 고유 키마다 쿠폰에 대한 set이 있고, 어떤 쿠폰이 발급됐는지 저장하는 구조인가요?

  2. 강의에서의 상황은 유저가 해당 쿠폰을 발급 받았는지를 식별하기 위한 상황인가요? 해당 정보를 DB가 아닌 레디스에 저장할 이유가 무엇인가요? 아니면 둘 다 저장하는 방식인가요?
    만약 해당 쿠폰을 발급할 수 있는 기간이 일주일이면 일주일 동안 레디스에 해당 정보가 만료되지 않고 유지되어야 할까요?

  3. 해당 상황은 쿠폰 번호가 유저마다 다른가요, 다 같은 쿠폰 번호인가요? 만약 다른 쿠폰 번호라면 db에 따로 저장이 되어야 할까요?

감사합니다.

답변 1

1

Hong님의 프로필 이미지
Hong
지식공유자

네 이찬민님 질문 감사합니다.

 

  1. String Set 방식의 의미

네 우선 틀린말은 아닙니다. 유저의 고유 키마다 쿠폰 Set이 존재 할 수 있고, 이를 통해서 어떤 쿠폰을 발급받았는지 저장하는 구조가 되거나, 아니면 하나의 서비스가 런칭되었을 떄 쿠폰을 포괄적으로 저장하고 그 값들을 Set으로 관리 할 수 있겠죠

 

둘다 가능합니다. 일단 기본적으로 유저의 고유 키마다 쿠폰 Set이 있다고 가정해 볼게요. 이 방식은 유저 수가 많아지면 당연하게도 각 유저마다 키가 생성되고 쿠폰 ID를 문자열로 저장하기 떄문에 메모리 사용량이 많아지는 구조가 될 겁니다. 근데 이걸 비트맵으로 기준을 잡을 수 있다면 쿠폰 기준으로 키를 만들고 유저 발급 여부를 1비트로 표현 할 수 있어서 메모리 관리 측면에서는 훨씬 효율이 좋은거죠

 

  1. Redis 사용 이유와 저장 방식

일단 관점은 일시적인 서비스라는 관점입니다. 당연하게도 영속성이 유지가 되어야한다면 DB에 넣는것이 안전할거에요. 하지만 일부 Latency를 위해서 Redis를 InMemory DB로 사용하는 케이스도 존재합니다.

현실적으로 실무에서는 Redis와 DB 둘 다 저장을 하게 될 겁니다. 일종의 Redis는 특정 이벤트 기간동안 중복 체크용으로 둘 수가 있고, DB는 영구적인 기록과 쿠폰 사용 이력을 관리 할 수 있겠죠

 

  1. 쿠폰 번호 관리

뭐 상황에 따라 다르겠지만 구현하는 방식에 따라 달라요. 유저마다 다른 고유 쿠폰 코드를 발급한다고 가정해볼게요. 같은 "5000원 할인 쿠폰"이지만, 유저마다 특정 고유 코드를 부여하는거죠.

이 과정에서 Redis 비트맵이 사용이된다면 쿠폰 타입 단위로 "이 타입의 쿠폰을 이미 받았는지"를 체크하는 용도로 사용이 될 수 있는거죠.

 

혹시 어느정도 이해가 되셨을까요?? 사실 구현 방식이 현실적으로 상황에 다르다보니깐.... 막 정의내리기 힘들기는 하지만 각각 상황에 따라서 어울리는 관점으로 구현하시면 되는거고 그 상황에서 선택 할 수 있는 선택지가 비트맵 or Set이라고 봐주시면 됩니다.

 

 

이찬미님의 프로필 이미지
이찬미
질문자

네 설명해주신 내용을 바탕으로 어떤 상황에 적용할지 생각하는 과정에서 헷갈렸던 것 같은데 설명해주신 덕에 이해되었습니다.

답변 감사합니다!

이찬미님의 프로필 이미지
이찬미

작성한 질문수

질문하기