DB 46

Redis Cluster 구성 방법 (3 Master + 3 Replica, Docker 기반)

✅ 목표 구성총 6개의 Redis 노드를 실행해 다음과 같이 클러스터 구성:마스터 3개: 포트 7001, 7002, 7003슬레이브 3개: 포트 7004, 7005, 7006각 마스터는 하나의 슬레이브를 갖고 있고, 슬롯은 16384개가 자동 분배됨.📁 1. 디렉토리 구조Redis-Cluster/├── docker-compose.yml├── redis-cluster.conf├── nodes/│ ├── 7001/│ ├── 7002/│ ├── 7003/│ ├── 7004/│ ├── 7005/│ └── 7006/nodes/700X/ 디렉토리는 각 노드의 데이터가 저장되는 볼륨입니다.⚙️ 2. redis-cluster.conf 설정# redis-cluster.confcluster-enab..

DB 2025.06.17

Redis Cluster란?

고가용성과 수평 확장을 지원하는 Redis의 분산 시스템 기능📌 1. 왜 Redis Cluster인가?기존 Redis는 단일 노드 구조로, 다음과 같은 한계를 가짐:메모리 한계: 한 노드에 모든 데이터를 담아야 함장애 발생 시 전체 서비스 영향수평 확장 불가👉 Redis Cluster는 이러한 문제를 해결하며, 데이터 샤딩(sharding) 과 장애 자동 전환(failover) 을 지원함.🧱 2. 구성 요소와 역할Redis Cluster는 보통 다음 구성으로 운영됨: 역할설명마스터 노드 (Master)데이터를 직접 저장하고 클라이언트 요청 처리슬레이브 노드 (Replica/Slave)특정 마스터의 복제본, 마스터 장애 시 자동 승격클러스터 슬롯 (Slots)0 ~ 16383까지 총 16384개의 슬..

DB 2025.06.17

[MySQL] WITH RECURSIVE( 재귀 )

WITH RECURSIVE는 재귀 CTE (Common Table Expression)를 정의할 때 사용하는 MySQL의 기능입니다.이 기능은 계층적 데이터(예: 조직도, 디렉토리 구조, 그래프 등)를 처리하거나 반복적으로 데이터를 생성해야 할 때 사용됩니다.MySQL에서 WITH RECURSIVE는 8.0 버전 이상에서 지원됩니다.기본 문법WITH RECURSIVE cte_name AS ( -- Anchor 부분: 재귀의 시작점 초기_쿼리 UNION ALL -- Recursive 부분: 반복적으로 실행되는 쿼리 재귀_쿼리)SELECT * FROM cte_name;Anchor 쿼리: 재귀를 시작하는 기본 데이터를 반환합니다.Recursive 쿼리: Anchor 쿼리에서 반환된 ..

DB 2024.12.16

[ MySQL] WITH 절

MySQL의 WITH 절은 Common Table Expression (CTE)를 정의하는 데 사용됩니다. CTE는 임시 결과 집합으로, 쿼리 내에서 반복적으로 사용하거나 더 가독성이 좋은 쿼리를 작성하는 데 유용합니다.MySQL에서는 버전 8.0 이상에서 WITH 절을 사용할 수 있습니다.기본 문법WITH cte_name AS ( SELECT ... -- 임시 결과를 생성하는 서브쿼리)SELECT ...FROM cte_name;WITH: CTE를 정의하는 시작 부분cte_name: CTE의 이름AS: CTE에 대해 서브쿼리를 정의할 때 사용서브쿼리: CTE에 저장될 데이터 집합예제 1: 간단한 CTE아래는 직원 테이블에서 특정 데이터를 CTE로 정의하고 활용하는 예입니다.테이블 데이터-- empl..

DB 2024.12.16

[MySQL] 외래키 참조 무결

MySQL 외래 키 옵션: ON DELETE / ON UPDATEMySQL에서 외래 키(FK)를 설정할 때 ON DELETE와 ON UPDATE 옵션은 부모 테이블의 데이터가 삭제되거나 업데이트될 때 자식 테이블을 어떻게 처리할지를 정의합니다.옵션 종류CASCADE부모가 삭제/업데이트되면, 자식도 함께 삭제/업데이트주로 부모-자식 관계에서 데이터 일괄 관리 시 사용SET NULL부모가 삭제/업데이트되면, 자식의 FK 컬럼을 NULL로 설정자식 FK 컬럼이 NULL 허용이어야 함NO ACTION부모를 삭제/업데이트해도 자식에 영향 없음자식이 참조 중이면 부모 작업이 거부됨 (실제론 RESTRICT와 동일)RESTRICT부모를 삭제/업데이트할 때 자식이 참조 중이면 즉시 거부NO ACTION과 유사하나, M..

