
클러스터링(Clustering)여러 대의 서버를 하나의 시스템처럼 작동하도록 구성하여 확장성과 가용성을 높이는 기술이다. 이를 통해 트래픽 증가나 장애 상황에서도 안정적인 서비스를 제공할 수 있다.특징으로는,여러 DB 서버를 하나의 논리적 단위로 묶어 운영.고가용성과 확장성을 보장.데이터의 일관성을 유지하면서 트래픽을 분산 처리. 1) Active-Active 방식구성두 개 이상의 DB 서버가 동시에 작동하며, 하나의 스토리지를 공유.모든 DB 서버가 트래픽을 처리하고, 한쪽 서버가 중단되더라도 나머지 서버가 정상 작동.장점높은 가용성: 한 서버가 중단되더라도 다른 서버가 지속적으로 작동하여 서비스가 중단되지 않음.성능 향상: 두 개 이상의 서버가 CPU, 메모리, 네트워크 등을 활용하여 더 높은 성능을..

이전에 [DB] PK (Primary Key) ID 길이가 성능에 영향을 미칠까? 라는 글을 쓸 때 인덱스에 대해서 간단히 알아보았다.또한, 데이터베이스 튜닝에 대하여 라는 글을 쓸 때에도 인덱스를 설정하여 DB의 성능을 높이는 방법에 대해서도 알아보았다. 해당 글에서는 인덱스에 대해서 더 자세히 알아보겠다. 인덱스란?인덱스란 CUD 의 성능을 희생하고 그 대신에 테이블의 조회 속도를 높여주는 자료구조이다. 어떤 항목을 조회하는데 60초 이상의 시간이 걸리던 것이 인덱스를 통해서 조회하면 한자리수의 초 단위로 조회할 수도 있을 정도로 데이터베이스 속도를 크게 좌우하는 요소이다. 하지만 마구잡이로 인덱스를 사용하면 사용하기 전보다 성능이 더 떨어질 수도 있다.그렇기 때문에 인덱스라는 것을 잘 알고 써야 ..

튜닝은 데이터베이스 시스템의 성능을 끌어올리고 안정성과 신뢰성을 높이는 중요한 과정이다. 이를 통해, 쿼리 성능을 향상하고, 시스템 자원을 효율적으로 사용할 수 있다.튜닝을 하는 이유는 주어진 하드웨어 환경을 통해서 처리량과 응답속도를 개선하기 위해서이다.성능 저하가 일어나면 시스템의 안정성과 사용성은 떨어질 수밖에 없기에 주기적으로 데이터베이스 튜닝을 진행해야 한다. 튜닝이라고 하면 포괄적으로 생각할 수 있는데, 아래 방법들을 말한다.쿼리 최적화캐싱 전략하드웨어 자원 관리인덱스 관리... 이러한 튜닝을 진행할 때 단계가 있다.1. 데이터베이스 설계 튜닝(모델링 관점)데이터 모델링, 인덱스 설계데이터베이스 용량 산정ex) 반정규화2. 데이터베이스 환경 튜닝(환경 관점)메모리나 블록 크기 지정ex) Buf..

RDBMS와 NoSQL의 선택: 어떤 데이터베이스를 사용할까?프로젝트를 진행할 때 어떤 데이터베이스 사용할지 한 번은 깊게 생각해보게 된다.특히 RDBMS에 적합한지 NoSQL에 적합한지부터 고려하게 되는 것 같다.MySQL과 MongoDB를 기준으로 RDBMS과 NoSQL를 비교하여 살펴보면서 어떤 상황에 어떤 DB가 적합한지에 대해서 한 번 살펴보겠다. RDBMS란?RDBMS(Relational Database Management System)는 데이터를 테이블 형식으로 관리하는 데이터베이스 시스템이다. 테이블 간의 관계를 키(Key)를 통해 정의하며, SQL(Structured Query Language)을 사용하여 데이터를 조회, 삽입, 수정, 삭제한다.대표적으로 MySQL, PostgreSQL,..

관계형 데이터베이스에서는 중복 데이터를 최대한 없애기 위해 데이터를 여러 테이블로 나눠서 저장한다.DB에 데이터들을 저장하고 데이터들을 조회하려고 할 때 여러 테이블들을 JOIN해서 데이터를 얻는 과정을 꼭 거쳐한 한다.조인은 여러 테이블에 분산된 데이터를 연결하여 원하는 결과를 도출하는 중요한 도구이다.그렇기 때문에 "JOIN"에 대해서 자세히 알아보고 사용하는게 좋을 것 같아서 이 글을 작성하게 되었다. 조인(Join)이란?조인은 두 개 이상의 테이블에서 데이터를 연결하여 원하는 정보를 조회하는 SQL 연산이다. 테이블 간의 관계를 정의하는 "키(Key)"를 기반으로 데이터를 결합하며, 이를 통해 복잡한 데이터 구조에서도 필요한 정보를 가져올 수 있다고객 테이블과 주문 테이블이 따로 있는 경우 조인 ..

