[DB] MySQL 파티션 테이블 가이드
·
Database/My SQL
MySQL 파티션 테이블 가이드들어가며: 파티션의 필요성대규모 데이터베이스를 운영하다 보면 마치 거대한 도서관을 관리하는 것과 같은 어려움을 겪게 됩니다. 수백만 건의 데이터를 하나의 테이블에서 관리한다면, 책장 전체를 뒤져야 하는 것처럼 검색 시간이 오래 걸리고 관리도 어려워집니다. 이러한 문제를 해결하기 위해 MySQL은 파티셔닝이라는 강력한 기능을 제공합니다.파티션 테이블의 이해파티션 테이블은 마치 도서관의 책을 주제별로 나누어 관리하는 것과 같습니다. 하나의 큰 테이블을 여러 개의 작은 물리적 조각(파티션)으로 나누어 저장하지만, 사용자 입장에서는 여전히 하나의 테이블처럼 사용할 수 있습니다.예를 들어, 온라인 쇼핑몰의 주문 내역을 연도별로 파티셔닝한다고 생각해봅시다:-- 주문 내역 테이블을 연도..
[DB] 파티션 테이블(Partition Table)이란?
·
Database/My SQL
파티션 테이블이란?파티션 테이블은 대용량 데이터를 효과적으로 관리하기 위해 하나의 테이블을 여러 물리적 단위(파티션)로 나누어 저장하는 방식입니다. 논리적으로는 하나의 테이블로 동작하지만, 물리적으로는 데이터가 각 파티션에 분산 저장됩니다. 이를 통해 데이터를 조회하거나 관리할 때 성능과 효율성을 크게 향상시킬 수 있습니다.파티션 테이블은 특히 Pruning이라는 최적화 기법을 지원합니다. 특정 데이터를 조회할 때 필요한 데이터가 위치한 파티션만 읽어들이는 방식으로, 쿼리 속도를 대폭 개선합니다. 또한, 파티션 테이블은 개발자 입장에서 기존 쿼리를 특별히 수정할 필요가 없으면서도 데이터 관리와 유지보수를 간소화할 수 있는 장점이 있습니다.1. 파티션 테이블의 장단점장점쿼리 성능 향상: 특정 조건에 맞는 ..
커버링 인덱스 (Covering Index) 를 사용해서 쿼리 최적화하기
·
Database/My SQL
커버링 인덱스(Covering Index)란 무엇인가?커버링 인덱스는 쿼리가 필요로 하는 모든 컬럼을 포함하는 인덱스를 말합니다. 이 인덱스를 사용하면 테이블의 실제 데이터 페이지에 접근하지 않고도 인덱스만으로 원하는 데이터를 조회할 수 있어 디스크 I/O를 절약할 수 있습니다.MySQL 공식 문서 정의:*"쿼리에서 검색되는 모든 컬럼을 포함하는 인덱스입니다. 인덱스 값을 전체 테이블 행을 찾는 포인터로 사용하는 대신, 쿼리는 인덱스 구조에서 값을 반환하여 디스크 I/O를 절약합니다. InnoDB는 MyISAM보다 더 많은 인덱스에 이 최적화 기술을 적용할 수 있습니다. 왜냐하면 InnoDB의 보조 인덱스에는 기본 키 컬럼도 포함되어 있기 때문입니다. InnoDB는 해당 트랜잭션이 끝날 때까지 트랜잭션에..
Java 환경에서 AES를 사용한 암호화 사용 정리
·
Java
DB 칼럼 암호화를 위한 AES 대칭키 암호화 방법최근 개인정보 보호 및 데이터 보안의 중요성이 커지면서, 데이터베이스 내 민감한 정보를 암호화하는 요구사항이 증가하고 있습니다. 본 포스트에서는 AES (Advanced Encryption Standard) 를 활용하여 DB 칼럼을 암호화하는 방법과 그 구현 예제를 소개합니다.1. AES란?AES는 미국 정부에서 채택한 표준 대칭키 암호화 알고리즘입니다.대칭키 암호화: 암호화와 복호화에 동일한 키를 사용합니다.키 사이즈: AES는 128, 192, 256비트 키를 지원하며, 키 길이가 길수록 brute force 공격에 대한 방어력이 향상됩니다.자세한 내용은 Wikipedia의 AES 문서 를 참고하세요.2. AES의 구성 요소AES 암호화를 구현하기 위..
MySQL 데이터 복구하기
·
카테고리 없음
데이터 복구 과정에서 학습한 내용 기록이번에 회사에서 AWS RDS로 DB 서버를 단계적으로 이전하는 과정에서 프로덕션 데이터가 소실되는 상황이 발생하였습니다. 다행히 바이너리 로그(binlog)를 보관하는 기간 내에 있어서 MySQL binlog를 활용하여 데이터를 복구할 수 있었습니다. 이때 학습한 내용을 기록 차원에서 남깁니다.데이터 복구 과정프로덕션 서버에서 binlog 확인SHOW BINARY LOGS;결과는 다음과 같았습니다:+---------------+-----------+ | Log_name | File_size | +---------------+-----------+ | binlog.000015 | 724935 | | binlog.000016 | 733481 | +------------..
MySQL Index 정리 및 팁
·
Database/My SQL
MySQL Index 정리 및 팁MySQL의 인덱스란 무엇인가?인덱스는 MySQL에서 데이터베이스 테이블의 데이터 검색 속도를 향상시키는 자료구조입니다. 책의 색인과 유사하게, 데이터베이스 인덱스는 전체 테이블을 스캔하지 않고도 데이터베이스 엔진이 특정 행을 빠르게 찾을 수 있게 해줍니다.MySQL은 주로 정렬된 구조로 데이터를 저장하여 효율적인 검색, 삽입, 삭제 작업을 가능하게 하는 B-Tree 인덱스를 사용합니다.B-Tree 인덱스 구조B-Tree(Balanced Tree) 인덱스는 다음과 같은 주요 특징을 가집니다:루트 노드: 브랜치 노드를 가리키는 트리의 최상위 레벨브랜치 노드: 키와 자식 노드에 대한 포인터를 포함하는 중간 레벨리프 노드: 인덱스된 값과 행 포인터를 포함하는 최하위 레벨균형 구..
카프카 Exactly Once Delivery 구현
·
Messaging Queue/Kafka
Kafka에서의 Exactly Once Delivery 구현메시지 시스템을 사용하다 보면 메시지의 전달 보장 방식에 대해 고려해야 합니다. 일반적으로 다음 세 가지 전달 방식이 있습니다.At Least Once Delivery: 메시지가 최소 한 번 전달됩니다. 중복 메시지가 발생할 수 있습니다.At Most Once Delivery: 메시지가 최대 한 번 전달됩니다. 메시지가 손실될 수 있습니다.Exactly Once Delivery: 메시지가 정확히 한 번 전달됩니다. 중복이나 손실이 없습니다.Kafka를 사용할 때, 메시지의 정확한 전달을 보장하는 것은 중요한 이슈입니다. 특히 Consumer 측에서 메시지를 처리하는 과정에서 중복이나 손실 없이 메시지를 정확히 한 번씩 처리하도록 구현하는 방법을 ..
스프링의 트랜잭션 처리
·
Java/Spring
이미 현업에서 자주 사용하지만 따로 정리하지는 않아서 이번 기회에 공식 레퍼런스를 보며 내용을 정리해보았다.스프링 트랜잭션 처리스프링 공식 문서: 트랜잭션 관리@Transactional 애노테이션은 인터페이스, 클래스, 또는 메서드에 트랜잭션의 의미를 부여하는 메타데이터이다. 예를 들어, "이 메서드가 호출될 때 새로운 읽기 전용 트랜잭션을 시작하고, 기존 트랜잭션은 일시 중지한다"는 의미를 가진다. @Transactional의 기본 설정은 다음과 같다:전파(Propagation): PROPAGATION_REQUIRED격리 수준(Isolation Level): ISOLATION_DEFAULT읽기-쓰기(Read-Write) 모드: 트랜잭션은 기본적으로 읽기-쓰기 모드이다.타임아웃(Timeout): 트랜잭션..
JPA & Hibernate Cache
·
Java/JPA
하이버네이트는 내부적으로 두종류의 캐쉬를 지원하는데 하나는 First-level cache 이고 다른 한종류는 Second-level Cache 이다 First-level cache? 대부분의 ORM (Object Relational Mapping) 프레임워크가 지원하는것처럼 하이버네이트또한 일차적 캐쉬를 지원한다. 일차캐쉬는 Hibernate 의 Session 단계에서 지원하는 캐쉬로 가장 비싼 연산작업중 하나인 데이터베이스와의 대화를 줄여주기 위해 존재한다. Session 안에서 동작하는 캐쉬이기 때문에 Session 이 종료되면 캐쉬도 같이 사라지게 된다. Second-level cache? First level cache 이 세션 단계에서의 캐쉬라면 second level cache 는 sessi..
JPA Cascade Types
·
Java/JPA
JPA를 사용해서 엔티티간의 관계를 설정할때 아래와 어노테이션을 작성하는 일이 많은데 어떤 의미를 가지고 있는지 알아보자 @OneToMany(cascade={CascadeType.REFRESH, CascadeType.MERGE}, fetch = FetchType.LAZY) 먼저 각각의 CaseType에 들어가기전에 영속성 컨텍스트와 JPA의 상태에 대한 선행지식이 필요하다 Persistence Conxtet (영속성 컨텍스트) 공식문서의 정의를 참조해보자 EntityManager (Java(TM) EE 7 Specification APIs) Interface used to interact with the persistence context. An EntityManager instance is associ..