본문으로 건너뛰기

Database

Database 관련 인사이트를 기록합니다.

📄️ 캐시 스탬피드 현상

대규모 트래픽 환경에서 캐시를 운용하는데, Cache Aside (캐시 미스 발생 시 적재) 전략을 사용한다고 가정하겠습니다. 이때, 수많은 요청들이 동시에 캐시 미스를 확인하고 원본 저장소에서 데이터를 가져와 캐시에 적재하는 상황이 발생할 수 있는데요. 이를 캐시 스탬피드 현상 혹은 Thundering Herd 문제라고 표현합니다. 캐시 스탬피드 현상은 원본 데이터베이스와 캐시의 성능을 저하할 수도 있습니다.

📄️ Redis를 활용한 분산락 구현

Redis의 SET 명령어를 사용해서 분산 잠금을 구현할 수 있습니다. 가령, 1대 이상의 서버가 특정 Key에 대해서 SET 명령어에 NX 옵션(Not eXists)을 추가하여 Redis에 전달하여 잠금 획득을 시도합니다. NX 옵션을 사용하면 특정 Key에 해당하는 값이 존재하지 않는 경우에만 값 추가 작업이 성공합니다. SET 작업을 성공적으로 수행한 서버는 잠금을 획득합니다. 잠금을 획득한 서버는 작업이 끝난 이후, Key에 해당하는 값을 제거하여 잠금을 해제합니다.

📄️ 트랜잭션 격리수준

동시에 여러 트랜잭션이 실행될 때 한 트랜잭션이 다른 트랜잭션의 연산에 영향을 받지 않도록 하는 정도를 말합니다. 낮은 격리 수준은 동시 처리 능력을 높이지만, 데이터의 일관성 문제를 발생시킬 수 있습니다. 반면, 높은 격리 수준은 데이터의 일관성을 보장하지만, 동시 처리 능력이 떨어질 수 있습니다. 즉, 데이터 정합성과 성능은 반비례합니다. 트랜잭션 격리 수준은 개발자가 트랜잭션 격리 수준을 설정할 수 있는 기능을 제공하는 기능입니다.