Top

개발자를 위한 레디스 [효율적인 개발을 위한 인메모리 데이터베이스 사용 가이드]

  • 지은이김가림
  • ISBN : 9791161757926
  • 38,000원 (eBook 30,400원)
  • 2023년 11월 08일 펴냄
  • 페이퍼백 | 432쪽 | 188*235mm
  • 시리즈 : 오픈소스 프로그래밍

책 소개

요약

개발자가 인메모리 데이터베이스인 레디스를 잘 활용할 수 있도록 초점을 맞춘 포괄적인 안내서다. 레디스를 처음 배우는 독자나 NoSQL 데이터베이스의 개념을 쌓고자 하는 개발자를 위해, 레디스의 기초부터 활용 방법까지 소개하며 입문자도 이해할 수 있는 내용을 제공한다. 레디스를 어떤 상황에서 효율적으로 활용해야 할지 고민하는 개발자에게는 실제 적용 시나리오와 최적의 사용법에 대한 가이드를 제공해 응용 가능한 전략을 제시한다. 레디스의 장애를 최소화하고 성능을 향상시키기 위한 방법을 다루며, 이를 통해 이미 사용 중인 개발자도 레디스 환경을 안정화하고 최적화할 수 있다.
레디스를 캐시 및 세션 스토어로 활용하고, 메세지 브로커로 사용하는 방법에 대한 실전 예제와 구체적인 구현 방법을 제시한다. 또한 레디스 데이터의 영구 저장 방법과 고가용성 설정을 위한 복제 구조, 센티널 및 클라이언트 형태로 사용하는 방법을 소개한다. 이를 통해 안정적이고 확장 가능한 레디스 환경을 구축할 수 있을 것이다. 뿐만 아니라 클라이언트 핸들링과 보안에 대한 내용을 다루며, 레디스를 실제 운영 환경에서 안전하게 관리하고 활용하는 방법을 설명한다. 레디스의 모니터링을 구성하는 방법과 다운타임을 최소화하면서 버전을 업그레이드하는 방법을 다뤄 레디스 시스템의 안정성과 성능을 지속적으로 향상시킬 수 있도록 돕는다.

책의 내용은 레디스의 최신 버전인 7버전을 기준으로 작성됐으며, 국내에서는 아직 잘 알려지지 않은 신규 기능들인 stream, sharded pub/sub, ACL 그리고 클라이언트 사이드 캐싱 등에 대해 상세히 설명한다. 이러한 기능들은 레디스의 활용 범위를 더욱 넓히며, 독자들에게 레디스의 깊은 이해와 효율적인 활용에 대한 풍부한 인사이트를 제공할 것으로 기대한다.

추천의 글

레디스를 소개하는 서적이 생각보다 많지 않고, 운영 관점에서 이를 설명하는 책은 특히 많지 않습니다.
『개발자를 위한 레디스』는 실제로 SaaS 형태로 레디스를 제공해본 경험이 있는 분이 레디스를 운영하면서 만났던 많은 운영 노하우를 잘 집약해놓은 책입니다.
레디스를 소개하면서 레디스에 경험이 많지 않은 경우에도 쉽게 이해할 수 있도록 풀어서 설명할 수 있고, 아직 겪지 않은 여러 가지 장애 상황을 피해 갈 수 있는 보물 같은 내용이 들어 있습니다.
또한 아직 국내에 소개되지 않았던 최신 기능들(ACL, Sharded Pub/Sub, Cluster)에 대한 자세한 설명이 소개돼 있습니다. 레디스에 관심이 있으신 분들에게 강력히 추천합니다.
─강대명(레몬트리 CTO, 레디스 컨트리뷰터)