세상에 있는 모든 데이터들은 어떠한 저장소에 있다. 이러한 저장소를 데이터베이스라고 하고, 우리가 일상적으로 사용하는 온라인 쇼핑몰, 은행 시스템, SNS 등 모든 디지털 서비스는 데이터베이스를 기반으로 작동한다.데이터베이스는 단순히 데이터를 저장하는 장소가 아니다. 데이터를 구조화하고, 검색 및 갱신 작업을 최적화하며, 여러 사용자가 동시에 접근할 수 있는 환경을 제공한다. 데이터 베이스의 특징을 보면 아래와 같다.1. 실시간 접근성 (Real-Time Accessibility)데이터베이스는 실시간으로 데이터를 저장하고 검색할 수 있는 기능을 제공한다. 그래서 수시로 비정형적인 질의(조회)에 대해 빠르게 응답해야 한다. 이러한 실시간 처리 기능은 다양한 애플리케이션에서 필수적이다. ex) ..

정규화란?정규화(Normalization)는 관계형 데이터베이스에서 데이터 구조를 체계적으로 정리하는 과정이다. 그러면 왜 정규화가 필요할까?중복 데이터 제거: 중복 데이터를 최소화하여 저장 공간 절약 및 데이터 일관성 유지.데이터 무결성 보장: 데이터 이상 현상을 방지하고 데이터 간 논리적 관계를 보장.데이터 이상(Anomaly) 방지:삽입 이상: 데이터를 추가할 수 없는 상태 방지.삭제 이상: 데이터 삭제 시 관련 정보가 유실되는 상황 방지.갱신 이상: 데이터가 불필요하게 중복되어 일관성이 깨지는 현상 방지. 그러면 정규화를 통해 데이터가 깔끔해지긴 하지만, 모든 경우에 항상 정규화가 최선일까라는 의문이 들 수 있다. 최선이 아닌 경우 우리는 반정규화 개념을 사용할 수 있다.반정규화(De-normal..

먹물 프로젝트를 진행하면서, 데이터베이스 설계 시 자료형을 어떤 것을 쓸지 선택하는 것이 성능, 저장소 효율성 등에 큰 영향을 끼친다는 것을 느꼈습니다. 이를 계기로 데이터베이스 자료형에 대해서 알아보자는 목표를 갖게 되어 해당 내용을 정리하게 되었습니다. 데이터베이스 자료형자료형(Data type)은 데이터베이스에서 각 필드에 저장할 데이터의 속성을 정의하는 요소이다. 올바른 자료형을 선택해야 데이터 무결성을 보장하고, 저장 공간을 최적화하며, 쿼리 성능을 향상시킬 수 있어 자료형을 정할 때 꼭 유의해야 한다. 데이터베이스마다 자료형은 약간씩 차이가 있다. 일단 MySQL을 기반으로 자료형에 대해서 살펴보겠다. (1) 숫자형(Numeric)정수형: INT, BIGINT, MEDIUMINT, SMALLI..

Flush : 영속성 컨텍스트와 데이터베이스의 동기화JPA Flush는 영속성 컨텍스트(Persistence Context)의 변경 내용을 DB에 반영하는 것을 말한다.영속성 컨텍스트는 엔티티 객체를 관리하는 메모리 공간이다. Flush는 이 영속성 컨텍스트에서 변경된 엔티티를 데이터베이스와 동기화하는 데 사용된다.즉, 영속성 컨텍스트 메모리 상에 저장된 객체 상태를 데이터베이스에 반영하는 것이다. 이 때, Flush는 동기화하는 것이기 때문에 Flush가 일어나도 1차 캐시된 영속성 컨텍스트는 그대로 유지된다.( clear는 영속성 컨텍스트를 비워서 관리 중인 엔티티를 모두 제거하는 것이다. ) Flush가 발생하는 시점Flush는 자동으로 발생할 수도, 수동으로 발생시킬 수도 있다.일단 자동으로 발..

Primary Key ?PK (Primary Key)는 데이터베이스에서 각 행(row)을 고유하게 식별하기 위한 열(column)이다.PK는 효율적인 데이터 검색, 외래 키 참조, 데이터 무결성 보장을 위해 사용된다. PK 길이가 길어질 때의 문제점은 무엇일까?저장 공간 증가: 긴 PK는 테이블의 저장 공간을 늘리고, 외래 키로 참조되는 테이블에도 영향을 미친다.인덱스 크기 증가로 인한 검색 성능 저하: PK는 기본적으로 인덱스로 관리되며, 길이가 길수록 인덱스 크기가 증가하고 검색 속도가 느려진다.외래 키 테이블의 추가 비용: 외래 키가 긴 PK를 참조할 때, 외래 키 테이블도 더 많은 공간을 차지하게 된다. PK 길이가 길어질 때 인덱스 크기 증가로 인한 검색 성능 저하에 대해서 더 자세히 알아보겠다..