미션 리스트를 가져오는 API의 응답 속도는 약 2000ms 정도 소요됐다.
느린 이유는 복잡한 사용자 입력 정보를 기반으로 curl을 통해 참여 가능한 미션 정보를 반환받았기 때문이다.클라이언트에서 값을 유지하려면 store를 사용할 것 같았지만,
최대한 store 사용을 지양하고 Redis를 활용해 속도를 개선하고자 했다.
Redis는 인메모리 데이터 구조 저장소로, 데이터를 메모리에 저장하여 빠르게 읽고 쓸 수 있는 시스템임.
Redis는 인메모리 데이터베이스로 디스크 I/O를 사용하지 않고 메모리에서 바로 데이터를 처리함. 이를 통해 읽기/쓰기 속도가 매우 빠름.
RDB와 Redis는 데이터 저장 방식에서 큰 차이가 있음. 두 시스템 모두 데이터를 저장하지만, 접근 속도, 사용 용도, 동작 방식에서 차이가 있음.
RDB (Relational Database)
Redis
주요 차이점
Redis는 매우 빠르고 효율적인 데이터베이스이지만, 사용 시 몇 가지 유의할 점들이 있음. 잘못 설정하거나 과도하게 사용하면 성능 저하나 데이터 손실이 발생할 수 있음.
Redis는 인메모리 시스템이라서 메모리 사용량이 중요함. 데이터가 많아지면 메모리가 부족할 수 있음. Redis의 메모리 용량을 관리하기 위해서는 주기적인 데이터 삭제나 만료 설정이 필요함.
Redis는 기본적으로 인메모리 방식으로 동작하므로, 서버가 종료되면 데이터가 사라짐. 이를 방지하려면 영속성 설정이 필요함.
영속성을 사용할 경우 성능이 다소 저하될 수 있으므로, 성능과 데이터 안전성의 균형을 고려해야 함.
Redis는 주로 캐시 시스템으로 사용되기 때문에, 캐시된 데이터와 DB의 데이터 일관성 관리가 필요함.
서비스 함수에서 데이터를 처리할 때, Redis 사용은 무조건 Redis에서만 데이터를 가져오는 것이 아니라, 캐시된 데이터를 검증하고 필요시 업데이트하는 과정이 필요함. 이 과정은 캐시 일관성을 유지하고, 데이터의 정확성을 보장하는 데 중요함.
Redis에서 데이터를 가져오고, 그 데이터를 검증한 후 유효하면 바로 리턴하는 방식임. 캐시된 데이터가 유효할 때 빠르게 데이터를 반환할 수 있음.
// Redis에서 데이터를 가져오고, 유효하면 바로 리턴
$data = Redis::get($key);
// 데이터가 유효한지 검증
if (isValid($data)) {
return $data;
}
// Redis에서 데이터를 가져옴
$data = Redis::get($key);
// 데이터가 없거나 유효하지 않으면 DB에서 가져와서 Redis 업데이트
if (!$data || !isValid($data)) {
// DB에서 데이터를 가져옴
$data = fetchDataFromDatabase($key);
// Redis에 데이터를 업데이트
Redis::set($key, $data);
}
return $data;