무지를 아는 것이 곧 앎의 시작

Redis 5

분산락 언제 잡고 어떻게 잡는게 좋을까

프로젝트 진행하다 보면 동시성 이슈를 해결해야할 때가 있다. 최근 사이드 프로젝트에 북마크 기능을 구현할 때 어떻게 동시성 이슈를 잡았었고 어떤 고민을 해서 잡는 방법을 채택했는지 기록해볼까 한다. 도메인 간단 이해 일단 도메인 구조를 보면, Place(장소)라는게 있고, 이 장소에 북마크를 찍는개념으로 해서 Bookmark(북마크)가 있고 1(장소):N(북마크)로 되어있다. 그리고 Place 리스트를 조회할 때 bookmark 갯수가 같이 노출돼야하기 때문에 성능 최적화를 위해 bookmarkCount라는 컬럼을 Place가 반정규화해서 들도록 했다. /// imports... /// annotations... public class Place extends AbstractRootEntity { @Id..

CS 2023.10.09

RedisTemplate는 @Transactional 안에서 어떻게 동작할까?

최근 사이드 프로젝트를 하며 재밌는 사실을 알게 되어 포스팅을 남겨본다. RedisTemplate를 사용할 때 스프링에서 추상화하여 제공해주는 트랜잭션 기능을 사용하고 싶으면 다음과 같은 세팅을 하면 된다. @Configuration @RequiredArgsConstructor @EnableTransactionManagement public class RedisConfig { //... @Bean public RedisTemplate redisTemplate( final RedisConnectionFactory redisConnectionFactory ) { final RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnecti..

Spring 2023.06.27

[Redis] 다건 조회를 캐싱할 때 고민했던 것들

최근 Redis를 사용해서 여러 조건절을 가지는 검색 쿼리의 응답을 캐싱해야하는 기술적인 과제를 겪었다. 꽤나 많은 고민과 주변의 도움으로 나름대로의 해결법을 도출해냈고 그 과정을 기록할까 한다. 문제 원인 일단 상황을 설명하면, 단건 id로 찍어서 조회하는 쿼리는 캐시하기 쉽지만 다건 조회는 신경쓸 포인트가 많아진다. 이유는 원본 데이터에 변경이 일어났을 경우 정합성 때문인데 캐시를 사용하게 되면 발생하는 고질적인 문제다. 단건 조회의 경우 id로 캐시의 key를 특정할 수 있기 때문에 조회시 캐시하고, 이후로 캐시된 값을 반환하고 변경이 발생하면 변경시 해당 캐시를 무효화하게 하면 정합성이 맞춰진다. 반면, 검색 조건이 여러 개가 들어가는 다건 조회의 경우 검색 조건까지 key에 넣고 결과를 캐싱하기..

Redis 2023.02.21

Redis 입문용 기본지식 채워봅시다

우아한테크세미나 191121 우아한레디스 by 강대명님 영상 토대로 작성한 내용입니다. Cache 레디스를 알기 전에 Cache에 대해 먼저 알 필요가 있다. 캐시는 나중에 요청올 결과를 미리 저장해두었다가 빠르게 서비스를 해주는 것을 의미한다. ex) Factorial같은 경우 10!을 계산한다면 1부터 10까지 다 곱하는게 아니라, 이전 값 즉 9!을 어딘가에 저장해두었다가 10만 곱해서 반환하면 된다. 즉 접근 속도에 이점이 있다. CPU Cache 메모리는 디스크보다 용량은 훨씬 적지만, 접근 속도는 디스크보다 훨씬 빠르다. 레디스는 이 메모리에 데이터를 저장한다. Cache 사용 패턴 Look Aside Server는 데이터가 존재하는지 Cache를 먼저 확인 Cache에 데이터가 있으면 Cac..

Redis 2022.10.26

Docker로 레디스 로컬 환경 간편하게 세팅하기

docker image 다운로드 docker pull redis:alpine pull 명령어로 이미지를 다운받는다. alpine은 태그를 의미하고 redis 버전 등의 값을 줄 수 있다.(생략시 latest가 붙음) alpine이 붙으면 이미지를 경량화시켜서 용량이 적다. docker로 실행 docker run --name redis-server -d -p 6379:6379 redis:alpine run 명령어로 docker container를 띄움. --name: container명을 지정. -d : 백그라운드로 실행 -p : host의 port와 container의 port를 매핑 맨 마지막에 이미지명:태그명 붙이면 됨 매번 위 과정이 귀찮을 것이다 docker-compose로 컨테이너를 띄우자 re..

Redis 2022.10.26