728x90

전체 글 199

[Redis] Pub/Sub을 이용한 채팅방 구현

채팅방 기능의 요구사항 채팅 클라이언트와 채팅 서버가 존재하고 통신방식을 정해야함. (프로토콜) 채팅 서버는 채팅방 관리 로직을 작성해야 함 Client 채팅방 입장 메시지 전송 메시지 수신 Chat Server 채팅방 생성 채팅방 접속자 관리 채팅방 메시지 수선/전송 Redis Pub/Sub을 이용한 채팅방 구현 채팅방 기능을 publish/subscribe 구조를 이용해 쉽게 구현 Chat Server 대신에 Redis Pub/Sub 을 사용하면된다.

DB 2024.03.01

[Redis] Pub/Sub

Pub/Sub이란? 메시징 모델 중의 하나로 발행(Publish)와 구독(Subscribe) 역할로 개념화 한 형태 발행자와 구독자는 서로에 대한 정보 없이 특정 주체(토픽 or 채널)을 매개로 송수 Messaging Middleware 사용의 장점 비동기 : 통신의 비동기 처리 낮은 결합도 : 송신자와 수신자가 직접 서로 의존하지 않고 공통 미들웨어에 의존 탄력성 : 수정원들간에 느슨한 연결로 인해 일부 장애가 생겨도 영향이 최소화됨 Messaging Middleware 제품들 : Kafka, RabbitMQ, ActiveMQ Redis의 Pub/Sub 특징 Message Queue에 저장 되지 않음 온라인으로 떠있는 Subscriber에게만 메시지가 전송된다. Kafka의 컨슈머 그룹 같은 분산 처리..

Server 2024.03.01

[Redis]리더 보드란?

리더보드(Leaderboard) 게임이나 경쟁에서 상위 참가자의 랭킹과 점수를 보여주는 기능 순위로 나타낼 수 있는 다양한 대상에 응용(최다 구매 상품, 리뷰 순위 등) 그룹 상위 랭킹 또는 특정 대상의 순위를 보여준다. 리더보드의 동작(API 관점) 점수 생성/업데이트 => ex: SetScore(userId, score) 상위 랭크 조회(범위 기반 조회) => ex: getRange(1~10) 특정 대상 순위 조회 (값 기반 조회) => ex: getRank(userId) 빠른 업데이트/ 빠른 조회가 필 관계형 DB 에서 데이터 구조와 성능 문제 관계형 DB등의 레코드 구조를 사용했을때 User Score A 1500 B 1350 C 1200 ... ... 업데이트 한 행에만 접근 하므로 비교적 빠름..

DB 2024.03.01

[Caching] 캐싱의 원리 와 목적

