DataBase 21

Nested Set Model: 효율적인 트리 구조

실무에서 Nested Set Model로 구성된 데이터를 관리하면서 겪은 경험과 개념을 정리해보고자 합니다.👩🏻‍💻  Nested Set Model이란?데이터베이스에서 트리 구조를 저장하는 방법에는 여러 가지가 있지만, Nested Set Model은 lft, rgt 값을 이용해 한 번의 SQL 쿼리로 전체 트리 구조를 빠르게 조회할 수 있는 방식입니다.많은 경우, 부모-자식 관계를 나타내는 Adjacency List 방식을 사용하지만, 이 방법은 하위 노드를 조회할 때 반복적인 SQL 실행이 필요하다는 단점이 있습니다. 반면, Nested Set Model은 하나의 SQL로 모든 하위 노드를 조회할 수 있다는 강력한 장점이 있습니다.(물론 둘을 혼용하여 쓰는 방법도 있습니다. 🤔) Nested ..

DataBase 2025.03.14

[MongoDB] Single Purpose Aggregation: 간단한 집계 작업

MongoDB의 Aggregation 방식 중 간단한 함수 작업이 가능한 Single Purpose Aggregation Methods에 대해 알아보겠습니다. ✍️  Single Purpose Aggregation Methods란?Single Purpose Aggregation Methods는 MongoDB에서 특정한 집계 작업을 간단하고 효율적으로 수행하기 위해 제공되는 집계 메서드입니다.이 메서드들은 단일 작업에 초점을 맞추며, 복잡한 파이프라인을 구성하지 않고도 간단한 집계 작업을 처리할 수 있습니다.대표적인 Single Purpose Aggregation Methods는 다음과 같습니다:count()distinct()group()mapReduce() (이전 글에서 다룬 내용) 각 메서드에 대한 설..

DataBase/MongoDB 2024.12.31

[MongoDB] Map-Reduce: 대량 데이터 처리의 유연한 방법

이번 글에서는 MongoDB Map-Reduce 방식에 대해 알아보겠습니다.👀 Map-Reduce란?Map-Reduce는 대량의 데이터를 병렬로 처리하고 요약하는 데 사용하는 데이터 처리 방식입니다.MongoDB에서 Map-Reduce는 데이터를 그룹화하거나 집계하는데 활용되며, JavaScript 함수를 사용해 데이터를 변환(map)하고, 결과를 결합(reduce)하여 최종 결과를 생성합니다.Map-Reduce의 기본 구조Map-Reduce는 크게 두 단계로 구성됩니다.Map 단계데이터를 특정 키와 값으로 매핑합니다. 각 문서가 처리되어 키-값 쌍이 생성됩니다.Reduce 단계Map 단계에서 생성된 데이터를 키별로 그룹화하고 요약 작업을 수행합니다.간단한 Map-Reduce 예제아래 예제는 Mongo..

DataBase/MongoDB 2024.12.29

[MongoDB]Aggregation Framework: 효율적인 데이터 처리와 분석

MongoDB Aggregation은 데이터를 효율적으로 처리하고 분석할 때 매우 강력한 도구입니다.이 글에서는 Aggregation에 대해 정리해 보겠습니다. 👩🏻‍💻 Aggregation이란?Aggregation은 데이터를 가공하거나 요약하여 원하는 결과를 얻는 작업을 말합니다.SQL에서는 GROUP BY, HAVING, SUM() 같은 명령어로 비슷한 작업을 할 수 있지만, MongoDB는 Aggregation Framework를 통해 훨씬 유연하고 강력한 방식으로 데이터를 처리할 수 있습니다.  Aggregation의 주요 방식Aggregation Framework: 단계별로 데이터를 처리하는 파이프라인 방식.Map-Reduce: 대량의 데이터를 병렬로 처리하는 방식.Single Purpos..

DataBase/MongoDB 2024.12.27

데이터베이스 Anti-Pattern 피하기

데이터베이스 설계는 애플리케이션 성능과 안정성을 결정짓는 중요한 요소입니다. 하지만 초기 설계 단계에서 잘못된 방향으로 진행되면 성능 저하, 데이터 무결성 문제, 높은 유지보수 비용을 초래할 수 있습니다. 이러한 잘못된 설계를 Anti-Pattern이라고 합니다. 이번 글에서는 데이터베이스 설계에서 자주 발생하는 Anti-Pattern과 이를 피하기 위한 방법을 정리해보겠습니다.🙂  Anti-Pattern이란?Anti-Pattern은 처음에는 효과적인 해결책처럼 보이지만, 장기적으로 문제를 야기하는 잘못된 설계 패턴입니다.문제점:성능 저하데이터 무결성 위반유지보수 어려움예방 방법: 문제를 조기에 인식하고 개선된 설계 원칙을 적용해야 합니다. 대표적인 Anti-Pattern과 해결 방법1. 중복 데이터 ..

DataBase 2024.11.25

[MySQL] EXPLAIN으로 쿼리 성능 분석하기

데이터베이스 쿼리의 성능은 서비스 속도와 직결되는 중요한 요소입니다!MySQL의 `EXPLAIN`은 쿼리 실행 계획을 확인하고 병목이 되는 부분을 찾아 최적화할 수 있게 도와주는 도구입니다.데이터가 많은 테이블에서 비효율적인 쿼리가 실행되면 성능이 급격히 저하되어 응답 시간이 길어지고 시스템 리소스가 낭비될 수 있습니다. 특히 고트래픽 환경에서는 작은 쿼리 최적화가 큰 차이를 만들 수 있습니다. 이 글에서는 `EXPLAIN`의 필드와 활용 방법을 알아보겠습니다. 👀  EXPLAIN 사용법 `EXPLANIN`을 사용하려면 원하는 쿼리 앞에 `EXPLANIN`을 붙이기만 하면 됩니다.EXPLAINSELECT e.employee_id, e.first_name, d.department_name FROM loc..

DataBase/MySQL 2024.11.07

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

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

DataBase/MongoDB 2024.10.31

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

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

DataBase 2024.10.20

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

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

DataBase/MySQL 2024.10.09

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

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

DataBase/MySQL 2024.08.04