Data 27

MongoDB 인덱스와 인덱싱 전략 이해하기

데이터가 많아질수록 찾고자 하는 특정 데이터를 빠르게 조회하는 것이 중요해집니다.만약 인덱스가 없다면, 데이터베이스는 모든 문서를 처음부터 끝까지 읽어가며 일일이 비교해야 합니다. 이렇게 되면 데이터가 많을 때는 조회 속도가 매우 느려지겠죠?🤔 인덱스가 있으면 지정한 필드에 대한 위치를 미리 알고 있기 때문에 빠르게 찾을 수 있습니다.이 글에서 MongoDB의 인덱스에 대해 알아보겠습니다.  동작 원리MongoDB의 인덱스는 B-트리 구조로 만들어집니다.이는 데이터가 오름차순이나 내림차순으로 정렬된 트리 구조로 특정 값에 접근할 때 트리의 높이에 비례하여 빠르게 이동할 수 있습니다. 이렇게 만들어진 인덱스 덕분에 특정 값을 탐색하거나 범위 조회가 가능해지며 이 과정에서 많은 시간을 절약할 수 있습니다...

Data/MongoDB 2024.10.31

[DataBase] 샤딩(Sharding), 파티셔닝(Partitiong), 레플리케이션(Replication)

데이터베이스에서 대량의 데이터를 효율적으로 관리하고 성능을 최적화하기 위한 기법들에 대해 알아보겠습니다. 🤗 샤딩(Sharding)샤딩은 데이터 베이스를 수평으로 나누어 여러 서버에 분산 저장하는 기법입니다.데이터가 여러 서버에 분산되어 저장되므로, 시스템의 부하를 줄이고 성능을 향상할 수 있습니다. 샤딩의 장점부하 분산여러 서버에 데이터가 분산되어 요청을 병렬로 처리할 수 있습니다.확장성데이터가 늘어날 때 서버를 추가하여 쉽게 확장할 수 있습니다.장애 대응특정 서버에 장애가 발생해도 다른 서버가 계속 작동하므로 시스템의 가용성이 높아집니다.샤딩의 단점복잡성 증가샤딩을 구현하면 데이터 관리와 쿼리 로직이 복잡해질 수 있습니다.특히 데이터가 여러 샤드에 분산되어 있기 때문에 데이터 조회 시 여러 샤드를 ..

Data/DataBase 2024.10.20

[MySQL] 트리거(Trigger) 활용하기

MySQL 트리거는 데이터베이스 관리에서 매우 유용한 도구지만 활용법을 잘 알지 못하거나 지나치기 쉽습니다!트리거의 개념과 실제로 어떻게 활용할 수 있는지 확인해 보겠습니다.🧐 트리거(Trigger)란?MySQL 트리거는 데이터베이스 테이블 변경(INSERT, UPDATE, DELETE)이 일어날 때 자동으로 실행되는 SQL 코드입니다.이를 통해 데이터 무결성을 유지하거나 특정 이벤트가 발생했을 때 추가 작업을 자동화할 수 있습니다. 트리거는 다음 두 가지 조건에 따라 실행됩니다.DML 이벤트데이터 조작 이벤트, 즉 INSERT, UPDATE, DELETE 등이 발생할 때타이밍트리거가 발생하는 시점, 즉 BEFORE 또는 AFTER트리거의 유형BEFORE 트리거트리거가 테이블에 대한 조작이 일어나기 전..

Data/MySQL 2024.10.09

[MySQL] 인덱스 동작 원리 및 최적화

인덱스의 동작원리에 대해 알아보겠습니다 📝 인덱스란 무엇인가?인덱스는 데이터베이스 테이블에서 데이터를 더 빠르게 검색할 수 있도록 도와주는 데이터 구조입니다.인덱스는 책의 색인처럼 동작하여, 특정 데이터를 빠르게 찾을 수 있게 합니다.MySQL에서는 주로 B-Tree와 Hah 인덱스를 사용합니다. 인덱스의 동작 원리B-Tree 인덱스가장 널리 사용되는 인덱스 유형으로, 균형 잡힌 트리 구조를 가지고 있어 검색, 삽입, 삭제 작업이 효율적으로 수행됩니다.구성요소로는 아래와 같습니다.노드(Node): 데이터와 포인터를 포함하는 트리의 요소루트 노드(Root Node): 트리의 최상위 노드리프 노드(Leaf Node): 자식 노드가 없는 최하위 노드가지 노드(Branch Node): 루트 노드와 리프 노드 ..

Data/MySQL 2024.08.04

[MySQL] 쿼리 절 순서

데이터베이스에서 데이터를 조회할 때, SQL 쿼리의 여러 절들이 결합되어 원하는 결과를 얻을 수 있습니다.MySQL 쿼리 절의 실행 순서를 이해하면 더 효율적이고 정확한 쿼리를 작성할 수 있습니다🤗 MySQL 쿼리 절 순서MySQL 쿼리는 다음 순서로 실행됩니다.FROM데이터를 가져올 테이블을 지정합니다.JOIN여러 테이블을 결합합니다.WHERE특정 조건을 만족하는 행만 선택합니다.GROUP BY선택된 행을 그룹화합니다.HAVING그룹화된 데이터에 대한 조건을 지정합니다.SELECT 데이터를 선택합니다.ORDER BY결과를 정렬합니다.LIMIT반환할 행의 수를 제한합니다.예제 쿼리를 통하여 각 절이 어떻게 함께 작동하는지 살펴보겠습니다.SELECT customers.customer_id, ..