캐싱(Caching) Cache : 성능 향상 을 위해 값을 복사해놓는 임시 기억 장치 Cache에 복사본을 저장해놓고 읽음으로서 속도가 느린 장치로의 접근 횟수를 줄임 Cache의 데이터는 원본이 아니며 언제든 사라질 수 있다 캐시의 적용 네트워크 지연 감소 서버 리소스 사용감소 병목현상 감소 원칙 : 더 빠르고 값사게 가져올 수 있다면 캐시를 사용한다. 캐싱 관련 개념들 캐시 적중 (Cache Hit) : 캐시에 접근해 데이터를 발견함 캐시 미스(Cache Miss) : 캐시에 접근했으나 데이터를 발견하지 못함 캐시 삭제 정책(Eviction Policy) : 캐시의 데이터 공간 확보를 위해 저장된 데이터를 삭제 캐시 전략 : 환경에 따라 적합한 캐시 운영 방식을 선택 할 수 있음(Cache-Asid..

Server 2024.02.29

[Session] Spring Boot에서의 세션 관리

세션관리를 위한 서버의 역할 세션 생성 : 요청이 들어 왔을때 세션이 없다면 만들어서 응답에 set-cookie로 넘겨줌 세션 이용 : 요청이 들어왔을때 세션이 있다면 해당 세션의 데이터를 가져옴 세션 삭제: 타임아웃이나 명시적인 로그아웃 API를 통해 세션을 무효화함 모든 요청에 대해서 Cookie를 파싱해 확인하고, 세션 생성 시에는 set-cookie 값가지 설정해야 위 동작을 쉽게 해주는 Spring Boot 도구 - HttpSession 세션을 손쉽게 생성하고 관리할 수 있게 해주는 인터페이스 UUID로 세션 ID를 생성 JSESSIONID라는 이름의 Cookie를 설정하여 내려줌 ex) @GetMapping("/hello") public String hello(HttpSession sessio..

Server 2024.02.28

Session 이란?

Session 정의 네트워크 상에서 두 개 이상의 통신장치간에 유지되는 상호 연결 연결된 일정 시간 동안 유지되는 정보를 나타냄 적용 대상에 따라 다른 의미를 가짐 Web 로그인 세션 Web 상에서 특정 유저가 로그인했음을 나타내는 정보 브라우저는 Cookie를, 서버는 해당 Cookie에 연관된 세션 정보를 저장 유저가 로그아웃 하거나 세션이 만료될 때 까지 유지되어 유저에 특정한 서비스 가능 Web 로그인 과정 분산 환경에서의 세션 처리 Server는 세션 정보를 저장 해야 함 Server가 여러 대라면 최초 로그인한 Server가 아닌 Server는 세션 정보를 알지 못함 세션 정보를 Server간에 공유할 방법이 필요(Session Clustering) 분산 환경에서의 세션 처리 - RDB 사용시..

Server 2024.02.24

[Redis] Spring Boot Redis 기본 설정

기본 환경 Spring Boot 3.2.3 Java 17 Gradle_Dependency Spring Boot 'org.springframework.boot:spring-boot-starter' 'org.springframework.boot:spring-boot-starter-web' Redis 'org.springframework.boot:spring-boot-starter-data-redis' 이외에 Redisson 등 다양한 Redis Dependency 가 있다. 'org.springframework.session:spring-session-data-redis' Lettuce 가장 많이 사용되는 라이브러리로, Spring Data Redis에 내장되어 있음 Spring Data Redis는 Red..

DB 2024.02.24

[Redis] Data Type (Sorted Sets, Bitmaps, HyperLogLog)

5. Sorted Sets Set과 유사하게 유니크한 값의 집합 각 값은 연관된 score를 가지고 정렬되어 있음 정렬된 상태이기에 빠르게 최소/최대값을 구할 수 있음 순위 계산, 리더보드 구현 등에 활용 > ZADD myrank 10 apple 20 banana 30 grape > 3 > ZRANGE myrank 0 1 > "apple" > "banana" > ZRANK myrank banana > 1 명령어 기능 예제 ZADD 한개 또는 다수의 값을 추가 또는 수정 ZADD myrank 10 apple 20 banana ZRANGE 특정 범위 값을 반환(오름차순) ZRANGE myrank 0 1 ZRANK 특정 값의 위치(순위) 반환(오름차순) ZRANK myrank apple ZREVRANK 특정 ..

DB 2024.02.23

[Redis] Data Type (Strings, Lists, Sets, Hashes)

1. String 가장 기본적인 데이터 타입으로 제일 많이 사용됨 바이트 배열을 저장(binary-safe) 모든 문자를 저장 가능 바이너리로 변환할수 있는 모든 데이터를 저장 가능(JPG와 같은 파일 등) 최대 크기는 512MB (1개의 kEY) 주로 cache, html code등을 저장 하여 사용한다. 사용방법 > SET myname helllo > OK > GET myname > "hello" 명령어 기능 예제 SET 특정 키에 문자열 값을 저장 SET say hello GET 특정 키의 문자열 값을 반환 GET say INCR 특정 키의 값을 INTEGER로 취급하여 1증가 INCR mycount DECR 특정 키의 값을 INTEGER로 취급하여 1감소 DECR mycount MSET 여러 키에..

DB 2024.02.23

[Redis] Redis란?

Redis란? In-Memory DB Remote Dictionary Server Storage : 데이터 저장소(데이터 관점) Database : 전통적인 DBMS의 역할을 수행(영속성 관점) 데이터를 저장하고 유실되지 않게 한다 Redis는 기본적으로 영속성을 제공하지 않지만 추가적인 백업 방식으로 제공된다. Middleware : 어플리케이션이 이용할 수 있는 유용한 기증을 제공하는 소프트웨어 활용 Session Store Cache Limit Rater Job Queue 할수 있는것 아주 빠른 데이터 저장소로 활용 분산된 서버들간의 커뮤니케이션(동기화, 작업 분할 등) 내장된 자료구조를 활용한 기능 구현 In-Memory DB DB, Database, DBMS? 데이터를 읽고 쓸 수 있는 기능을 ..

DB 2024.02.20
728x90