전체 글 285

CHAPTER 07 레플리케이션 [PART 02 실전]

I. 레플리케이션 기능1. 개요Redis는 기본적으로 단일 노드로 동작하지만, 가용성 확보와 읽기 부하 분산을 위해 레플리케이션 기능을 제공함마스터-레플리카 모델로 구성되며, 마스터 노드에서 발생한 데이터 변경을 여러 레플리카 노드에 비동기적으로 복제함(1) 주요 목적읽기 부하 분산 (Read Scaling)여러 레플리카를 통해 읽기 요청 분산 처리 가능특히 읽기 작업 비중이 큰 시스템에서 효과적고가용성 확보 (High Availability)마스터 노드 장애 시, 레플리카를 새로운 마스터로 승격 가능(페일오버)Redis Sentinel 또는 클러스터를 통해 자동화 가능데이터 중복성 확보 (Redundancy)마스터의 데이터를 실시간 복제함으로써 백업 역할도 수행(2) 레플리케이션의 특징비동기 복제마스터..

서적/실전 Redis 2025.07.08

CHAPTER 06 트러블슈팅 [PART 02 실전]

CHAPTER 06 트러블슈팅은 실전 환경에서 Redis 성능 저하나 장애 발생 시 원인을 진단하고 해결하는 방법을 소개하는 장이다.I. INFO 명령어로 서버 정보 읽기1. INFO 명령어 개요Redis에서 INFO 명령어를 사용하면 서버 내부 상태를 확인할 수 있음redis-cli에서 실행하면 여러 항목의 정보를 출력하며 트러블슈팅 시 가장 먼저 활용되는 명령어임127.0.0.1:6379> INFO(1) 명령어 기본 구조 및 옵션INFO [SECTION] 형태로 실행 가능하며 출력 범위를 좁혀서 확인할 수 있음INFO all # 전체 정보 출력INFO memory # 메모리 정보INFO cpu # CPU 관련 정보INFO stats # 통..

서적/실전 Redis 2025.07.01

CHAPTER 05 레디스 운용 관리 [PART 02 실전]

I. 데이터 영속성1. 스냅숏 (RDB)(1) 개요스냅숏은 Redis의 메모리 상태를 일정 시점에 RDB 파일 형태로 저장하는 방식이다일반적으로 save 설정을 통해 특정 시간 동안 일정 횟수 이상의 변경이 발생했을 경우 자동으로 수행된다(2) 장점저장 속도가 빠르며 실행 중인 인스턴스의 상태를 간단히 백업할 수 있다재시작 시 복구 속도가 빠르며 운영 중단 시간을 최소화할 수 있다(3) 단점마지막 저장 이후 발생한 데이터는 손실될 수 있다저장 시점에 따라 일관성 없는 상태가 저장될 가능성도 존재한다2. AOF (Append Only File)(1) 개요AOF는 Redis의 모든 쓰기 명령어를 순차적으로 기록하여 영속성을 보장하는 방식이다재시작 시 해당 로그를 순서대로 재실행함으로써 데이터를 복구한다(2)..

서적/실전 Redis 2025.06.24

Chapter 03.고급 기능 [Part1 기초]

I. 파이프라인필요성Redis는 기본적으로 요청-응답 구조이기 때문에 여러 명령을 순차적으로 실행하면 RTT(Round Trip Time) 오버헤드가 발생함파이프라인은 이러한 불필요한 왕복 비용을 줄여 다수의 명령을 빠르게 처리할 수 있도록 도와줌문제점명령 간 의존성이 있을 경우 처리 순서에 따른 예외가 발생할 수 있고, 응답이 몰려오기 때문에 디버깅이나 실패 추적이 어려움또한 원자성은 보장되지 않음1. 파이프라인(Pipelining)이란?여러 Redis 명령을 클라이언트에서 한꺼번에 전송하고, 서버는 응답을 순차적으로 반환각 명령을 RTT(Round Trip Time)마다 보내지 않고, 한 번에 요청하고 한 번에 응답 받음성능 최적화 측면에서 매우 유용 (컨텍스트 스위칭, 시스템 콜 감소)(1) 특징명..

서적/실전 Redis 2025.06.09

Chapter 02.자료형과 기능 [Part1 기초]

