전체 글 552

[실전 레디스] 2-3. 자료형과 기능: 보조 기능

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다. 1. Pub/Sub발행자가 구독자에게 메시지를 보내는 패턴자료형이 아닌 기능 형태로 제공됨 요소구독자관심있는 주제에 대해 하나 이상의 채널을 구독할 수 있음 발행자특정 채널을 지정하여 이 채널을 통해 메시지를 발행함 명령어구독subscribe mychannel1unsubscribe mychannel1psubscribe my*punsubscribe my*ssubscribe shd1sunsubscribe shd1ssubscribe: 샤드 ID로 구독 발행publish mychannel1 "Hello, World!"spublish shd1 "Hello, World!"spublish: 샤드 ID로 발행 상태 확인pubsub channelspubsub..

Database/Redis 2025.03.21

[실전 레디스] 2-2. 자료형과 기능: 보조 자료형

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.보조 자료형은 모든 자료형에서 사용될 수 있음 1. Bitmap현재 처리하고 있는 데이터 모델을 비트로 표현함내부적으로 String 형으로 정의되어 있음 (type 명령어로 확인 가능) 장점메모리를 아낄 수 있음 (단, 희소한 상태가 되면 낭비가 심해 비효율적임)여러 키로 분해하여 샤딩하기 용이함 명령어생성setbit visitor:20220829 100 1setbit visitor:20220829 200 1setbit visitor:20220830 400 1 읽기getbit visitor:20220829-20220830 100bitcount visitor:20220829-20220830bitpos visitor:20220829-20220830..

Database/Redis 2025.03.20

[실전 레디스] 2-1. 자료형과 기능: 기본 자료형

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.1. 개요네임스페이스전역 스페이스에서 모든 키를 관리함키를 그룹화하기 위해 prefix 또는 DB 번호로 분리 가능 예시) prefix더보기구조: user::SET user:1001:name "Redis"SET user:1001:email "redis@example.com"MGET user:1001:name user:1001:email키 충돌 방지그룹 관리 용이 예시) DB 번호더보기0: 세션 관리용SELECT 0SET session:1234 "login" 1: 캐시 관리용SELECT 1SET cache:home_page "cached html"키 간 공유가 안됨 → 논리 분할에 적합 키 어노테이션각 키간 관계를 주석 처럼 명시하거나 트리거 로..

Database/Redis 2025.03.20

[실전 레디스] 1. 레디스의 시작

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다. 1. 레디스를 사용하기까지NoSQL구분내용특징- 빠른 속도- 특정 데이터 모델에 최적화됨 (일부 데이터 모델은 RDBMS로 구현 시 복잡)유형- Key-Value Store- Column-Oriented DB- Document-Oriented DB- Graph DB 예시) 소셜 네트워크 (Graph DB)더보기연결 정보를 저장해야 함 (A는 B의 친구이고, B는 C의 친구이고, C는 A의 친구다) RDBMSJoin 반복이나 재귀 쿼리를 써야 함 → 느리고 복잡함GraphDB(Neo4j)관계 중심 모델에 최적화각 사람을 노드, 친구 관계를 엣지로 표현 (MATCH (a)-[:FRIEND]-(b)-[:FRIEND]-(c)) 예시) 이용자 맞춤 설..

Database/Redis 2025.03.19

[업무에 바로 쓰는 SQL 튜닝] 5. 악성 SQL 튜닝으로 전문가 되기

양바른 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. SQL 문 재작성으로 착한 쿼리 만들기처음부터 모든 데이터를 가져오는 SQL문explainselect 사원.사원번호, 급여.평균연봉, 급여.최고연봉, 급여.최저연봉 from 사원, ( select 사원번호, round(avg(연봉), 0) 평균연봉, round(min(연봉), 0) 최고연봉, round(min(연봉), 0) 최저연봉 from 급여 group by 사원번호 ) 급여 where 사원.사원번호 = 급여.사원번호 and 사원.사원번호 between 10001 and 10100;급여 테이블에서 그룹핑 시, 거의 전체 테이블을 스캔함사원 테이블에서 필터링된 데이터는 100건에 불과함 explainselec..

Database/Mysql 2025.03.19

[업무에 바로 쓰는 SQL 튜닝] 4. 악성 SQL 튜닝으로 초보자 탈출하기

