Data 27

프록시 DB란? 읽기·쓰기 분리

대규모 서비스를 운영하다 보면, 트래픽이 늘어날수록 DB 부하가 병목이 되는 순간이 찾아옵니다.트래픽 스파이크나 정기 리포트 배치처럼 단순 조회성 쿼리가 몰리면 “운영 데이터베이스의 안정성”이 흔들리기 시작하죠.이럴 때 자주 등장하는 해결책 중 하나가 바로 프록시 DB(Proxy DB) 입니다.단순히 DB 앞단에 장비를 하나 더 세우는 것이 아니라, 읽기/쓰기 특성을 분리하고 운영 전략을 명시적으로 가져가겠다는 선언에 가깝습니다.이번 글에서는 프록시 DB의 기본 개념부터, 운영 중 겪는 실전 이슈, 그리고 개발자 입장에서의 사용 패턴까지 정리해보려 합니다. 📖 프록시 DB란 무엇일까?말 그대로 본 DB(Primary) 앞단에 서서 요청을 중계하는 “중간 계층”입니다. 애플리케이션은 Proxy 하나만..

Data/DataBase 2025.11.19

PostgreSQL 시작하기: Docker 설치부터 DBeaver로 데이터 다루기

🐘 PostgreSQL이란?PostgreSQL은 데이터를 안전하게 저장하고 꺼내 쓰게 해주는 데이터베이스(DB)입니다.하지만 단순히 데이터를 넣고 빼는 수준을 넘어, 복잡한 데이터까지 똑똑하게 다룰 수 있는 고급 데이터베이스라고 볼 수 있습니다.즉, PostgreSQL은 일반적인 관계형 데이터베이스(RDBMS) 가 가진 기능을 모두 제공하면서도,그 이상으로 더 다양한 기능과 확장성을 지원합니다. ✅ PostgreSQL의 특징1. 더 다양한 데이터 타입 지원일반적인 RDBMS(MySQL 등)는 INT, VARCHAR, DATE 같은 기본 타입 위주로 데이터를 저장합니다.반면 PostgreSQL은 훨씬 다양한 타입을 기본으로 지원합니다.JSON / JSONB → JSON 데이터를 효율적으로 저장하고 검색A..

Data/PostgreSQL 2025.08.24

MongoDB Compound Index 제대로 이해하고 성능까지 비교해보자.

NoSQL은 유연한 스키마와 수평 확장이 강점인 데이터베이스입니다.하지만 대용량 데이터를 효과적으로 처리하고, 원하는 쿼리 성능을 확보하기 위해서는 관계형 데이터베이스와 마찬가지로 인덱스 설계가 매우 중요하다고 생각합니다.특히, 하나의 조건만으로는 부족할 때 여러 필드를 동시에 고려할 수 있는 `Compound Index`(복합 인덱스)는 매우 강력한 도구가 될 수 있습니다. Compound Index(복합 인덱스) 란? 🤔복합 인덱스는 말 그대로 두 개 이상의 필드를 조합해서 만든 인덱스입니다.MongoDB에서는 다음과 같이 생성할 수 있습니다.db.order.createIndex({ userId: 1, orderDate: -1 })(이 인덱스는 userId를 오름차순, orderDate를 내림차..

Data/MongoDB 2025.06.21

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

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

Data/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() (이전 글에서 다룬 내용) 각 메서드에 대한 설..

Data/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..

Data/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..

Data/MongoDB 2024.12.27

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

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

Data/DataBase 2024.11.25

Kafka 이해하기: 핵심 개념과 작동 원리

MSA 환경에서는 서비스 간 데이터 전달과 비동기 처리를 위해 Apache Kafka와 같은 메시징 시스템이 자주 사용됩니다. Kafka는 높은 처리량, 확장성, 그리고 안정성을 바탕으로 대규모 데이터 스트리밍 및 실시간 처리에 탁월한 도구로 자리 잡고 있습니다. 이번 글에서는 MSA 환경에서 Kafka가 유용하게 사용되는 이유를 살펴보고, Kafka의 핵심 개념과 작동 원리를 간단히 정리하고자 합니다!  kafka란 무엇인가요?Kafka는 분산 메시징 플랫폼으로, 실시간 데이터 스트리밍 및 대규모 데이터 처리를 지원합니다.다음과 같은 특징을 갖고 있습니다. 분산 아키텍처: 고가용성과 확장성 제공고성능: 초당 수백만 건의 메시지 처리 가능내구성: 디스크 기반 저장으로 데이터 유실 방지다양한 활용성: 실시..

Data/Kafka 2024.11.17

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

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

Data/MySQL 2024.11.07