Spring 애플리케이션과 Redis 간의 데이터 통신은 직렬화와 역직렬화를 필요로 한다.Redis는 문자열, 리스트, 해시, 집합 등 다양한 자료구조를 지원하지만,실제로는 모든 데이터를 byte[] 형태로 저장하고 처리한다.따라서 Redis와 Spring 간의 데이터 전달은 기본적으로 byte[] 형식으로 이루어지며,Spring 애플리케이션에서 이를 문자열, List, Set, Hash 등으로 활용하기 위해서는적절한 직렬화/역직렬화 설정이 반드시 필요하다. Spring에서는 StringRedisTemplate을 통해 Redis에 저장될 데이터를 처리하며,직렬화와 역직렬화를 내부적으로 자동 처리해준다.StringRedisTemplate을 이용하면 String, List, Set, Hash와 같은 자료구조..
스프링 프로젝트에 Redis 연동을 위한 어떤 설정을 해야하고 각 역할이 무엇인지 알아보겠다. [build.gradle.kts]implementation("org.springframework.boot:spring-boot-starter-data-redis:3.2.3") RedisConnectionFactoryRedisConnectionFactory는 Redis 서버와의 연결을 생성하고 관리하는 역할을 한다.단일 인스턴스, master/slave, Cluster 모드에서 커넥션 생성과 관리의 추상화 타입이다. [RedisConnectionFactory의 구현체] LettuceConnectionFactoryJedisConnectionFactory클라이언트 방식비동기-NonBlocking동기-Blocking스..
Redis 자료구조와 시간복잡도전체 키 조회keys * 모든 키를 조회하기에 시간복잡도가 O(N)이다. (N은 키의 갯수)Redis는 싱글 스레드 기반으로 동작하기에 keys *를 사용하면 해당 명령어 수행으로 인해 다른 명령어 처리가 늦어질 수 있다. Redis 모든 DB 키 삭제FLUSHALLFLUSHALL ASYNCASYNC 키워드는 키 삭제를 비동기로 실행되도록 한다.FLUSHALL의 경우 동기적으로 실행되며 메모리에 key-value 삭제하는 처리가 모두 완료될때까지 다른 명령어는 block 된다.반면에 FLUSHALL ASYNC의 경우 참조관계만 끊어 놓고 실제 메모리에서 삭제는 백그라운드 스레드가 제거하는 처리를 진행하게 된다.(키를 저장하는 해시테이블에서 키 참조를 제거 후 백그라운드가 실..

Redis란Redis의 가장 큰 특징은 빠른 성능이다. 데이터를 메모리에 저장하고, 해시 기반 키 관리 방식을 통해 대부분의 연산을 시간복잡도 O(1)로 처리할 수 있어 매우 빠른 응답 속도를 제공한다. 또한 Redis는 싱글 스레드 기반으로 동작하기 때문에, 동시성 문제에 비교적 자유롭고 구현이 단순하다는 장점이 있다. 사용자 명령어 처리는 싱글 스레드로 수행되지만, I/O 처리는 I/O Multiplexing 기법과 백그라운드 스레드를 통해 처리되어 성능을 더욱 향상시킨다. Redis는 메모리 기반 DB이지만, 데이터의 영속성(persistence)을 보장하기 위해 디스크에 데이터를 저장하는 두 가지 방식인 RDB(Redis Database)와 AOF(Append Only File)를 지원한다.RDB..

개인 프로젝트에서 redis를 도입했던 사례를 공유하겠다.redis는 데이터를 메모리에 저장하기에 빠른 성능을 나타낸다.또한 ttl이라는 유효기간을 통해 별도의 삭제 처리 없이 간단한 구현을 할 수 있다. 아래는 redis를 사용하기 좋은 사례들이다.RDB의 부하를 줄이고 성능 향상을 위한 캐시 용도좋아요 수, 조회수, 인기 게시글, 사용자 정보분산 서버 환경에서 각 서버에 공유되어야할 정보사용자 세션, 리프레시 토큰, 분산락데이터의 유효기간이 존재하는 경우3분 동안 유효한 인증 코드, 알림, 최근 읽은 게시글 목록, 최근 1개월간 담은 장바구니 위의 사례들 중 내가 적용했던 사레들을 공유하겠다. RDB 부하 분산 및 성능 향상 목적의 캐시 목적 사례사용자 정보HandlerMethodArgumentRes..
- 컨텐츠 생성- 학습지 다운- 마이페이지
복잡한 문제를 작은 문제루 나누고 해결한 결과를 저장해 두었다가 나중에 큰 문제의 결과하여 합하여 풀이하는 알고리즘알고리즘의 이름이 동적 계획법이라고 하지만 원리에 가까운 용어는 '기억하며 풀기'가 더욱 적합하다. dp의 조건(사용조건)최적 부분 구조문제의 최적 해결 방법이 부분 문제에 대한 최적 해결 방법으로 구성된 문제중복 부분 문제같은 작은 문제를 여러번 반복적으로 해결해야함dp에서는 이를 메모이제이션을 통해 저장해두고 결과를 합하여 큰 문제를 해결함 dp와 그리디의 비교최적 부분 문제를 풀어나간다는 점은 그리디 알고리즘과 같다.하지만 그리디 알고리즘은 항상 최적이라고 생각하는 것을 선택한 후 풀이를 진행해나가고,dp는 이를 저장시켜두고 전체 해를 구할 때 활용한다는 것이다.그리디 알고리즘에 해당되..
신장트리(Spanning Tree)신장트리의 조건N개의 정점을 가지는 그래프에서 최소 N-1 개의 간선으로 연결되어 있다.그래프의 모든 정점을 포함한다.신장트리는 최소한의 간선으로 모든 정점을 연결한 트리이다.따라서 사이클이 존재하지 않는 특징이 있다. 최소 신장 트리(Minimum Spanning Tree)최소한의 간선으로 모든 정점을 연결하며, 이때 간선의 가중치의 합이 최소로 이루어진 트리 크루스칼 알고리즘크루스칼 알고리즘은 최소 신장 트리를 만들기 위한 알고리즘으로 그리디 알고리즘의 한 종류이다.매 순간 가중치가 가장 낮은 간선을 선택한다.이러한 그리디 알고리즘 방식은 로컬 최적해를 구하지만 전체 최적해를 보장하지 않는다.하지만, 크루스칼 알고리즘은 사이클이 존재하지 않는 조건을 통해 로컬 최적해..