728x90

DataBase 14

MySQL 복제(레플리카) 설정하기

복제란?복제는 한 서버에서 다른 서버로 데이터가 동기화되는 것을 말한다.소스(Source) 서버: 원본 데이터를 가진 서버레플리카(Replica) 서버: 복제된 데이터를 가지는 서버소스 서버에서 데이터 및 스키마에 대한 변경이 최초로 발생한다. 레플리카 서버에서는 이러한 변경 내역을 소스 서버로부터 전달 받아 자신이 가지고 있는 데이터에 반영함으로써 소스 서버에 저장된 데이터와 동기화 시킨다. 복제의 목적은 주로 다음 4가지이다.스케일 아웃(Scale-out)데이터 백업레플리카 서버를 데이터 분석용 서버로 사용데이터의 지리적 분산복제 아키텍처복제 아키텍처를 이해하기 위해서두 가지 로그를 알아두어야 한다.바이너리 로그(Binary Log): MySQL 서버에서 발생하는 모든 변경 사항을 순서대로 기록한다...

DataBase/MySQL 2025.07.20

MySQL 콜레이션 (feat. 정렬, 비교)

회사 업무 중 MySQL5.7을 사용하던 당시 생성된 테이블과 이후 생성된 테이블의 COLLATION이 일치하지 않아,두 컬럼의 JOIN 시 에러가 발생하는 상황이 있었다. 둘 중 하나의 컬럼의 COLLATION을 명시적으로 변경하여야 JOIN이 가능했다. 이러한 이슈가 다시 발생하지 않도록 콜레이션에 대해 알아보자.콜레이션이란콜레이션은 문자열 컬럼의 값에 대한 비교나 정렬 순서를 위한 규칙을 의미한다.비교나 정렬 작업에서영어 대소문자를 같은 것으로 처리할지더 크거나 작은 것으로 판단할지에 대한 규칙을 정의하는 것이다. 따라서 각 문자열 컬럼의 값을 비교하거나 정렬할 때는문자 집합뿐 아니라 콜레이션의 일치 여부에 따라 결과가 달라지며쿼리의 성능 또한 상당한 영향을 받는다. 콜레이션의 특징하나의 문자 집합..

DataBase/MySQL 2025.06.22

Redis Pub/Sub 기능 사용하기 (feat. NestJS)

Publish-Subscribe 패턴Redis의 pub/sub을 살펴보기 전에 pub/sub이 어떤 기능인지부터 살펴보자. publish-subscribe (pub/sub)은메시지 발행자(publisher)는 특정 채널에 메시지를 보내고,해당 채널을 구독한 모든 구독자(subscriber)들은 그 메시지를 수신하는 방식이다.이는, 발행자가 구독자에게 직접 메시지를 보내는 일반적인 메시징 패턴과 구분된다.구독자가 없다면 메시지는 사라지고 복구되지 않는다. 이러한 구조는 발행자와 구독자가 서로를 알 필요 없이 독립적으로 동작할 수 있게 하여(decoupling),시스템의 확장성과 유연성을 높인다. Redis Pub/Sub"channel11" 과 "ch:00" 채널을 구독하려는 클라이언트는 아래와 같이 입력한..

DataBase/Redis 2025.03.02

DB 참조 무결성 제약 (feat. ON DELETE, ON UPDATE)

참조 무결성 제약이란참조 무결성 제약(Referential Integrity Constraint)이란데이터베이스에서 외래 키(Foreign Key)가 정의된 경우,참조되는 테이블(부모 테이블)과 참조하는 테이블(자식 테이블) 간의 관계를 유지하도록 보장하는 제약 조건이다.이를 통해 데이터의 일관성과 정확성을 유지할 수 있다. 참조 무결성 제약의 역할 1. 자식 테이블의 외래 키 값은 반드시 부모 테이블의 기본 키(Primary Key) 값 중 하나이도록 제한한다. 2. 부모 테이블에서 데이터를 삭제하거나 수정할 때 자식 테이블의 외래 키 값이 어떻게 처리될지를 결정한다. 참조 무결성 제약의 4가지 옵션외래 키를 정의할 때부모 테이블의 데이터 변경(삭제 또는 수정)이 자식 테이블에 미치는 영향을 제어하기 ..

DataBase 2025.01.19

[MySQL] 인덱스의 기본, B-Tree 인덱스 사용법

DBMS에서 쿼리를 효율적으로 사용하기 위해인덱스는 매우 중요하다. 그 중 가장 대표적인 B-Tree 인덱스에 대해 알아보자.인덱스란우선 인덱스가 무엇인지부터 살펴보자.인덱스는 컬럼의 값과 해당 레코드가 저장된 주소를키와 값의 쌍으로 만들어두는 것이다. 그리고 컬럼의 값을 주어진 순서로 미리 정렬하여 보관한다. 인덱스는 Sorted List의 구조를 가지고 있는데,Sorted List 자료 구조는 데이터가 변경/추가될 때마다 항상 값을 다시 정렬해야 하므로 저장하는 과정이 느리고 복잡하지만이미 정렬 되어 있기 때문에 원하는 값을 매우 빠르게 찾을 수 있다는 특징을 갖는다. 즉, 인덱스는 데이터의 저장(INSERT, UPDATE, DELETE) 성능을 희생하고읽기 성능을 높이는 기능이다. 그렇기에 마냥 인..

