분류 전체보기
-
[공식 문서 훑어보기] 4. Redis 기초 실무 팁Redis 2025. 4. 29. 22:18
Redis의 Primary(마스터)와 Replica(슬레이브) 구조에서는 성능 최적화를 위해 여러 가지 옵션을 설정할 수 있습니다.일반적으로 Primary 서버에서는 I/O 작업을 최소화하고 Replica 서버에서 주기적으로 RDB 스냅샷을 저장하는 것이 성능을 높이는 방법으로 공식문서에서도 권장합니다.1. Primary 서버 성능 최적화 Primary 서버는 RDB나 AOF를 비활성화하고 appendonly와 persistence 옵션을 꺼서 I/O 작업을 최소화할 수 있습니다.※ 하지만 해당 내용은 테스트 결과 항상 그렇다고 볼 수 없습니다.2. Replica 서버 역할 Replica 서버는 Primary에서 발생하는 모든 변경 사항을 복제하여 성능 부하를 줄이고 데이터를 안전하게 보존합니다.Prim..
-
[공식 문서 훑어보기] 3. Redis 기초 - 다운 타임 최소화Redis 2025. 4. 28. 22:45
Upgrading or restarting a Redis instance without downtime이 글에서는 Redis 인스턴스를 재시작하거나 업그레이드하는 상황에서 데이터 정합성을 유지하고 다운타임을 최소화하는 방법을 공식문서 토대로 설명합니다.하지만 이는 무중단 배포가 아니라 Redis 인스턴스를 재시작해야 하는 상황에서 유용하며 Docker 환경을 기준으로 설명합니다. 시나리오: Redis 6버전을 7버전으로 업그레이드 1. Primary 서버 실행먼저 Redis 6 버전을 실행합니다.Docker를 사용하여 Redis 인스턴스를 설정합니다.docker run -d \ --name redis-master \ -p 6379:6379 \ redis:6 \ redis-server --maxm..
-
[공식 문서 훑어보기] 2. Redis 기초 관리 - ReplicationRedis 2025. 4. 27. 22:53
Replication1. Replication Backlog는 Memory 사용량에 비례하여 설정하세요.Replication Backlog는 Primary 인스턴스에서 변경된 데이터를 Replica 인스턴스가 동기화할 수 있도록 돕는 버퍼입니다.이 버퍼에는 실제 데이터가 아닌 Primary에서 발생한 명령어 스트림이 저장됩니다. Replica가 일시적으로 Primary와 연결이 끊어졌다가 다시 연결되더라도 Backlog에 저장된 명령어를 활용하여 빠르게 최신 상태로 증분 동기화를 수행할 수 있습니다. 만약 필요한 명령어가 Backlog에서 사라진 경우 Replica는 전체 데이터베이스를 다시 복제하는 Full Resynchronization을 수행해야 하는데 이는 네트워크 및 시스템 부하를 증가시키므로 ..
-
[공식 문서 훑어보기] 1. Redis 기초 관리 - Linux, MemoryRedis 2025. 4. 27. 01:32
해당 내용은 Redis 공식문서를 기반으로 설정 관련 팁 중 Linux에 대해 작성하였습니다.아래 예시는 모두 Docker를 통해 Redis를 실행하고 있습니다.Linux1. Redis는 Linux 환경에서 사용하세요.Redis를 운영할때는 Linux 운영 환경에서 하는 것을 권장합니다.물론 Mac OS, FreeBSD, OpenBSD에서도 테스트가 진행되었기 때문에 사용은 할 수 있지만 Linux 환경에서 가장 많은 테스트가 진행되었기 때문입니다.2. vm.overcommit_memory 설정을 해주세요.Linux 환경에는 vm.overcommit_memory라는 옵션이 존재합니다.해당 옵션을 이해하기 위해서는 Memory Commit에 대해 먼저 알아보겠습니다.2-1. Memory Commit 이란?..
-
[Redis 파먹기] 개념 및 자료 구조Redis 2025. 4. 24. 01:38
Redis 란?Redis는 가장 유명한 In memory DB(NoSQL)로 Key-Value 저장소입니다.이 글에서는 Redis에서 제공하는 주요 자료 구조 및 사용 시 알아두면 좋은 주의사항에 대해 간단히 소개합니다.1. Strings가장 기본적인 자료형으로 단순한 문자열뿐만 아니라 숫자 값을 저장하고 다양한 비트 연산을 지원합니다.그리고 이미지, 오디오 등 어떤 형태의 바이너리 데이터도 저장할 수 있으며 객체를 직렬화하여 문자열 형태로 저장하는 것도 가능하지만 특정 필드만 접근하거나 수정해야 하는 경우에는 Hash 자료 구조나 JSON 형태로 저장하는 것을 고려해 볼 수 있습니다.String은 실무에서 가장 널리 사용되는 자료 구조 중 하나입니다.최대 크기 : 512MBSET coupon:12507..
-
[Java 파먹기] 정렬 기준 : Comparable & ComparatorJAVA 2025. 4. 17. 01:25
개요Java에서 기본적으로 제공하는 인터페이스 Comparable과 Comparator에 대해 알아보겠습니다.기본적으로 Comparable과 Comparator는 제네릭 타입으로 동작하기 때문에 원시 타입은 사용할 수 없습니다.Comparable객체 내부의 요소를 활용한 정렬이 필요한 경우 사용됩니다.java.lang 패키지에서 제공합니다.정렬이 필요한 객체 내부에 compareTo를 구현해야 합니다.@Getterpublic class Coupon implements Comparable { private int maxDiscount; private String name; public Coupon(int maxDiscount, String name) { this.maxD..
-
Spring Controller Advice: Global vs. Custom AdviceSpring 2025. 3. 20. 11:00
Spring의 @ControllerAdvice는 애플리케이션 전역에서 발생하는 예외를 처리하는 강력한 도구이며 특정 컨트롤러나 패키지에 국한되지 않고 다양한 방식으로 활용할 수 있습니다. 자사 API 코드를 분석하던 중 Custom @ControllerAdvice에 MissingServletRequestParameterException 예외를 처리하도록 정의되어 있는 것을 확인했습니다. 하지만 이 예외는 Custom @ControllerAdvice에서 절대 처리되지 않는다는 사실을 알고 있었기 때문에 이를 Global @ControllerAdvice에서 정의해야 한다는 의견을 제안했습니다. 이 기회에 Custom @ControllerAdvice가 왜 MissingServletRequestParameter..
-
JPA deleteByXX의 1+N 문제와 성능 저하 해결 방법Spring/JPA 2025. 3. 18. 10:29
JPA를 사용하면서 deleteByCouponId(Long couponId)와 같은 네이밍 메서드를 활용하면 간편하게 특정 ID를 기반으로 데이터를 삭제할 수 있지만 이러한 메서드를 사용할 때 몇 가지 주의해야 할 점이 있습니다.deleteByCouponId의 동작 방식JPA에서 deleteByCouponId와 같은 메서드를 실행하면 내부적으로 다음과 같은 과정을 거칩니다.먼저 couponId를 기반으로 해당하는 엔티티 목록을 조회합니다.조회된 엔티티들을 하나씩 순회하면서 EntityManager의 remove 메서드를 호출하여 삭제합니다.삭제된 엔티티는 1개씩 flush 되며 트랜잭션이 걸려 있다면 커밋 시 최종 반영됩니다.이 과정에서 단순히 deleteByCouponId를 호출하면 SQL의 DELET..