1. 문제 상황 : 좌석 선점 시스템을 Redis로 구현하다가 발생한 문제들 프로젝트에서 좌석 선점 기능을 Redis를 활용해서 구현하고 있었다. 처음에는 다음과 같은 방식으로 간단하게 설계를 했다.사용자가 좌석을 선점하면 Redis에 seat-hold:{sessionId}:{seatId}라는 키를 생성이 키에 사용자 ID를 저장하고, TTL(Time To Live)을 5분 설정동시에, Redisson을 사용해 좌석 락(lock) 을 걸어 선점 중복을 방지더보기처음 설계했던 흐름-> Redisson 락 획득-> Redis에 userid 저장-> Redis에 5분 TTL 설정-> 락 해제이렇게 구성하면 "5분 내에 결제를 완료하지 못하면 좌석이 자동으로 풀리겠지"라고 단순히 생각했다. 하지만... 2. ..
1. 기존 구현 방식기존의 회차별 좌석 조회는 DB + Redis를 조합해서 조회하는 로직이다. 즉, 특정 sessionId 공연 회차의 모든 좌석을 조회하되, 좌석의 상태는 Redis 값을 우선시해서 보여주는 것이다. //해당 회차별 좌석 목록 조회 @Override public List getSeatBySession(UUID sessionId) { SessionId session = new SessionId(sessionId); //DB에서 특정 sessionId에 해당하는 모든 좌석 가져오기 //상태는 DB의 p_seats 테이블에서 가져온 기본 상태 List seats = seatRepository.findAllBySession..
1. 캐시(Cache), 캐싱(Caching)이란 ??!✅ 캐시(Cache)란?캐시(Cache)란, 원본 저장소보다 빠르게 가져올 수 있는 임시 데이터 저장소를 의미한다. 참고로 캐시(Cache)라는 단어는 Redis에서만 쓰이는 용어는 아니고 전반적인 개발 분야에서 통용돼서 쓰인다. ✅ 캐싱(Caching)이란?캐싱(Caching)이란 캐시(Cache, 임시 데이터 저장소)에 접근해서 데이터를 빠르게 가져오는 방식을 의미한다.현업에서는 아래와 같이 얘기하는 편이다.“이 API는 응답 속도가 너무 느린데? 이 응답 데이터는 캐싱(Cahing) 해두고 쓰는 게 어때?’이 말을 풀어서 설명하자면 ‘API 응답 결과를 원본 저장소보다 빠르게 가져올 수 있는 임시 데이터 저장소에 저장해두고, 빠르게 조회할 수..
✅ 데이터(Key, Value) 저장하기# set [key 이름] [value]$ set chae:name "chaew kim" # 띄워쓰기 해서 저장하려면 쌍따옴표로 묶어주면 됨$ set chae:hobby running✅ 데이터 조회하기 (Key로 Value 값 조회하기)# get [key 이름]$ get chae:name$ get chae:hobby$ get pjs:name # 없는 데이터를 조회할 경우 (nil)이라고 출력됨✅ 저장된 모든 key 조회하기$ keys *✅ 데이터 삭제하기 (Key로 데이터 삭제하기)# del [key 이름]$ del chae:hobby$ get chae:hobby # 삭제됐는 지 확인✅ 데이터 저장 시 만료시간(TTL) 정하기레디스는 RDBMS와는 다르게 데이터 저..
✅ Redis란?Redis의 의미를 인터넷에 검색해보면 아래와 같이 나온다.레디스(Redis)는 Remote Dictionary Server의 약자로서, “키-값” 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다.위키백과 -너무 어렵게 적혀져있다. First Word 법칙에 따라 쉽게 바꿔서 이해해보자.Redis는 데이터 처리 속도가 엄청 빠른 NoSQL 데이터베이스이다.이렇게 기억하고 있어도 충분하다. NoSQL 데이터베이스를 풀어서 얘기하자면 Key-Value의 형태로 저장하는 데이터베이스라고 생각하면 된다. https://redis.io/nosql/key-value-databases/✅ Redis의 장점Redis는 다양한 장점을 가지고..