Redis

프로젝트

장애 사례로부터 배우는 안전한 db 마이그레이션 방법(dual write)

???: 송금을 했는데, 송금이 안된 것 같아요 돈이 안 줄어요!!! 개발자 : 어? 분명히 상대한테 돈은 갔다는 로그가 있는데... 일단 롤백부터 하고 올게요 로그를 보면서 상대에게 돈이 갈 때도 있고, 안 갈 때도 있네요 왜 갈 때도 있고, 안 갈 때도 있었을까... 바꾼 것은 테이블밖에 없는데, 테이블에 무슨 일이 났는지 확인해 봐야겠네요 어떤 일이 발생했을까요? 기존 로직과 쿼리입니다 A로부터 5000원을 차감하고, B에는 5000원을 추가합니다 어느 날 테이블을 보면서, 왜 column 명이 old_amount 지? 그냥 amount로 바꿔버려야지~ 하고 테이블을 바꾸기 시작합니다 기존 코드에서 amount라는 column을 추가하고 update를 할 때, amount와 old_amount 모두..

인프라

안전하게 분산 환경에서 Lock 잡기 (Redlock)

Redis를 활용한 Lock 관리하기 1. Lock 이란? Lock 은 동시성 문제를 해결하기 위한 방법 중 하나입니다. 동시성 문제란, 여러 개의 프로세스나 스레드가 동일한 자원에 동시에 접근하려고 할 때 발생하는 문제를 의미합니다. 이러한 문제는 데이터의 일관성과 무결성을 해치는 원인이 되므로, 동시성 문제를 해결하기 위한 다양한 방법들이 제안되고 있습니다. 이번에는 Redis 를 활용한 Lock 관리 방법에 대해 알아보겠습니다. 단일 인스턴스를 활용한 Lock 관리 Redis는 단일 스레드로 동작하는 인메모리 데이터베이스이므로, 단일 인스턴스에서도 Lock을 관리할 수 있습니다. 가장 쉽게 생각할 수 있는 구조는 다음과 같습니다. if(redisTemplate.opsForValue().setIfAb..