I. 자료형의 기능과 개요1. 다섯 가지 자료형(1) Redis가 기본적으로 제공하는 주요 자료형 다섯 가지:String형: 문자열 및 숫자값 저장에 적합한 단순한 키-값 구조.List형: 삽입 순서를 유지하는 문자열 리스트.Hash형: 필드-값 쌍으로 객체를 표현하는 데 유용.Set형: 순서 없이 중복 없는 고유 문자열의 집합.Sorted Set형: 점수(score)에 따라 자동 정렬되는 집합.이들 자료형은 각각 명확한 유스케이스에 따라 선택되며, 상황에 맞게 적절히 사용하는 것이 성능과 코드 간결성에 중요함.2. 보조 자료형과 기능(1) 특정 용도에 특화된 보조 자료형:비트맵(BitMap)지리적 공간 인덱스(Geospatial Index)(2) 기능적 목적의 주요 기능:Pub/Sub (발행-구독 기능..

서적/실전 Redis 2025.05.26

Chapter 01.레디스의 시작 [Part1 기초] : 연습문제 포함

0. 레디스란레디스(Remote Dictionary Server : Redis)는 인메모리 데이터 구조 저장소로써 빠르게 동작하고, 자료형과 기능이 다양한 비관계형 DB이다. 1. 레디스를 사용하기까지레디스는 인메모리 DB로서 뛰어난 성능과 간단하고 유연한 DB기능과 간단한 설정이라는 장점이있다. NoSQL은 특정 데이터 모델 전용 설계, 빠른 속도로 장점이 있고 RDBMS의 특성상 구현하기 어려운 부분도 있다. 그러다보니 우열관계가 아닌 NoSQL과 RDBMS는 Trade-Off 라고 할 수있다. Redis는 주로 NoSQL범주로 분류되며 최근에는 용도에 따라 RDBMS와 레디스를 함께 사용하는 방식이 늘고있다. RDBMS의 속도, 일부 데이터 모델 표현에 구현의 복잡성이 있다. 이러한 단점 해결하기 ..

서적/실전 Redis 2025.05.17

알림 발송 방식 비동기 방식으로의 개선의 건

I. 들어가며향후 수만 명의 사용자에게 알림을 보내야 할 수도 있는 시스템을 개발하고 있다면, 처음부터 확장성 있는 구조를 설계하는 것이 중요하다. Spring의 비동기 처리 방식을 활용하여 알림 발송 성능을 어떻게 개선할 수 있었는지 개발 단계에서 미리 적용할 것을 정리한다. II. 왜 비동기 알림 방식이 필요했나?개발 중인 시스템은 약 20,000명의 사용자에게 동시에 알림을 발송해야 할 요구사항이 있었다. 단순 for-loop 구조로는 충분할 것처럼 보이지만, 네트워크 I/O가 포함된 알림 발송은 한 명당 수백 ms의 대기 시간이 발생한다. 이런 구조는 향후 운영 환경에서 병목이 될 가능성이 높다. 아직 성능 이슈가 직접 드러나진 않았지만, 비동기 처리 기반의 구조를 선제적으로 도입을 고려하고 있다..

멀티모듈 아키텍처 설계 및 적용

I. 들어가며최근 이직을 했는데, 이직한 곳의 프로젝트 구조가 종래의 단일 모듈 멀티 프로젝가 아닌 멀티 모듈 단일 프로젝트이다낯선 방식인데, 어떤점에서 이 방식을 이용했는지 멀티모듈 아키텍처의 개념과 구조 그리고 실패사례 등을 살펴본다. II. 멀티모듈 아키텍처란?1. 모놀리식 아키텍처하나의 서비스에서 API, Admin, Batch, WEB, DB등이 관리되는 구조이다.이 경우 단일 모듈 멀티 프로젝트 VS 멀티 모듈 단일 프로젝트로 구분이 된다 2. 단일 모듈 멀티 프로젝트이전 직장의 아키텍처 방식이다.각각의 프로젝트 단위로 IDE를 각각 띄우면서 이용을 한다.특히 모듈간 공통된 domain(ex: Member)이 중복이 된다. 이 경우 변경이 있으면 여러 모듈간 반복되는 복사 붙여넣기가 수반된다...

StreamAPI 의 실행순서와 병렬처리

I. Stream API의 이해1. 관점 변화명령형 프로그래밍 (C, JAVA)What을 할 것인지 나타내기 보다 How할 건지를 설명하는 방식이다선언형 프로그래밍How를 나타내기보다 What을 할건지 설명하는 방식2. Stream API의 이해JAVA는 OOP이므로 함수형 프로그래밍 불가JDK8 부터 Stream API 로 데이터 추상화하고 처리하는데 자주 사용되는 함수 정리데이터를 추상화 했다는 것은 데이터의 종류와 관계없이 같은 방식으로 처리재사용성 높일 수 있음특징원본 데이터 변경 X원본 데이터 조회 후 Stream을 생성함Stream 은 일회용한번 사용 끝나면 Stream을 재생성해야함닫힌 Stream은 IllegalStateException 발생내부 반복으로 작업 처리간결해 지는 이유임반복 문..

스프링과 싱글톤: 효율성과 안정성의 조화

I. 들어가며스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다. 설정으로 싱글톤이 아니게 설정할 수 있지만, 특별한 경우를 제외하면 대부분 싱글톤을 사용한다.  스프링 기본기를 공부하던 중 다음 문장을 보고 왜 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록하는지 의문이 있었다. 스프링과 싱글톤의 관계를 탐색하고, 웹 어플리케이션 관점에서 특히 싱글톤이 왜 필요한지 그리고 싱글톤 패턴 그 자체와 주의사항에 대해서 알아보겠다. 아울러 시작 전 질문을 한다. 웹 애플리케이션은 수많은 요청을 처리하기 위해 다수의 객체를 필요로 한다. 하지만 매 요청마다 객체를 새로이 생성한다면 어떤 문제가 발생..