레디스는 다양한 비즈니스 요구 조건, 특히 응답 속도와 관련된 요구 조건을 만족하기 위한 캐시 용도로 사용되는 인메모리 기반 데이터 플랫폼 중에서 가장 많이 사용되고 있습니다. 다양한 곳에서 여러 가지 용도로 사용하고 있지만, 참고할 만한 전문적인 기술서가 부족한 것도 사실입니다.
『개발자를 위한 레디스』는 레디스에 대해 설치와 구성을 포함한 기본 개념부터 잘 사용하기 위해 필수로 알아야 하는 data structure 등의 핵심을 다루고 있으며, 실제 구축 예시도 포함하고 있어서 레디스를 사용하려는 개발자 및 관리자들에게 멋진 참고서가 될 것이라고 생각합니다.
그동안 레디스 관련 참고서가 부족하다고 많이 아쉬웠는데, 지은이의 다년간의 레디스 운영 및 고도화 경험이 잘 녹아 있는 이 책을 만나 참 다행입니다.
─이덕현(AWS Senior Database Specialist Solutions Architect)

점점 더 많은 트래픽을 처리하게 되면서 레디스의 역할이 점점 중요해지고 있습니다. 특히 게임이나 실시간 이벤트 처리를 위해서는 반드시 레디스 등의 캐시가 필요합니다. 이런 중요한 기술인 레디스 관련 책이 시중에 거의 없는 상황에서 『개발자를 위한 레디스』는 정말 알토란 같은 책이라고 생각합니다. 이 책은 레디스를 사용하거나 운영하고 있는 개발자들에게 큰 도움을 줄 것입니다.
─오윤택((주)우아한형제들 Database Engineer)

NoSQL은 RDBMS와 함께 핵심 데이터베이스로 자리 잡고 있습니다. 그로 인해 NoSQL은 더 이상 선택이 아닌 필수가 됐으며, NoSQL의 다양한 제품 중에서도 레디스는 많은 기업에서 사용하는 데이터베이스로 성장했습니다. 지은이는 이러한 기술의 변화에 맞는 지식과 운영 경험을 기반으로 독자가 레디스를 충분히 이해하고 활용할 수 있도록 정보를 제공하고 있습니다.
이 책은 명확한 개념 설명과 실제 사례를 통해 레디스를 처음 접하는 독자가 쉽게 따라갈 수 있도록 전문적인 내용을 담백하게 기술하고 있습니다. 특히 특정 비즈니스 상황을 RDBMS의 사례와 함께 제시함으로써 RDBMS에 익숙한 실무자들이 비즈니스에 빠르게 적용하는 데 많은 도움이 될 것입니다.
─김정민(NHN Cloud Data Architect)

데이터의 각각의 성격도 너무나 다르고 빠르게 변해가는 환경 속에서 어느샌가 레디스는 운영 환경에서 빼놓을 수 없는 존재가 돼 버렸습니다. 그럼에도 불구하고 레디스가 무엇인지, 어떻게 사용해야 하는지, 어떻게 관리해야 하는지 접근이 막막한 경우가 많습니다. 이 책의 자세한 설명을 통해 많은 도움을 받았으며, 레디스에 대해 궁금해하시는 분들에게 좋은 참고서가 될 거라고 믿습니다.
─이재환(전 카카오뱅크 DBA, 현 우아한형제들 DBA)

이 책에서 다루는 내용

◆ 마이크로서비스 아키텍처에서 NoSQL 활용
◆ 레디스 설치, 환경 구성 및 기본 설정 파일 안내
◆ 레디스의 다양한 자료 구조 활용법
◆ 효율적인 키 관리 방법
◆ 레디스를 이용해 성능을 향상시킬 수 있는 다양한 실제 사용 예제
◆ 레디스를 캐시 및 세션 스토어로 활용하는 방법
◆ 레디스를 메시지 브로커로 활용하는 pub/sub 및 stream 사용법
◆ 레디스 데이터의 영구 저장 방법
◆ 고가용성 설정을 위한 복제 구조 및 센티널 활용
◆ 확장성을 갖춘 클러스터 사용 방법
◆ 클라이언트 핸들링과 보안
◆ 레디스 모니터링 구성 및 버전 업그레이드 방법

이 책의 대상 독자

◆ 인메모리 데이터베이스 개념을 처음 접하거나 알고 싶은 개발자
◆ 레디스를 어떤 상황에서 효율적으로 활용할 수 있을지 고민 중인 개발자
◆ 레디스의 장애를 최소화하는 방법을 찾는 개발자
◆ 고가용성과 확장성을 갖춘 레디스를 운영하고자 하는 개발자

