본문 바로가기

좋아하는 것_매직IT/9.redis

8.Redis, 레디스의 데이터 구조 그리고 키는 어떻게 설계할까요?

반응형

Redis 그리고 Data 구조

  • Redis 는 거대한 Key-Value 저장소, 즉 거대한 맵(Map 데이터 구조) 저장소 임.
      • 맵 데이터 구조는 위와 같이 Key 하나에 Data 하나가 저장되는 매우 단순한 구조임.
        • 이것이 Redis 의 가장 큰 장점이자 단점이라고 할 수 있음.
        • 장점
          • 익히기 쉽고 직관적임.
        • 단점
          • 저장된 데이터를 가공하는 방법에 제한이 있게됨.
          • Redis 는 이러한 가공 방법의 제한을 다양한 종류의 데이터형과 명령을 통해서 보완하고 있음.

Redis Key 설계에 대해서..

  • NoSQL에서 데이터를 조회하기 위한 가장 기본적인 값은 "KEY"
    • 관계형 데이터베이스에서 말하는 테이블의 Primary Key와 동일한 개념이라고 보면됨.
    • 즉, Key 하나가 하나의 레코드를 정의한다고 보면 됨.
  • Key에 의미를 부여하기 위하여 콜론(:) 기호를 사용함.
  • 대부분, NoSQL은 단일Key에 의해서 데이터를 처리하기 때문에 관계형 데이터베이스에 비하여 정보를 구조적으로 저장하고 조회하는 능력이 상대적으로 떨어짐.
    • NoSQL은 관계형 데이터 베이스의 구조적이며, 중복을 지양하는 저장 방법을 희생하여 단순한 구조의 대량 데이터를 저장하고 조회하는데 초점을 맞추어 개발되었기 때문에...
  • NoSQL의 단순성을 해치지 않고, 정보를 효율적으로 저장할 수 있는 방법이 바로 "Key 설계" 임.
    • 즉, 관계형 데이터베이스의 테이블 설계와 유사한 개념으로 볼 수 도 있음.
728x90
  • Redis의 Key 설계 방법
    • 첫째, 관계형 데이터 베이스의 스키마를 기본으로 Redis의 저장구조로 바꾸는 방법
    • 둘째, 화면에 출력될 데이터를 기준으로 설계하는 방법
    • 단, 위의 2가지 모두 Key 에 부가적인 정보를 포함함.
    • Key 설계가 완료된 시점에서 Key는 조회조건, Value는 화면에 출력되는 내용임.
    • 관계형 데이터베이스와 NoSQL의 데이터 설계순서
      • 관계형 데이터베이스
      • 업무 도메인 분석, 정보 개체 정의, 개체 간 관계정의 순서로 분석하고 스키마를 설계하고 쿼리문을 통해서 데이터를 조회함.
      • 다시말해서, 최우선 조건은
        • 데이터의 관계
      • NoSQL 
        • 업무 도메인 분석, 조회할 데이터, 개체 정의의 순서로 분석하고 데이터를 저장하고 조회함.
        • 다시말해서, 최우선 조건은
          • 쉽고 빠른 조회
      • 즉, 관계형 데이터베이스와 NoSQL은 데이터를 바라보는 관점이 완전히 다름.
        • 관계형 데이터베이스에서는 데이터를 조회하고 할 때, 저장된 데이터에 대한 부분 정보를 가지고 있고, 이부분 정보를 검색조건으로 하여 전체 정보를 조회함.
        • 관계형 데이터베이스의 조회예시
          • SELECT * FROM T_USER WHERE ID='thub';
        • Redis 에서의 조회 예시
          • redis 127.0.0.1:6379> get user:id:thub
        • Redis 에서는 값에 부분정보가 포함되는 것이아니라, 키 정보에 부분정보가 포함됨.
        • 즉, 정보가 저장되는 위치가 달라지게됨.
          • 관계형 데이터베이스 스키마
          • Redis 데이터 저장구조
            • Key 이름 중 포함된 Doc는 이 Key가 사용자가 작성한 글의 정보를 저장하고 있다는 의미임.
            • 중간에 사용된 User No.는 관계형 데이터베이스 스키마 중 사용자 테이블의 사용자 번호 필드를 의미함.
            • Doc No. 는 작성 글 테이블의 작성글 번호 필드를 의미함.
            • 즉 Redis 에서는 Key를 설계할때, 관계형 데이터 베이스 테이블의 Primary Key를 조합하여 Redis 의 Key로 사용하도록 설계함.
            • 설계의 특징
              • 특정 사용자의 특정 글을 한번의 데이터 조회 연산만으로 조회할 수 있다는 것에 있음.
728x90

결론

  • Redis 는 거대한 Key-Value 저장소라고 이해하면됨.
  • 관계형 데이터베이스와 NoSQL은 데이터를 바라보는 관점은 아래와 같다.
    • 관계형데이터베이스
      • 데이터의 관계
    • NoSQL 
      • 쉽고 빠른 조회
  • Redis 의 성능을 100% 활용하려면, Redis의 Data 저장 구조를 잊지 말아야함.
    • 관계형 데이터베이스 와 NoSQL은 전혀 다른 요구사항에 따른 결과물이기 때문에...
  • 여러상용 서비스 프로젝트에서 관계형 데이터베이스를 NoSQL로 대체하기 위한 실험과 노력을 했지만 사실상 실패로 돌아간  사례가 많음.
    • 실패의 가장 큰원인
      • 서비스의 모든 기능을 NoSQL을 사용해서 구현하려고 했기 때문에...

  • 오늘의 명언 한마디
    • 투자나 어떤 중대한 결정을 내릴 때, <사실>과<의견>을 걸러내고, 그런 후에 결정을 내려야 한다. -로버트기요사키, 『부자아빠, 가난한아빠2』 중에서..

  • 오늘의 영어 한마디
    • 질문) Did you have fun?
      • 재미있었어?
    • 대답) Yeah. it was great!
      • 응. 정말 굉장했어!
    • 해설)
      • "have fun"은 즐거운 경험을 하다.
      • "Did you have fun?" 은 상대방의 이야기를 더욱 재촉할 때 많이 쓰이는 표현임.
      • 이야기를 들은 후에 "It sounds like you had a great fun." 
        • "아주 재미있었겠다" 라고 맞장구를 처주는 게 보통..^^
728x90
300x250