DataBase 8

[MySQL] 파티셔닝, 샤딩, 레플리케이션

파티셔닝 (Partitioning)파티셔닝은 거대한 테이블이나 인덱스를 관리하기 쉬운 작은 단위로 물리적(더 작은 테이블)으로 분할하는 기술을 말합니다.데이터가 아무리 커져도 성능을 유지하고 가용성을 높이기 위한 필수적인 데이터베이스 설계 전략입니다. 파티셔닝의 목적성능 향상 : 특정 범위의 데이터만 조회할 때, 나머지 파티션은 무시하고 필요한 파티션만 스캔하므로 응답 속도가 빠릅니다.관리 용이성 : 오래된 데이터를 삭제할 때 DELETE 문으로 수백만 건을 지우는 대신, 해당 파티션만 DROP 하거나 TRUNCATE 할 수 있습니다.가용성 향상 : 전체 데이터가 한 곳에 있지 않기 때문에, 특정 파티션의 파일이 손상되어도 다른 파티션의 서비스는 유지될 수 있습니다.백업 및 복구 : 파티션 단위로 독립적..

DataBase 2026.01.05

[SQL] PK(기본키)는 어떤 값이 좋을까? (auto_increment, uuid)

데이터베이스에 테이블을 추가하는 작업을 해야한다고 가정해봅시다. 테이블의 설계에 따라 ID 값이 필요한 상황입니다.이 때, ID값으로 어떤 값을 사용하는 것이 가장 이상적일까요? 간단히 필요한 개념을 먼저 살펴보고 알아보도록 하겠습니다.SQL에서 ID 란?ID는 Identifier, 식별자라는 의미로 SQL에서는 데이터베이스 내의 각 행(레코드)을 고유하게 식별하는 값을 의미합니다.이 ID는 다음과 같은 특징을 가집니다.고유 식별자: 각 테이블의 행(row)은 고유한 ID를 가진다.관계 형성: 테이블에서 다른 테이블의 ID를 참조하여 데이터 간의 관계를 설정할 수 있다.데이터 무결성: 고유한 ID를 통해 데이터의 중복을 막고, 각 데이터가 명확하게 식별될 수 있도록 한다.각 행을 식별하는 어떠한 값도 I..

DataBase 2025.11.25

[SQL] MySQL InnoDB의 4가지 락(lock)

MySQL의 스토리지 엔진 레벨의 잠금에는 4가지 종류가 있다.레코드 락(Record Lock), 갭 락 (Gap Lock), 넥스트키 락 (Next-key Lock), 자동증가 락(AUTO-INC Lock) 알아야 하는 이유1) 데이터 정합성트랜잭션은 여러 쿼리를 하나의 논리적 단위로 묶어 원자적으로 처리하기 위한 수단이다.이 때 여러 트랜잭션이 동시에 같은 데이터를 다루면 경쟁 조건(race condition)이 발생할 수 있다. 락 (lock)은 바로 이런 경쟁 상황에서 데이터의 일관성과 정합성을 보장하는 핵심 도구이다. 만약 두 트랜잭션이 동시에 같은 재고 수량을 수정할 때, 락이 없다면 마지막에 커밋한 쪽만 반영되어 데이터에 유실이 발생할 것이다.하지만 락이 걸려있다면 MySQL이 먼저 실행한 ..

DataBase 2025.10.26

테이블 파티셔닝

만약 테이블에 데이터가 대량으로 계속 쌓일 때 해당 테이블에는 어떤 문제가 발생할 수 있을까?그리고 어떤 것을 고려해서 어떻게 해결해야할까?고려해볼 수 있는 부분은 인덱스, 정규화와 비정규화, 파티셔닝, 쿼리 최적화, 캐싱 등이 있을 것 같다.이 해결책 중 하나로 대량의 데이터를 효율적으로 분할하고 저장하기 위해 사용하는 테이블 파티셔닝을 공부해보고자 한다. 테이블 파티셔닝의 핵심은 대량의 데이터를 물리적으로 분할하고 파티션 키로 원하는 데이터에 빠르게 액세스하여 관리를 용이하게 하고 성능을 최적화시키는 것이다.하지만 그 안에 파티셔닝 전략과 테이블의 구조 변경, 키 전략, 데이터의 이전, 인덱스의 재생성으로 인한 효울적인 데이터 처리가 고려되어야 한다. 파티셔닝이란?테이블 파티셔닝은 하나의 테이블을 여..