DataBase/MySQL 2024.11.24

pg_trgm, Postgresql trgm으로 한글 LIKE 검색 시 Index 사용하기

postgresql로 만들어진 테이블에서음식의 이름을 검색하는 기능을 구현해야 했다. 유저가 특정 키워드를 입력하면 그 키워드가 포함된 음식을 반환하는 방식이다. SQL의 LIKE 문법과 와일드 카드(%)를  사용하면 문자열을 포함한 결과를 조회할 수 있지만, SELECT *FROM foodsWHERE name LIKE '%키워드%';키워드 앞에 와일드 카드(%)를 붙이면name 필드의 인덱스를 사용할 수 없다. 검색에서 인덱스를 타지 않으면 full table scan을 하게되고,테이블의 크기가 클 수록 조회 쿼리의 부하가 커진다. LIKE 검색 시 인덱스를 사용하기 위해 찾은 방법은pg_trgm 트라이그램(trigram)이라는 postgresql 확장 기능을 사용하는 것이다. Postgresql 공식..

DataBase/PostgreSQL 2024.10.13

[Redis] Redis란? 설치 방법과 활용법

회사에 입사하고 새롭게 접하게 된 Redis. 이전에 사용해 본 적이 없어서 생소하기도 하고,사용해야 하는 이유와, 사용되는 로직이 잘 이해되지 않았다. 스스로 정리하지 않으니, 한 번 들어도 까먹게 되더라.다음에 봤을 때 또 초면처럼 느끼지 않도록 정리해보자. Redis란우선 redis는 데이터 접근/저장/관리와 관련된 서비스다. 일반적으로 데이터는 데이터베이스에 저장하여, 필요할 때마다 쿼리를 실행해 불러오거나 저장하거나 한다. 그러나 개발을 하다보면 데이터 베이스에 접근하는 것은 시간이 많이 걸린다는 것을 느끼게 된다.속도를 빠르게 하기 위해 데이터 베이스에도 캐싱이 적용되는데,Redis가 자주 접근하는 데이터를 캐시에 두고 속도를 향상시키는 데이터 캐시 서버 역할을 한다. Redis는 key-va..

DataBase/Redis 2023.09.12

[MySql] 조건 입력 순서

1. SELECT2. FROM3. WHERE4. GROUP BY5. HAVING6. ORDER BY7. LIMIT 참고한 블로그: https://dwbutter.com/entry/MySQL-SELECT-%EB%AC%B8-%EA%B0%81-%EC%A0%88%EB%93%A4%EC%9D%98-%EC%82%AC%EC%9A%A9-%EC%88%9C%EC%84%9C-%EC%8B%A4%EC%A0%9C-%EC%8B%A4%ED%96%89-%EB%90%98%EB%8A%94-%EC%88%9C%EC%84%9C [MySQL] SELECT 문 각 절들의 사용 순서, 실제 실행 되는 순서SELECT 문의 각 절들은 먼저 써야 하는 순서들이 정해져있다. 이 순서는 반드시 지켜야 함 더 앞에 나와야 하는 순서대로 보면 1. SELECT..

DataBase/MySQL 2023.04.27

[MySql] 이미 존재하는 row의 속성을 새로 입력하고 싶다면?

예를 들어 name, email, phone_number 칼럼이 있는 users 테이블에서 당신이 이미 name, email을 넣어 한 명의 user를 아래와 같이 입력했다고 해보자.id (PK)nameemailphone_number1왈왈이walwalwal@tistory.comNULL...   phone_number는 입력하지 않았으므로, NULL값일 것이다. 이 상태에서 phone_number를 입력하고자 할 때INSERT INTO 구문을 사용하여 데이터를 넣어야겠다고 생각할 수 있다. 하 지 만데이터 관점에서 INSERT INTO는 새로운 행(새로운 user)를 추가하는 행위이므로이미 존재하는 행(user)의 속성(column)을 새로이 입력하고자 할 때는 UPDATE ~ SET ~구문을 사용해줘야 ..

DataBase/MySQL 2023.04.06

[MySql] GROUP BY, max()를 활용한 문제 풀이

문제: 페이지 하단 참고자료의 SQL 키워드들과 MySQL의DQL(Data Query Language)를 사용하여, 아래 결과가 출력될 수 있는 쿼리문을 작성해주세요. 특정 배급사(Nolan Unlimited)의 영화 중 가장 높은 평점을 받은 영화의 모든 정보와 출연 배우 목록을 다음과 같은 형태로 출력해주세요.(문제 출처: 위코드 (wecode)) 내가 작성한 쿼리문 SELECT m.title, m.rate, m.open_date, d.business_name, JSON_ARRAYAGG( JSON_OBJECT( "name", a.name , "actorId", a.id)) actor_listFROM movies mJO..

DataBase/MySQL 2023.03.25
728x90