Inflearn brand logo image

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

구태형님의 프로필 이미지
구태형

작성한 질문수

대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [이론편]

Redis Collection BitMaps

해결된 질문

작성

·

105

1

안녕하세요 강의를 듣다가 잘 이해가 안가는 부분이 있어서 질문드립니다.

비트맵을 사용할 때, 사용자 수가 100만명인데 실제 사용자 수는 100명인 경우 메모리 낭비가 발생한다는 부분은 이해했습니다.

이를 위해 구분자가 있는 데이터를 지정하고 활용하는 것이 좋다고 말씀하셨는데 구분자가 있는 데이터가 어떤 것인지 제대로 이해가 안 가서 질문드립니다..

 

섹션3 - BitMaps Collections

https://www.inflearn.com/course/redis-%EC%95%BC%EB%AC%B4%EC%A7%80%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-%EC%9D%B4%EB%A1%A0%ED%8E%B8/unit/244780

답변 2

1

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

안녕하세요 질문 주셔서 반갑습니다.

좋은 질문이라고 생각을 해요. 해당 부분에 대한 문제는 실무에서도 많이 고려하고 작성이 되는 부분입니다.

 

유저에 대한 정보는 보통 PK를 사용한 increment필드를 많이 사용을 하기도 합니다.

하지만 increment 컬럼은 사실 PK에 대한 값이 따로 관리가 되기 떄문에 반드시 순차적으로 증가한다고 볼 수가 없어요.

또한 추가적으로 보안적인 이슈가 있을수도 있겠죠

 

그래서 보통은 ULID나, UUID를 많이 사용을 하고는 합니다.

하지만 이렇게 보안적으로 큰 문제가 되지 않을 수 있는, 말씀드린 쿠폰 서비스 같은 부분에서도 사실 increment필드가 사용이 되어도 무방하겠다는 생각을 합니다.

 

예시를 들어서 설명을 드리다보니 조금 혼동이 오실 수도 있을꺼같은데,

쉽게 말해서 유저마다 고유한 값을 가질 수 있는 구분자를 사용해야 한다는 부분입니다.

이러한 구분자가 없다면, 중복된 유저가 체크가 될 수 있는 부분이 있겠죠

예를들면, A라는 유저의 구분자는 1인데, B라는 유저의 구분자도 1이라면
A와 B가 같은 유저로 bitMaps에서는 판단이 되겠죠

 

이러한 이슈가 생길 수 있으니, 해당 부분을 고려하여 사용을 하라는 의미로 말씀 드렸습니다.

이해가 되셨기를 바라며 ㅎㅎ 질문 감사드리고 날씨가 많이 춥습니다.... 건강 조심하시고 재미있는 개발 하시기를 바랄게요!!

  • 추가로 질문이 있다면 편하게 부탁드립니다. 답변이 늦어서 죄송합니다 ㅠ.ㅠ

0

안녕하세요, 인프런 AI 인턴입니다. 구태형님.

비트맵을 사용하면서 사용자 수가 매우 많은 경우, 실제 사용자가 적을 때 메모리 낭비가 발생할 수 있다는 것을 이해하신 부분은 중요합니다. 비트맵은 특정 비트의 위치로 상태를 나타내기 때문에, 모든 사용자를 동일하게 관리하면 실제 데이터 사용보다 많은 메모리를 잡아먹을 수 있습니다.

구분자가 있는 데이터 사용의 의미:

  1. 구분자 사용 이해하기: 구분자가 있는 데이터를 활용한다는 것은, 데이터를 그룹으로 나누어 각 그룹에 대해 별도의 비트맵을 사용한다는 의미입니다. 예를 들어, 사용자들의 관심사, 위치, 또는 가입한 날짜에 따라 사용자 그룹을 나누고 각 그룹에 대해 별도의 비트맵을 생성하여 관리하면 됩니다. 이를 통해 전체 데이터 크기를 줄이고, 필요한 부분만 캐싱하여 메모리 효율을 높일 수 있게 됩니다.

  2. 구체적인 예시: 사용자가 100만명이 있고 그 중 활동적인 사용자만을 비트맵으로 나타내려 한다면, 사용자의 활동성이 높거나 중간, 낮음과 같은 기준으로 나누어 각 그룹에 대한 별도의 비트맵을 생성합니다. 예를 들어 "active:group1", "active:group2" 등의 키를 만드는 방식입니다.

아래 링크에서 자세한 비트맵과 관련된 효율적인 데이터 관리 기법에 대한 논의를 확인할 수 있습니다:

이를 통해 비트맵 사용의 효율성을 극대화할 수 있는 방법을 더 깊이 이해하실 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

구태형님의 프로필 이미지
구태형

작성한 질문수

질문하기