양바른 님의 "Real MySQL" 책을 정리한 포스팅 입니다.1. 준비실무적인 튜닝 절차 이해하기1. 현황 파악결과 및 소요 시간 확인실행계획 분석 ("EXPLAIN ANALYZE")단계별 소요 시간 확인 ("SHOW PROFILE FOR QUERY")쿼리 비용 확인 ("SHOW STATUS LIKE 'Last_query_cost'")조인/서브쿼리 구조 확인 ("EXPLAIN")동등/범위 조건프라이머리 키나 유니크 키로 사용되는 지 확인range로 처리되는지 확인ICP를 활용할 수 있는지 확인 2. 튜닝 방향 판단 및 개선 2. SQL 문 단순 수정으로 착한 쿼리 만들기기본키 변형explain select * from 사원 where substring(사원번호,1,4) = 1100 and length(..

Database/Mysql 2025.03.18

[업무에 바로 쓰는 SQL 튜닝] 2. SQL 튜닝 용어를 직관적으로 이해하기

양바른 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 물리 엔진과 오브젝트 용어SQL 프로세스 용어파서사용자가 요청한 SQL 문을 쪼개 최소 단위로 분리하고 트리를 만듬트리를 만들면서 문법 검사를 수행함 전처리기파서에서 생성한 트리를 토대로 SQL 문에 구조적인 문제가 없는지 확인SQL 문에 사용된 오브젝트들이 실직적으로 존재하는지, 접근 권한은 부여되어 있는지 확인 옵티마이저전달된 파서 트리를 토대로 연산 과정을 단순화함 (필요하지 않은 조건을 제거함)실행 계획 수립 (테이블 접근 순서, 인덱스 사용 유무, 임시테이블 사용 유무) 엔진 실행기수립된 실행 계획을 참고하여 스토리지 엔진에서 데이터를 가져옴읽어온 데이터를 정렬하거나 조인불필요한 데이터는 필터링 DB 오브젝트 용어기본키특정 행..

Database/Mysql 2025.03.18

[업무에 바로 쓰는 SQL 튜닝] 1. MySQL과 MariaDB 개요

양바른 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 1. 현황MySQL1995년 오픈소스로 배포된 DBMS2010년 오라클(Oracle)에 인수됨상용 버전과 무료 버전으로 구분됨장점: 대용량 데이터 처리, 높은 가용성, 안정성 MariaDBMySQL 핵심 개발자들이 독립하여 MariaDB 개발MySQL이 오라클에 인수되면서 라이선스 정책 및 개발 방향 변화오픈소스 정책을 유지MySQL 5.5 버전 이후 독자적인 길을 걷기 시작SQL 문법과 실행 계획 출력 방식은 MySQL과 유사옵티마이저 기능 등 일부 차이점 존재 2. 상용 RDBMS와의 차이점구조적 차이구분 Oracle MySQL이중화 스토리지 구조Shared Storage (공유 스토리지) - 통합된 스토리지 하나를 공유Shared-No..

Database/Mysql 2025.03.18

[Real MySQL] 16-2. 복제: 타입

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 소스 서버의 바이너리 로그에 기록된 변경내역들을 식별하는 방식에 따라 나뉨 1. 바이너리 로그 파일 위치 기반 복제소스 서버의 바이너리 로그 파일명과 파일 내에서의 위치로 개별 바이너리 로그 이벤트를 식별해서 복제함이벤트 하나하나를 바이너리 로그 파일명과 파일내에서의 위치값의 조합으로 식별함레플레카 서버에서 소스 서버의 어떤 이벤트부터 동기화를 수행할 것인지 설정해야 함어느 이벤트까지 로컬 디스크로 가져왔고 적용했는지 관리다음번에 가져올 이벤트를 표시하려는 목적 필수 사항복제 구성원이 되는 MySQL 서버가 고유의 server_id를 가지고 있어야 함소스 서버에서 반드시 바이너리 로그가 활성화돼 있어야 함기본적으로 활성화 되어 있음..

Database/Mysql 2025.03.14

[Real MySQL] 14-2. 스토어드 프로그램: 참고사항

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.3. 보안 옵션DEFINIER / SQL SECURITY각 스토어드 프로그램을 생성하고 실행하는 권한 DEFINIERCREATE DEFINER='admin'@'%' PROCEDURE sp_test()BEGIN SELECT 'Hello, world!';END;소유권과 같은 의미기본적으로 설정됨 SQL SECURITYCREATE DEFINER='admin'@'%' PROCEDURE sp_test()SQL SECURITY DEFINERBEGIN SELECT * FROM sensitive_data;END;스토어드 프로그램을 실행할 때 누구의 권한으로 실행할지 결정하는 옵션DEFINIER: 생성한 사용자의 권한으로 실행INVOKER..

Database/Mysql 2025.03.13