이 책의 구성

1장에서는 소프트웨어 아키텍처의 변화와, 이로 인해 현대의 데이터 저장소가 어떤 요구 사항에 직면했는지 알아본다.
2장에서는 레디스를 설치하고, 실행하며, 간단하게 사용하는 방법을 소개한다.
3장에서는 레디스에서 제공하는 자료 구조의 종류와 특징, 각 자료 구조에서 사용할 수 있는 커맨드에 대해 알아볼 것이다. 또한 레디스에서 키는 어떻게 다뤄지는지도 살펴본다.
4장에서는 특정 상황에서 레디스의 자료 구조를 적절히 활용해 애플리케이션의 성능을 향상시키며, 동시에 개발의 단순함과 편의성을증대할 수 있는 방법을 소개한다.
5장에서는 레디스를 캐시로 사용하는 방법을 알아본다. 캐시란 무엇인지, 어떤 상황에서 캐시를 사용해야 하는지, 레디스를 캐시로 잘 사용하는 방법과 주의해야 할 점은 무엇인지 짚어본다. 또한 캐시와 비슷하면서도 다른 세션 스토어에 대해서도 함께 이야기할 것이다.
6장에서는 메시지 브로커의 핵심 역할을 알아보고, 메시지 브로커의 두 가지 형태인 메시징 큐와 이벤트 stream에 대해 소개한다.
7장에서는 데이터를 안전하게 저장하기 위해 레디스에서 지원하는 (RDB와 AOF)두 가지 백업 방식에 대해 알아본다.
8장부터는 레디스에서 고가용성을 보장하기 위한 기능들을 알아볼 것이다. 8장에서는 고가용성의 기본이 되는 복제 메커니즘에 대해 설명한다.
9장에서는 자동 페일오버 기능을 수행하는 자체 솔루션인 센티널의 개념과 동작 방식을 설명한다.
10장에서는 고가용성과 샤딩을 동시에 보장하는 클러스터 모드에 대해 알아볼 것이다.
11장에서는 레디스에서 제공하는 보안 기능에 대해 알아본다. bind 설정은 레디스가 사용할 ip를 지정한다. 레디스의 이전 버전에서는 각 인스턴스에 하나의 패스워드만 설정할 수 있었다. 하지만 버전 6에서 도입된 ACL 기능을 이용하면 유저를 생성한 뒤 각 유저별로 다른 패스워드를 설정할 수 있으며, 이를 통해 유저 간에 패스워드를 개별적으로 관리하고 다른 권한을 할당할 수 있게 됐다.
12장에서는 레디스가 클라이언트를 처리하는 방법에 대해 살펴볼 것이다. 클라이언트의 요청을 어떻게 처리하는지 그리고 클라이언트 연결을 어떻게 관리하는지를 다룰 예정이다. 또한 클라이언트 연결의 성능을 향상시키기 위한 파이프라이닝과 클라이언트 사이드 캐싱에 대해서도 간략히 살펴볼 것이다.
13장에서는 레디스를 잘 운영하기 위해 알아야 할 내용을 소개한다. 레디스를 장애 없이 운영하기 위해서는 레디스가 구축된 서버와 레디스 인스턴스를 실시간으로 모니터링해 운영 환경에 문제가 생기지 않는지 확인하는 과정이 필수적이다. 아울러 프로메테우스와 그라파나를 이용해 레디스 대시보드를 작성하는 방법에 대해 알아볼 것이다.

저자/역자 소개

지은이의 말

