| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Java
- docker
- 트랜잭션
- grafana
- NIO
- GitOps
- mysql
- Kotlin
- webflux
- RDBMS
- jvm
- monitoring
- selector
- helm
- spring boot
- 백엔드개발
- CloudNative
- JPA
- redis
- prometheus
- 데이터베이스
- 동시성제어
- 성능 최적화
- netty
- DevOps
- 백엔드
- kafka
- SpringBoot
- Kubernetes
- 성능최적화
- Today
- Total
목록Spring Data (12)
유성
앞서 한차례 트랜잭션 범위에 대해서 글을 쓴 적이 있다.https://youseong.tistory.com/71 예외 발생 시 롤백 방지하기: Spring에서 독립적인 트랜잭션 설정 방법프로젝트에서 repository.save() 메서드를 사용했음에도 불구하고 데이터가 커밋되지 않는 문제를 겪은 적이 있습니다. 이 글에서는 문제의 원인과 해결 방법을 공유합니다. 트랜잭션 처리 방식문youseong.tistory.com 이번 글에서는 @Transactional 의 파라미터들을 뜯어보며 어떤 기능들이 있는지 확인해 본다.단순히 "붙이면 된다"를 넘어 이를 어떻게 활용할 수 있는지 하나하나씩 뜯어보자.(트랜잭션 의존성: spirng-tx:7.0.3) 1. 어떤 트랜잭션 매니저를 쓸 것인가? (Value, Tr..
지난 글에서는 Kubernetes 환경에서 로컬 디스크와 StatefulSet을 활용해 MySQL 마스터-슬레이브 복제 구조를 구축해 보았다.이번 글에서는 이렇게 구축된 DB 인프라를 Spring Boot 애플리케이션에서 어떻게 효율적으로 분기하여 연결하는지 알아보자. Kubernetes에서 MySQL 마스터-슬레이브(Replication) 구축하기쿠버네티스에서 데이터베이스를 운영할 때 가장 큰 고민은 "데이터의 영속성과 성능"일 것이다.이번 글에서는 로컬 디스크를 활용해 성능을 최적화하고, StatefulSet을 이용해 마스터-슬레이브 복youseong.tistory.com 1. Master-Slave는 각각 어떤 역할을 할까?DB 레플리케이션은 데이터의 정합성을 유지하면서 부하를 분산하기 위해 사용..
이 글에서는 객체와 테이블 간 구조적 차이를 JPA가 어떻게 해소하는지, 그리고 그 과정에서 왜 'N+1 문제'가 발생하게 되는지를 다룹니다. 1. JPA란 무엇인가?JPA는 자바 객체와 관계형 데이터베이스(RDB) 간의 매핑을 자동화하여 개발 생산성을 높여주는 ORM(Object-Relational Mapping) 기술입니다.쉽게 말해, Java는 객체(Object), DB는 테이블(Table)을 중심으로 구성되기 때문에, 이 둘을 자연스럽게 이어주는 다리가 바로 JPA입니다. 2. 객체와 관계형 데이터 간의 연관관계 매핑객체지향에서 객체는 다른 객체와 관계를 맺으며 동작합니다. 예를 들어, 고객이 쿠폰을 여러 개 소유하고 있다고 해보겠습니다.class Customer { String name; ..
EntityGraph를 사용하여 fetch join을 할 경우, 쿼리에서 직접적으로 페이징 처리가 어려워집니다. 이유는 다음과 같습니다: 1. 복잡한 조인 구조예를 들어, A, B, C 세 테이블을 조인하는 경우를 생각해 봅시다. A와 B는 1:N 관계이고, B와 C도 1:N 관계라면, 예를 들어 N이 3이라 가정할 때페이지 크기가 10이면, 실제로 10개의 A 엔티티를 가져오더라도 조인 결과로는 최대 10 × 3 × 3 = 90개의 행(row)이 반환될 수 있습니다. 2. RDBMS와 객체지향의 차이관계형 데이터베이스에서는 위와 같이 다중 조인된 결과에 대해 LIMIT을 적용할 때, 원래의 A 엔티티 기준으로 제한하지 않고 전체 행에 대해 제한을 걸게 됩니다.그래서 결과적으로 full scan을 하고,..
이 글은 신입 시절 처음 면접 준비를 할 때 CS를 공부하고 외웠지만, 시간이 지나면서 대부분을 잊어버려 이러한 학습 방식이 과연 의미가 있는지 고민하여 작성하게 되었습니다. 장기적인 관점에서는 개념을 단순히 외우는 것보다는 각 기술이 어떤 원리로 작동하는 지 알고 있어야 이를 개선하거나, 사용하는데 도움을 줄수있지 않을까 생각합니다. RDBMS 구조먼저 데이터가 RDBMS에 어떤 방식으로 저장되는지부터 살펴보겠습니다.(각 RDBMS마다 구현 방식이 아예 다를 수 있지만 Normal한 RDBMS로 설명합니다.) 우리가 사용하는 RDBMS는 대체로 B+Tree 알고리즘을 사용해 저장합니다.B+Tree 알고리즘이란 정렬된 트리 형태로, 말단 노드 간의 빠른 탐색을 위해 LinkedList 구조를 가지는 특징..
프로젝트에서 repository.save() 메서드를 사용했음에도 불구하고 데이터가 커밋되지 않는 문제를 겪은 적이 있습니다. 이 글에서는 문제의 원인과 해결 방법을 공유합니다. 트랜잭션 처리 방식문제의 원인을 파악하기 위해 하나의 쓰레드에서 두 개의 메서드를 사용하며, 각각의 트랜잭션이 어떻게 작동하는지 세 가지 케이스로 살펴보겠습니다. 1. 첫 번째 케이스: 동일 트랜잭션두 메서드(A 트랜잭션, B 트랜잭션)가 동일한 트랜잭션에 포함되어 있습니다. 즉, A와 B가 모두 성공해야 트랜잭션이 커밋됩니다. 만약 B에서 예외가 발생하면, A에서의 작업까지 모두 롤백됩니다. |-----------(A 트랜잭션)-----------| |-----------(..