[Web] Redis란 무엇일까?

예리에르·2021년 8월 10일
1

Web

목록 보기
1/4
post-thumbnail

Redis

NOSQL

  • 보통 사람들이 많이 들어본 DB는 RDBMS (관계형 데이터베이스)라고 생각한다. 그에 반하는 DB가 NOSQL(비관계형 데이터베이스)이다. 보통 NOSQL은 key-value나 컬럼,문서 형식의 데이터모델을 이용한다.
  • 많은 양의 데이터를 효율적으로 처리하기 위해 사용한다. 데이터의 분산처리, 빠른쓰기 및 데이터의 안정성으로 사용한다.

NOSQL의 종류

  1. key-value 스토어 : Redis, memcached, Coherence
  2. 열 지향 와이드 컬럼 스토어 : Cassandra, HBASE, Cloud Database
  3. 문서형 : MongoDB, Couchbase, MarkLogic, DynamicDB, MS-DocumentDB
  4. 그래프형 : Neo4j
  • 생각보다 많은 DB가 존재하며 여기서 들어본 데이터베이스는 MongoDB와 Redis이다.

MongoDB?

  • 문서지향 데이터베이스
  • 문서를 기본 저장단위로 이용하면서 내장문서와 배열을 이용해서 복잡란 계층구조를 하나의 레코드로 표현한다.
  • 스키마가 없다. (그래서 실제로 간편하게 서버를 만들고 데이터를 저장하고 조작할 때 편리했다. ㅎㅎㅎ)
  • 필드 추가및 제거는 자유로우며 필요에 따라 자유자재로 변경이 가능하다.

Redis

  • key-value구조 데이터관리 시스템
  • 별도의 쿼리 없이도 데이터를 간단히 가져올 수 있다.
  • 모든 데이터를 메모리에 저장하고 조회하기 빠른 Read,Write 속도를 보장한다. (In-Memory)
  • 즉, 디스크에 데이터를 쓰는 구조가 아니라 메모리에서 데이터를 처리한다.
  • 5개의 자료구조 : String, Set, Sorted Set, Hash, List
    • String : 단순한 key-value 매핑구조
    • Set : 순서가 없는 String 데이터 집합. 중복 데이터를 하나로 처리
    • Sorted Set : Set과 같은 구조이지만 score를 통해서 순서를 정할 수 있다.
    • Hash : key-value 구조를 여러개 가진 object 타입을 저장하기 좋은 구조
    • List : Array 형식의 데이트구조. 처음과 끝에 데이터를 넣고 뺄 때 속도가 빠르다. 하지만 중간에 삽입하는 과정에는 어려움이 있다. (연결리스트 특징)
  • 다양한 자료구조 덕분에 캐시, 인증 토큰저장, Ranking 등 다양한 용도로 사용할 수 있다.

Redis와 Memcached비교

Redis의 장점

  • 리스트, 배열과 같은 데이터 처리에 유용하다.
  • 리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠르다. (여러 프로세스에서 동시에 같은 key에 대해 갱신을 요청할 때, Atomic 처리로 데이터 부정합 방지 Atomic처리 함수를 제공한다.)
  • 메모리를 활용하면서 영속적인 데이터 보존이 가능하다. (스냅샷 기능을 제공하여 메모리의 내용을 .rdb 파일로 저장하여 해당 시점으로 복구 할 수있다.)
  • Redis Server는 1개의 싱글 쓰레드이며 서버 하나에 여러개의 서버를 띄울 수 있다.

다른 데이터베이스 및 소프트웨어 비교

Redis 기본구조

  • Resident Area는 실제 데이터가 저장 및 작업이 수행되는 공간
  • 하단 초록색 영역은 내부적으로 서버 상태를 저장하고 관리하는 메모리 공간 Data Structure

AOF (Append Only File)

  • 명령이 실행될 때마다 기록되는 파일. 데이터 손실이 거의 없다.
  • default로 appendonly.aof파일에 기록된다. 입력/수정/삭제 명령이 실행될 때마다 기록한다.
  • 하지만, 명령어마다 File과의 동기화가 필요하기 때문에 처리속도가 줄어든다.
  • 해소하기위해 File Sync 옵션(appendfsync)이 존재하며, 해당 옵션에 따라 Sync 주기를 조절할 수 있으나 그만큼 데이터 유실이 발생할 수 있다.

RDB (Snapshot)

  • 특정 시점의 메모리 내용을 복사하여 파일에 기록
  • RDBMS Full Backup
  • AOF보다 부하가 작으며 파일 압축이 가능하다. 덤프파일을 그대로 메모리에 복원하기 때문에 AOF에 비해 빠르다.
  • 하지만, 덤프를 기록한 시점이후 데이터는 저장되지 않으므로 복구시에 데이터 유실이 발생할 수 있다.

Redis Replication (복제)

  • Redis는 충분히 빠르고 안정적이지만 트래픽이 모이게 된다면 장애가 발생할 수 있다. 만일 단일 인스턴스로 구성되어 있다면 연관된 모든 application에 영향을 미치게 된다.
  • 이를 위해 Redissms 쓰기/읽기 작업 성능을 개선할 수 있는 Master/Replica 토폴로지를 제공한다.

복제에 관한 내용은 개발 공부중에 좀더 필요할 때 공부하며 포스팅을 올리겠습니다.

참고)
https://jyejye9201.medium.com/%EB%A0%88%EB%94%94%EC%8A%A4-redis-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-2b7af75fa818

https://cla9.tistory.com/101

profile
비전공 프론트엔드 개발자의 개발일기😈 ✍️

0개의 댓글