
개인 프로젝트에서 redis를 도입했던 사례를 공유하겠다.redis는 데이터를 메모리에 저장하기에 빠른 성능을 나타낸다.또한 ttl이라는 유효기간을 통해 별도의 삭제 처리 없이 간단한 구현을 할 수 있다. 아래는 redis를 사용하기 좋은 사례들이다.RDB의 부하를 줄이고 성능 향상을 위한 캐시 용도좋아요 수, 조회수, 인기 게시글, 사용자 정보분산 서버 환경에서 각 서버에 공유되어야할 정보사용자 세션, 리프레시 토큰, 분산락데이터의 유효기간이 존재하는 경우3분 동안 유효한 인증 코드, 알림, 최근 읽은 게시글 목록, 최근 1개월간 담은 장바구니 위의 사례들 중 내가 적용했던 사레들을 공유하겠다. RDB 부하 분산 및 성능 향상 목적의 캐시 목적 사례사용자 정보HandlerMethodArgumentRes..
Map맵은 비선형 자료구조로 key-value 쌍으로 데이터를 저장하는 특징을 갖고 있다.맵의 key는 중복이 허용되지 않으나, value는 중복이 허용된다.자바의 맵 자료형에는 대표적으로 HashMap과 TreeMap이 존재한다.HashMap은 해시테이블 기반으로 자료를 관리하기에 조회, 삽입, 삭제 연산에 O(1)의 시간복잡도를 갖는다.TreeMap은 균형 이진탐색트리의 한 종류인 레드블랙 트리를 통해 데이터를 관리하기에 조회, 삽입, 삭제 연산에 O(logN)의 시간복잡도를 갖는다. Set셋은 비선형 자료구조로 중복이 허용되지 않는다.중복을 허용하지 않는 집합과 같은 개념이다.자바의 셋에는 HashSet, TreeSet이 존재한다.HashSet은 해시테이블 기반으로 자료를 관리하기에 조회, 삽입, ..
분산락을 활용한 동시성 제어[1] - mysql 네임드 락분산락을 활용한 동시성 제어[2] - 레디스 분산락이전 포스팅에서 Mysql 네임드락을 활용하여 분산락을 구현하였다.이번 포스팅에서는 레드스를 통해 분산락을 구현해보겠다. 문제상황은 이전 상황과 똑같다.분산락에 대한 설명과 해결해야할 문제상황은 이전 포스팅에 기록했으니 바로 구현방법에 대해 알아보겠다. 레디스 분산락1 - 스핀락[build.gradle.kts]implementation("org.springframework.boot:spring-boot-starter-data-redis") [TicketService]@Serviceclass RedisLockTicketService( private val redisLockRepository: R..

분산락을 활용한 동시성 제어[1] - mysql 네임드 락분산락을 활용한 동시성 제어[2] - 레디스 분산락분산락분산 시스템 환경에서 여러 서버(또는 프로세스)가 동시에 동일한 자원에 접근하는 것을 막기 위해, 하나의 중앙화된 서버 자원에서 잠금 메커니즘을 구현한 것을 분산락이라고 한다. 이번 포스팅에서는 문제상황을 직접 만들어 분산락을 구현하는 방법에 대해 알아보겠다. 문제 상황명절기간 ktx 예매표는 한 사람당 하나만 구매 가능함하나의 계정으로 여러명이 동시에 접속하여 예매표를 여러장 구매하는 상황을 막아야함Userpackage com.yojic.studyexample.lock.entityimport jakarta.persistence.*@Table(name = "user")@Entityclass U..