DataBase 2025.10.23

[SQL] 4. 트랜잭션과 동시성

트랜잭션이란? 트랜잭션은 데이터베이스 관리 시스템 (DBMS)에서 데이터의 상태를 변화시키기 위한 작업(삽입, 삭제, 갱신 등)의 논리적 단위이다.일반적으로 여러 개의 연산으로 구성되어, BEGIN/COMMIT/ROLLBACK 경계 내에서 모든 연산이 성공적으로 완료 되거나, 하나라도 실패하면 모두 취소되어 이전 상태로 돌아가는 특징을 가진다. 이러한 특성을 통해 데이터의 무결성과 일관성을 보장한다.은행 계좌 이체를 예로 들면, 돈을 출금하는 작업과 입금하는 작업은 하나의 트랜잭션으로 묶을 수 있다.출금 작업만 성공하고 입금이 실패하면, 돈이 사라지는 문제가 발생한 것이기 때문이다. 그래서 출금과 입금은 모두 성공하거나, 둘 다 실패하여 이전 상태로 롤백되어야한다.이렇게 트랜잭션은 데이터의 무결성과 일관..

DataBase 2025.08.14

[SQL] 3. 인덱스(Index)란?

인덱스(Index)란?책에서 특정 단어를 찾을 때, 페이지를 처음부터 끝까지 넘기면 상당히 오래 걸린다. 하지만 책 뒤에 있는 인덱스를 보면 해당 단어가 있는 페이지 번호(위치)를 바로 알 수 있다.데이터베이스에서도 마찬가지로 테이블이 커질수록 WHERE/ ORDER BY/ JOIN 작업은 테이블 풀스캔( O(N) )이면 I/O 지옥으로 지연과 락이 많아질 수 있다. 이 때 인덱스를 사용하면 원하는 데이터의 위치를 먼저 찾아서 빠르게 접근할 수 있게 된다.인덱스를 사용하면 정렬된 데이터 구조(대부분 B+Tree), 빠른 주소록(해시)을 사용해 O(logN) 또는 평균 O(1)에 가까운 탐색 속도를 제공할 수 있다. 인덱스를 통해 데이터 베이스 조회 시 읽기 경로 단축 + 불필요한 페이지 접근 제거 + 정..

DataBase 2025.08.14

[SQL] 2. 조인(JOIN)

JOIN 이란?JOIN은 두 개 이상의 테이블을 연결하여 관련된 데이터를 조합할 때 사용하는 개념을 나타낸다. JOIN이 필요한 이유관계형 데이터베이스는 정규화를 통해 데이터를 여러 테이블에 나눠 저장한다.users 테이블에는 유저 정보만, orders에는 주문 정보만 있을때 데이터의 중복 최소화와 데이터 정합성의 유지가 가능한데, 데이터가 여러 테이블에 나뉘어져 있기 때문에 필요한 데이터를 확인하기 위해서는 조회 시 여러 테이블의 데이터를 묶어서 봐야 하는 경우가 많다.이 때 JOIN을 사용하여 공통 키(보통 PK-FK 관계)를 기준으로 테이블을 결합하게 된다. JOIN의 개념JOIN은 두 개 이상의 테이블을 논리적으로 결합하여 하나의 결과 집합으로 만드는 연산이다.조인 조건은 일반적으로 동일 값 비교..

DataBase 2025.08.14

[SQL] 1. SQL 이란? , 기본 개념과 기본 문법(쿼리 예시)

SQL "SQL(Structured Query Language), 구조적 쿼리 언어"SQL은 관계형 데이터베이스 (RDBMS)에서 데이터를 정의하고 관리하기 위해 설계된 프로그래밍 언어이다.데이터베이스에서 데이터를 추가(INSERT), 조회(SELECT), 수정(UPDATE), 삭제(DELETE) 등 다양한 작업을 수행할 수 있도록 해주는 도구이며, 데이터를 표 형태로 저장하고, 표 간의 관계를 정의하여 정보를 효율적으로 관리할 수 있게 해준다.SQL은 서로 다른 프로그래밍 언어와 잘 통합되고, 일반적인 영어 키워드를 사용하기 때문에 배우기도 쉬운 편이다. SQL 기본 구성 개념관계형 데이터 베이스(RDBMS) 기본 구조테이블 : 데이터를 행(row)과 열(column)로 구성해 저장행(Row, Reco..

DataBase 2025.08.14