Data/MySQL 2024.08.04

[MySQL] binlog(바이너리 로그)란?

회사에서 레거시에서 DeadLock 발생으로 오류가 발생하였는데 select for update문을 쓰는 부분도 아니었다...😥정확한 원인 파악을 위해(lock이 있었는지 확인하기 위해) binlog를 확인하려 하였으나 기간이 지나 purge 되어버렸습니다😱아쉬운 대로 MySQL binlog에 대해 공부해 보도록 하겠습니다.  MySQL Binlog?MySQL Binlog(바이너리 로그)는 데이터베이스의 변경 사항을 기록하는 로그 파일입니다.Binlog는 MySQL 서버에서 수행된 모든 DDL 및 DML 명령을 순차적으로 저장합니다.이를 통해 데이터 복구와 복제를 효과적으로 관리할 수 있습니다. Binlog의 중요성데이터 복구데이터 손실 시, Binlog를 사용하여 특정 시점으로 복구할 수 있습니다...

Data/MySQL 2024.07.16

[MySQL] 문자열 결합하기: CONCAT, GROUP_CONCAT

CONCAT과 GROUP_CONCAT 언제 어떻게 사용하는 게 적절할까요? 🤔CONCAT과 GROUP_CONCAT는 MySQL에서 문자열을 결합하는 데 사용되는 함수입니다.CONCAT은 여러 문자열을 하나의 문자열로 결합하고, GROUP_CONCAT은 그룹화된 결과에서 여러 값을 단일 문자열로 결합합니다. CONCATCONCAT 함수는 두 개 이상의 문자열을 결합하여 하나의 문자열을 만듭니다.SELECT CONCAT('Hello', ' ', 'World') AS greeting;위와 같은 예시는 아래와 같이 출력됩니다. CONCAT 함수는 인수로 전달된 문자열들을 순서대로 합쳐서 하나의 문자열로 만들어줍니다. 테이블에서도 사용할 수 있습니다.SELECT CONCAT(user_name, ' ', age)..

Data/MySQL 2024.07.08

[MongoDB] Spring Boot에서 임베디드 MongoDB를 사용하는 방법

MongoDB를 사용하며 Test 할 때 어떻게 작업할지 고민하다가 Embedded MongoDB가 있다는 사실을 알고 적용해 보았습니다. 임베디드 MongoDB란?임베디드 MongoDB는 테스트 환경에서 MongoDB를 별도로 설치하지 않고도 MongoDB 서버를 실행할 수 있는 라이브러리입니다.이를 통해 단위 테스트 및 통합 테스트를 보다 간편하게 작성할 수 있습니다. 의존성 추가하기Spring Boot 프로젝트에 임베디드 MongoDB를 추가하려면 build.gradle 파일에 다음 의존성을 추가합니다.dependencies { // Other dependencies... testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo..

Data/MongoDB 2024.06.30

[MongoDB] _class 필드 개념과 제거 방법

MongoDB 에서 데이터를 입력하는데 _class라는 값이 입력되었다. (이게 모지😮)_class에 대해 알아보고 제거하는 방법도 알아보겠습니다! '_class' 필드란 무엇인가?MongoDB는 NoSQL 데이터베이스로 JSON과 유사한 BSON 형식으로 데이터를 저장합니다.MongoDB는 스키마가 없으므로 데이터를 유연하게 저장할 수 있지만, 애플리케이션의 객체 지향 구조와 MongoDB의 문서 구조를 매핑하는 과정에서 추가적인 메타 데이터가 필요할 수 있습니다. 그중 하나가 '_class' 필드입니다. '_class' 필드의 역할객체 매핑'_class' 필드는 Spring Data MongoDB와 같은 ODM(Object-Document Mapping) 프레임워크에서 사용됩니다.이 필드는 Mong..

Data/MongoDB 2024.06.29

[MySQL] UPSERT(UPDATE + INSERT)

데이터베이스를 사용할 때, 중복 데이터를 방지하면서 효율적으로 데이터를 삽입하고 싶을 때가 분명 올 것입니다 🤨이를 해결하기위해 'UPSERT'라는 기능을 제공합니다. 이번 글에서는 평소에 사용하던 UPSERT의 개념과 MySQL에서 UPSERT를 어떻게 사용하는지에 대해 알아보겠습니다!  UPSERT 란?UPSERT는 "insert"와 "update"의 합성어입니다.데이터베이스 테이블에 데이터를 삽입할 때 해당 데이터가 이미 존재한다면 업데이트를 하는 작업을 의미합니다.이는 데이터베이스에 중복 데이터를 방지하면서 효율적으로 데이터를 갱신할 수 있는 방법입니다. MySQL에서의 UPSERT INSERT INTO table_name (column1, column2, ...) VALUES (value1,..

Data/MySQL 2024.06.28