들어가며 실시간 채팅을 웹소켓을 이용하여 구현할 것이다. 4단계로 나누어 진행한다. stage 1: 웹 소켓만으로 채팅 구현 stage 2: redis stream이용하여 캐싱 및 다중 그룹 채팅 구현 stage 3: mongodb로 채팅 대화 내용 캐싱 stage 4: mysql과 더불어 인증 인가 처리하기. dependancy dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-b..
들어가며 스프링 웹소켓 + redis stream으로 실시간 채팅 서비스를 만들고 있다. 그 과정에서 메시징큐로 redis의 pub/sub과 stream중 더 적합한 자료구조를 stream으로 결정하였고 두 자료구조의 특징을 알아보고 stream으로 결정한 이유를 기술하고자 한다. 🐳 메시징 큐 vs 이벤트 브로커 공통점 둘 모두 큐 자료 구조를 이용하여 publisher가 큐에 적재한 데이터를 subscriber가 처리하게 한다. 한 서비스에서 다른 서비스로의 메시지를 전달하는 역할을 한다. MSA에서 서비스간 느슨한 결합을 위하여 필수적인 솔루션이다. 메시지큐 특징 1:1의 연결 관계를 지원한다. 전달한 메시지를 따로 저장하지 않아 일회성이다(재현 불능). 비동기적으로 요청을 큐에만 저장한다. 이벤트..
들어가며 String, List, Set, Sorted Set에 이어 비트맵과 하이퍼로그로그 자료구조에 대하여 학습한다. redis docs url 🐳 bit map 자료구조 🌊 bit map 정의 Bitmap은 여타 자료구조와 달리 독자적인 자료구조는 아니다. String에 비트연산을 할 수 있도록한 것이다. String의 최대 용량인 512MB인 2^32비트를 가지고 있는 형태이다. 🌊 bit map의 장점 y/n(해당 데이터의 존재 유무)를 저장할때 저장 공간을 획기적으로 줄일 수있다. 약 40억개(2^32bit 이므로)의 데이터에 관하여 하나의 비트맵 자료구조에 저장할 수 있다. 즉 512MB에 40억개 데이터의 y/n을 저장할 수 있다. 🌊 bit map 커맨드 setbit setbit key ..
redis - data type sorted set redis string redis list redis hash,set 의 자료 구조를 거쳐 sorted set에 관하여 기술하겠다. 🐳 sorted set이란 sorted set은 스코어-값 쌍으로 저장되는 자료구조이다. 저장되는 시점에 스코어 값에 따라 정렬된다. 같은 스코어를 가진 경우 데이터(값)에 사전순으로 정렬된다. 즉 score 값을 기준으로 자동 정렬되어있는 자료구조이다. 🐳 sorted set의 특징 🌊 자료구조 'set'과의 유사성 데이터는 중복없이 저장된다는 점에서 set과 유사하다. 🌊 자료구조 'hash'와의 유사성 각 데이터는 스코어와 연결돼 있어서 key-field-value의 구조를 갖는 hash와 key-score-value..
Redis 자료구조 hash, set 🐳 hash 🌊 hash 정의 -hash는 field - value 쌍을 가진 아이템의 집합이다. -필드는 하나의 hash자료 구조내에서 유일하다. -필드와 값은 모두 String자료형이다.(binary safe). 🌊 hash 특징 - hash는 객체를 표현하기에 적절한 자료구조이다. - RDBMS의 table로 전환이 용이하다. personId name sex age 1 awesome male 16 2 awesome2 female 14 - 동적으로 다양한 필드를 추가할 수 있어 유연성을 더한다. 🐳 hash 명령어 🌊 hset hset [key_name] [field 1] [value 1] [field 2] [value 3] ... key_name에 field 1..
Redis 자료구조 - list 🐳 list 💧list 특징 redis에서 list는 순서를 가지는 문자열의 목록이다. 최대 42억개의 아이템 저장 가능하다. 일반 배열처럼 인덱스를 이용하여 직접 접근 할 수있다. 일반적으로 서비스에서 스택과 큐로 사용된다. 🐳 list 명령어 💧 LPUSH,RPUSH,LRANGE lpush [mylist] [data] 리스트의 가장 왼쪽인덱스에 추가 rpush [mylist] [data] 리스트의 가장 끝인덱스에 추가 lrange [mylist] [startIDX] [endIDX] startIDX ~ endIDX에 해당하는 데이터 조회 127.0.0.1:6379> lpush mylist a (integer) 1 127.0.0.1:6379> rpush mylist b (..
Redis 실습 with docker 🐳 redis 도커 이미지 설치 redis 이미지 풀을 받아 준다. docker pull redis docker run --name myredis --rm -d redis 옵션 설명 --name myredis->myredis라는 이름으로 --rm->일회성(컨테이너 종료시 삭제된다)으로 -d -> 백그라운드로 실행한다. docker exec -it myredis /bin/bash myredis 컨테이너의 shell에 접근한다. redis는 기본적으로 6379 포트에서 동작한다. 🐳 redis 자료구조 [String] 🌊 String 💧 String의 특징 String은 레디스의 자료구조중 가장 단순한 자료구조이다. binanry-safe하게 처리 되므로 JPEG이미지와..
Redis란 🐳Redis 정의 Remote dictionary server의 약자인 레디스는 key - value 타입의 nosql 이다. On-Disk Database와 달리 In-Memeory 방식으로 데이터 I/O를 하므로 SSD, HDD에서 읽은 데이터를 메모리에 올리는 과정을 생략하여 매우 빠르다. 일반적인 HDD,SSD Memory의 i/o속도를 보았을때 In-Memory 방식의 처리성능이 월등함을 알 수있다. HDD: 200MB/s SSD: 500MB - 3500MB/s Memory: 3 - 10GB 🐳Redis 특징 단순성- 데이터 타입 key-value 형식으로 데이터 관리를 한다. value에 해당하는 데이터는 string, hash, set,list드의 프로그래밍 언어의 자료구조와 유..