일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- spring boot
- 백준
- API
- 애자일프로그래밍
- 프레임워크
- ES
- 클린코드
- Baekjoon
- 그리디알고리즘
- 개발자
- 코드
- 코딩테스트
- 읽기쉬운코드
- 그리디
- cleancode
- 개발
- framework
- 코딩
- 알고리즘
- 엘라스틱서치
- 데이터베이스
- Java
- Elasticsearch
- 자바
- mongoDB
- Spring
- 애자일기법
- 스프링
- database
- JPA
- Today
- Total
목록데이터베이스 (23)
튼튼발자 개발 성장기🏋️
영속성은 데이터베이스에 커밋된 쓰기 작업이 영구적으로 유지되도록 보장하는 데이터베이스 시스템의 속성이다. MongoDB에서는 클러스터 또는 복제 셋 수준에서 영속성을 고려해야한다. 저널링을 통한 멤버 수준의 영속성MongoDB는 데이터의 일관성과 복구 기능을 향상시키기 위해 Write-Ahead Logging(WAL) 방식의 저널링을 사용한다. 이는 데이터 손실을 방지하고 장애 발생 시 복구할 수 있도록 설계된 기능이다. 특히 WiredTiger 스토리지 엔진을 사용하는 경우 저널링을 통해 데이터 무결성을 유지할 수 있다.MongoDB 6.1 버전부터는 저널링이 기본적으로 활성화되며, 별도의 설정 없이 자동으로 적용된다. 이를 통해 데이터 충돌 방지 및 장애 복구 시간 단축과 같은 이점을 얻을 수 있다...
트랜잭션(Transaction)이란?트랜잭션은 읽기나 쓰기 작업이 가능한 데이터베이스 작업을 하나 이상 포함하는 데이터베이스의 논리적 처리 단위이며 각 그룹과 트랜잭션은 여러 도큐먼트에 대한 읽기, 쓰기와 같은 작업을 하나 이상 포함할 수 있다. MongoDB의 경우에는 여러 작업, 컬렉션, 데이터베이스, 도큐먼트 및 샤드에서 ACID 호환 트랜잭션을 지원한다.트랜잭션의 주요 특징원자성 (Atomicity): 트랜잭션 내 모든 작업이 성공해야만 최종적으로 커밋된다.일관성 (Consistency): 데이터가 트랜잭션 시작 전후로 일관성을 유지한다.고립성 (Isolation): 트랜잭션이 완료되기 전까지 다른 작업에서 변경된 데이터를 볼 수 없다.영속성 (Durability): 트랜잭션이 완료되면 데이터가 ..
MongoDB에서 제한 컬렉션은 고정된 크기를 가지며, 저장 공간이 초과되면 가장 오래된 데이터가 자동으로 삭제되는 특성을 가진 컬렉션이다. 제한 컬렉션은 주로 로그 데이터, 센서 데이터, 실시간 데이터 스트림과 같이 일정량의 최신 데이터만 유지해야 하는 경우에 사용된다.제한 컬렉션 특징고정된 크기: 설정된 크기를 초과하면 가장 오래된 문서가 자동으로 삭제됨쓰기 성능 최적화: 미리 할당된 공간을 사용하여 성능이 우수함자동 삭제: 별도의 삭제 연산 없이 오래된 데이터가 자동으로 사라짐정렬 보장: _id 필드 기준으로 입력 순서가 보장됨// 제한 컬렉션 생성db.createCollection("capped_logs",{ "capped":true, "size":1048576, "max":1000})..
공간 정보 인덱스MongoDB는 공간 데이터를 효율적으로 검색하기 위해 2dsphere 인덱스를 지원한다. 이는 지구상의 좌표(경도 및 위도)를 저장하고 검색할 때 사용된다. 공간 정보를 저장할 때는 GeoJSON 형식을 사용하며, 주요 기하 구조는 다음과 같다.점(Point) { type: "Point", coordinates: [경도, 위도] }선(LineString){ type: "LineString", coordinates: [[경도1, 위도1], [경도2, 위도2], ...] }다각형(Polygon){ type: "Polygon", coordinates: [[[경도1, 위도1], [경도2, 위도2], ..., [경도1, 위도1]]] }참고로 내장객체 내 필드(type과 coordinates)는 ..
explain 출력MongoDB에서 explain 메서드는 쿼리 실행 계획을 분석하는 데 사용된다.쿼리를 최적화하고 성능을 향상시키기 위해 반드시 확인해야 할 주요 필드들은 다음과 같다. 1. queryPlannerplannerVersion: 실행 계획을 생성한 쿼리 플래너의 버전.namespace: 쿼리가 실행된 컬렉션 정보 (DB명.컬렉션명).indexFilterSet: 특정 인덱스를 강제하는 hint()를 사용했는지 여부.parsedQuery: MongoDB가 내부적으로 해석한 쿼리 조건.winningPlan: 실제로 선택된 실행 계획.rejectedPlans: 평가되었으나 선택되지 않은 실행 계획들.2. winningPlan (선택된 실행 계획)stage: 실행된 주요 연산 단계 (e.g., CO..

MongoDB는 강력하고 유연하며 확장성 높은 범용 데이터베이스이다. 보조 인덱스,범위 쿼리, 정렬, 집계 및 공간 정보 인덱스 등을 확장 기능과 결합했다. MongoDB는 MariaDB와 같은 RDB와는 다르게 도큐먼트 지향 데이터베이스로써 행 개념 대신 문서(document)라는 유연한 모델을 사용하여 손쉬운 사용을 할 수 있다. 왜 손쉽게 사용할 수 있을까? 손쉬운 사용 유연한 데이터 모델링앞서 이야기한 것 처럼 MongoDB는 스키마가 유연한 데이터베이스다. 즉, 테이블의 구조를 사전에 정의할 필요 없이, 각 문서가 다른 필드를 가질 수 있다. 이를 통해 개발자는 더 빠르게 프로토타입을 만들거나, 변동성이 큰 데이터 구조에 맞게 데이터를 저장할 수 있다.예를들어, 사용자마다 다른 데이터 필드를 가..

1. 프록시엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아닐 것이다. 지금 내가 리딩하고 있는 토이프로젝트만 봐도 유저 엔티티에 피드 엔티티, 댓글 엔티티 등 많은 엔티티와 연관관계를 갖는데 항상 사용되지는 않는다. 유저의 정보를 조회할 때 이 사용되지 않는 엔티티까지 조회하는 것은 굉장한 부담이 되고 비효율적일 것이다.JPA는 이런 문제를 해결하고자 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라고 한다. 이 지연 로딩을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이 것을 프록시 객체라 부른다.1.1. 프록시 기초 프록시는 JPA가 엔티티의 연관관계를 처리하는 핵심적인 기법 중 하나로, 실제 ..
1. 상속 관계 매핑객체 지향 프로그래밍에서 상속은 중요한 개념인 것은 누구나 알고 있는 사실이다. JPA에서는 이러한 상속 관계를 데이터베이스 테이블에 매핑하는 여러 가지 전략을 제공한다.1.1. 조인 전략 (Joined Strategy)조인 전략은 부모 클래스와 자식 클래스 각각에 대한 테이블을 생성하고, 자식 클래스의 테이블은 부모 클래스의 기본 키를 외래 키로 참조하는 방식이다.@Entity@Inheritance(strategy = InheritanceType.JOINED)public abstract class Item { @Id @GeneratedValue private Long id; private String name;}@Entitypublic class Book extend..