DB 2024.12.16

[MySQL] 복합 인덱스(Multiple-Column Indexes)

MySQL은 복합 인덱스(composite index)즉 여러 열에 대한 인덱스를 생성할 수 있습니다.하나의 인덱스는 최대 16개의 열로 구성될 수 있습니다.특정 데이터 유형의 경우, 열의 접두사(prefix)만 인덱싱할 수도 있습니다.(자세한 내용은 섹션 10.3.5, "열 인덱스" 참조)복합 인덱스 활용인덱스에 포함된 모든 열을 조건으로 사용하는 쿼리첫 번째 열만 조건으로 사용하는 쿼리첫 번째와 두 번째 열을 조건으로 사용하는 쿼리첫 번째, 두 번째, 세 번째 열을 조건으로 사용하는 쿼리그리고 이러한 순서를 따르는 모든 쿼리인덱스 정의에서 열의 순서를 올바르게 지정하면, 단일 복합 인덱스로도 다양한 종류의 조회 성능을 개선할 수 있습니다.복합 인덱스는 내부적으로 정렬된 배열로 간주됩니다. 각 행은 인..

DB 2024.12.12

[MySQL] Index 공식 문서 읽어 보기

개요공식 문서를 읽어보며 내용을 정리해 보자MySQL 최적화 및 인덱스 공식 문서https://dev.mysql.com/doc/refman/8.4/en/optimization-indexes.html1. 최적화 및 인덱스인덱스 생성의 장점인덱스는 테이블 행으로 가는 포인터 역할을 하여,WHERE 절 조건에 맞는 행을 빠르게 찾고 다른 열 값을 조회할 수 있도록 돕는다.MySQL의 모든 자료형에 인덱스를 생성할 수 있다.과도한 인덱스 생성은저장 공간 낭비옵티마이저가 사용할 인덱스를 결정하는 시간 증가INSERT/UPDATE/DELETE 시 인덱스 유지 비용 증가적절한 균형으로 최적의 인덱스 집합을 찾는 것이 중요하다.인덱스가 없을 때MySQL이 전체 테이블을 스캔하며 조건에 맞는 행을 찾아야 하므로, 테이블..

DB 2024.12.12

[MySQL] Index 정리

개요정리하기에 앞서, MySQL 공식 문서와 ChatGPT 검색 결과를 기반으로 테스트를 진행할 예정입니다.아래 링크와 정리 내용을 참고하여 인덱스(Index) 설정에 대해 실험합니다.MySQL 공식 문서MySQL 8.4 Reference Manual: Optimization and IndexesChatGPT 정리MySQL에서 복합 인덱스를 설정할 때는, 쿼리의 실행 계획과 컬럼 사용 순서에 따라 인덱스 컬럼 순서를 결정해야 합니다.특히 SELECT·JOIN·WHERE·GROUP BY·HAVING 절에 사용된 컬럼을 기준으로, 다음 우선순위에 따라 인덱스를 설계합니다.1. WHERE 조건 (최우선)WHERE 절은 가장 먼저 실행되며, 데이터 범위를 좁히는 역할을 합니다.선택도가 높은(중복이 적은) 컬럼을..

DB 2024.12.12

[MySql] 성능 개선에 관하여_해결 해 보자_2_경험

https://raconer.tistory.com/entry/MySql-%EC%84%B1%EB%8A%A5-%EA%B0%9C%EC%84%A0%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC%ED%95%B4%EA%B2%B0-%ED%95%B4-%EB%B3%B4%EC%9E%901explain [MySql] 성능 개선에 관하여_해결 해 보자_1_explainExplainSql문 성능 개선에 빠질수 없는 것 들 중 하나인 Explain 쿼리를 한번 확인해 볼려고 한다.컬럼 과 설명id쿼리의 각 부분을 식별하는 고유 번호입니다.서브쿼리나 UNION이 있을 경우 여러 id가 있raconer.tistory.com경험에 따른 Query 튜닝1. Index 설정 확인질문.1예)Mysql 에서 Index 설..

DB 2024.08.22