최근 애플리케이션 개발의 필수 구성 요소로 자리 잡은 레디스의 중요성은 나날이 커져가고 있습니다. 많은 개발자들이 다양한 서비스에서 레디스의 높은 성능을 활용해 효율적인 애플리케이션을 구축하고 있으며, 안정적인 데이터 관리와 빠른 접근성 사이의 균형을 이뤄내는 레디스는 많은 애플리케이션에서 점점 더 중요한 역할을 하고 있습니다. 높아지는 인기와 함께 레디스에 대한 깊은 이해와 활용 능력 역시 더 중요한 역량으로 인식되고 있습니다.
레디스는 다른 데이터 저장소에 비해 릴리스 속도가 비교적 빠르고 각 릴리스마다 유용한 신규 기능을 도입하고 있습니다. 레디스를 더 효율적으로, 더 광범위하게 활용할 수 있도록 하는 기능 업데이트는 계속되고 있지만 국내에서는 레디스에 대한 최신 정보를 제공하는 자료가 상대적으로 부족한 상황입니다. 이에 이 책을 통해 레디스의 최신 기능과 실용적인 활용 방안을 국내 개발자들에게 소개하고자 했습니다.
레디스를 운영하며 몇 차례 레디스로 인한 서비스 장애를 겪은 적이 있습니다. 레디스는 많은 서비스에서 핵심 요소로 활용되기 때문에 장애 상황이 발생하면 그 영향이 상당히 크게 느껴집니다. 이런 상황은 레디스의 올바른 운영과 최적화의 중요성을 깨닫게 해줬고, 레디스 관련 서비스 장애를 예방하거나 최소화하는 방법을 공유할 필요성을 느끼게 됐습니다.
레디스의 기본 구조부터 고급 기능 그리고 실제 운영 활용 방법에 이르기까지 폭넓은 내용을 소개하는 책입니다. 다양한 활용 사례와 함께 소개된 애플리케이션 성능 최적화 방법은 레디스를 이미 활용 중인 개발자뿐만 아니라 레디스 도입을 고려하는 개발자들에게도 큰 도움이 될 것으로 기대합니다. 운영 중 발생할 수 있는 일반적인 문제점과 실무에서 적용 가능한 해결 전략을 제시하며 효율적인 운영 방법을 소개함으로써 데이터베이스 관리자, 시스템 엔지니어 그리고 높은 성능과 신속한 데이터 처리가 필요한 다양한 IT 분야의 전문가에게도 도움이 되길 바랍니다.
이 책을 쓰면서 저도 레디스에 대해 많이 배웠습니다. 레디스의 새로운 기능을 알게 되는 동시에 내부 동작 방식을 좀 더 이해할 수 있었으며 여러 장애 포인트에 대해서도 깊게 고민할 수 있는 계기가 됐습니다.

지은이 소개

김가림

RDBMS부터 NoSQL까지 다양한 데이터베이스 시스템을 관리하고 운영하는 엔지니어. NHN에서 DBA로 경력을 쌓았으며, NHN CLOUD의 관리형 Redis DBaaS인 EasyCache 상품의 초기 개발 단계부터 참여해 이중화 및 내부 가용성 설계에 대한 고민을 함께했다. EasyCache의 내부 파라미터 최적화와 신규 기능 제안 등으로 상품의 개선에 기여해왔다. 현재는 ㈜우아한형제들에서 데이터베이스 엔지니어로 근무하고 있다. 데이터베이스와 관련된 다양한 측면에서의 경험과 지식을 바탕으로 이 책을 통해 독자들에게 유용한 정보를 전달하고자 한다.

목차

목차
  • 1장. 마이크로서비스 아키텍처와 레디스
    • NoSQL의 등장 배경
      • 모놀리틱 아키텍처
      • 마이크로서비스 아키텍처
      • 데이터 저장소 요구 사항의 변화
    • NoSQL이란?
      • 실시간 응답
      • 확장성
      • 고가용성
      • 클라우드 네이티브
      • 단순성
      • 유연성
    • NoSQL 데이터 저장소 유형
      • 그래프 유형
      • 칼럼 유형
      • 문서 유형
      • 키-값 유형
    • 레디스란?
      • 레디스의 특징
    • 마이크로서비스 아키텍처와 레디스
      • 데이터 저장소로서의 레디스
      • 메시지 브로커로서의 레디스

  • 2장. 레디스 시작하기
    • 레디스 설치하기
      • 소스 파일을 이용해 레디스 설치하기
      • 리눅스에 레디스 설치하기
      • MacOS에 레디스 설치하기
      • 윈도우에 레디스 설치하기
    • 레디스 환경 구성
      • 서버 환경 설정 변경
      • 레디스 설정 파일 변경
    • 레디스 실행하기
      • 프로세스의 시작과 종료
      • 레디스 접속하기
      • 데이터 저장과 조회

  • 3장. 레디스 기본 개념
    • 레디스의 자료 구조
      • string
      • list
      • hash
      • Set
      • sorted Set
      • 비트맵
      • Hyperloglog
      • Geospatial
      • stream
    • 레디스에서 키를 관리하는 법
      • 키의 자동 생성과 삭제
      • 키와 관련된 커맨드

  • 4장. 레디스 자료 구조 활용 사례
    • sorted set을 이용한 실시간 리더보드
    • sorted set을 이용한 최근 검색 기록
    • sorted set을 이용한 태그 기능
    • 랜덤 데이터 추출
    • 레디스에서의 다양한 카운팅 방법
      • 좋아요 처리하기
      • 읽지 않은 메시지 수 카운팅하기
      • DAU 구하기
    • hyperloglog를 이용한 애플리케이션 미터링
      • Geospatial Index를 이용한 위치 기반 애플리케이션 개발
      • 위치 데이터란
      • 레디스에서의 위치 데이터

  • 5장. 레디스를 캐시로 사용하기
    • 레디스와 캐시
      • 캐시란?
      • 캐시로서의 레디스
      • 캐싱 전략
    • 캐시에서의 데이터 흐름
      • 만료 시간
      • 메모리 관리와 maxmemory-policy 설정
      • 캐시 스탬피드 현상
    • 세션 스토어로서의 레디스
      • 세션이란?
      • 세션 스토어가 필요한 이유
      • 캐시와 세션의 차이

  • 6장. 레디스를 메시지 브로커로 사용하기
    • 메시징 큐와 이벤트 스트림
      • 레디스를 메시지 브로커로 사용하기
    • 레디스의 pub/sub
      • 메시지 publish하기
      • 메시지 구독하기
      • 클러스터 구조에서의 pub/sub
      • sharded pub/sub
    • 레디스의 list를 메시징 큐로 사용하기
      • list의 EX 기능
      • list의 블로킹 기능
      • list를 이용한 원형 큐
    • Stream
      • 레디스의 Stream과 아파치 카프카
      • 스트림이란?
      • 데이터의 저장

  • 7장. 레디스 데이터 백업 방법
    • 레디스에서 데이터를 영구 저장하기
    • RDB 방식의 데이터 백업
      • 특정 조건에 자동으로 RDB 파일 생성
      • 수동으로 RDB 파일 생성
      • 복제를 사용할 경우 자동으로 RDB 파일 생성
    • AOF 방식의 데이터 백업
      • AOF 파일을 재구성하는 방법
      • 자동 AOF 재구성
      • 수동 AOF 재구성
      • AOF 타임스탬프
      • AOF 파일 복원
      • AOF 파일의 안전성
    • 백업을 사용할 때 주의할 점

  • 8장. 복제
    • 레디스에서의 복제 구조
      • 복제 구조 구성하기
      • 패스워드 설정
    • 복제 메커니즘
      • 비동기 방식으로 동작하는 복제 연결
      • 복제 ID
      • 부분 재동기화
      • Secondary 복제 ID
      • 읽기 전용 모드로 동작하는 복제본 노드
      • 유효하지 않은 복제본 데이터
      • 백업을 사용하지 않는 경우에서의 데이터 복제

  • 9장. 센티널
    • 고가용성 기능의 필요성
    • 센티널이란?
      • 센티널 기능
      • 분산 시스템으로 동작하는 센티널
      • 센티널 인스턴스 배치 방법
    • 센티널 인스턴스 실행하기
      • 센티널 프로세스 실행
      • 페일오버 테스트
    • 센티널 운영하기
      • 패스워드 인증
      • 복제본 우선순위
      • 운영 중 센티널 구성 정보 변경
      • 센티널 초기화
      • 센티널 노드의 추가/제거
      • 센티널의 자동 페일오버 과정
      • 스플릿 브레인 현상

  • 10장. 클러스터
    • 레디스 클러스터와 확장성
      • 스케일 업 vs 스케일 아웃
      • 레디스에서의 확장성
      • 레디스 클러스터의 기능
    • 레디스 클러스터 동작 방법
      • 해시슬롯을 이용한 데이터 샤딩
      • 해시태그
      • 자동 재구성
    • 레디스 클러스터 실행하기
      • 클러스터 초기화
      • 클러스터 상태 확인하기
      • redis-cli를 이용해 클러스터 접근하기와 리디렉션
      • 페일오버 테스트
    • 레디스 클러스터 운영하기
      • 클러스터 리샤딩
      • 클러스터 리샤딩–간단 버전
      • 클러스터 확장–신규 노드 추가
      • 노드 제거하기
      • 레디스 클러스터로의 데이터 마이그레이션
      • 복제본을 이용한 읽기 성능 향상
    • 레디스 클러스터 동작 방법
      • 하트비트 패킷
      • 해시슬롯 구성이 전파되는 방법
      • 노드 핸드셰이크
      • 클러스터 라이브 재구성
      • 리디렉션
      • 장애 감지와 페일오버
      • 복제본 선출

  • 11장. 보안
    • 커넥션 제어
      • bind
      • 패스워드
      • Protected mode
    • 커맨드 제어
      • 커맨드 이름 변경
      • 커맨드 실행 환경 제어
      • 레디스를 이용한 해킹 사례
    • ACL
      • 유저의 생성과 삭제
      • 유저 상태 제어
      • 패스워드
      • 패스워드 저장 방식
      • 커맨드 권한 제어
      • 키 접근 제어
      • 셀렉터
      • pub/sub 채널 접근 제어
      • 유저 초기화
      • ACL 규칙 파일로 관리하기
    • SSL/TLS
      • SSL/TLS란?
      • 레디스에서 SSL/TLS 사용하기
      • SSL/TLS를 사용한 HA 구성

  • 12장. 클라이언트 관리
    • 클라이언트 핸들링
      • 클라이언트 버퍼 제한
      • 클라이언트 이빅션
      • Timeout과 TCP Keepalive
    • 파이프라이닝
    • 클라이언트 사이드 캐싱

  • 13장. 레디스 운영하기
    • 레디스 모니터링 구축하기
      • 프로메테우스와 그라파나를 이용한 레디스 모니터링
      • 레디스 플러그인을 이용한 그라파나 대시보드
    • 레디스 버전 업그레이드
      • 센티널 구성의 레디스 버전 업그레이드
      • 클러스터 구성의 레디스 버전 업그레이드
    • 레디스 운영 가이드
      • 장애 또는 성능 저하를 유발할 수 있는 레디스의 설정 항목
      • 레디스 운영 및 성능 최적화
      • 레디스 모니터링

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.76 : 아래에서 2행]
입력한 문자열을 포함하려면 (을, 포함하지 않을 때에는 [ 문자를 사용한다.

입력한 문자열을 포함하려면 [을, 포함하지 않을 때에는 ( 문자를 사용한다.

[p.86 : NOTE 마지막 행]
helth check

health check

[p.147]
expire

expiry

[p.186 : 아래에서 7행 ]
대문에

때문에

[p.187 : 코드 ]
> XGROUP CREATE Email bigroup 0
> XGROUP CREATE Push bigroup 0

> XGROUP CREATE Email BIGroup 0
> XGROUP CREATE Push BIGroup 0

[p.193 : 박스 1행]
at most once: 메시지를 최소 한 번 보내는 것을 의미한다.

at most once: 메시지를 최대 한 번 보내는 것을 의미한다.

[p.197 : 첫번째 코드 1행]
> xinfo consumers email emailservicegroup

> xinfo consumers Email EmailServiceGroup

[p.197 : 두번째 코드 1행]
> xinfo groups email

> xinfo groups Email

[p.198 : 코드 1행]
> XINFO STREAM email

> XINFO STREAM Email

[p.361 : 아래에서 4행]
예예약했기 때문에

예약했기 때문에