DataBase(22)
-
분산 트랜잭션
면접에서 분산 트랜잭션과 2PC에 대해 답해야 하는 상황이 있었다. 당시에는 대략적으로 알고 있는 개념들을 이야기하며 넘길 수 있었지만, 제대로 학습할 겸 내용을 정리하고자 한다.마이크로 서비스 아키텍쳐(MSA), 분산 데이터베이스 환경이 보편화되면서, 여러 시스템에 걸쳐 무결성을 보장하는 것은 매우 중요한 부분이 되었다. 이러한 무결성을 보장하는 분산 트랜잭션과 이를 구현하는 대표적인 2PC, Saga 패턴, 그리고 이벤트 기반 트랜잭션에 대한 개념을 찾아보았다.1. 분산 트랜잭션(Distributed Transaction)물리적으로 서로 다른 네트워크, 컴퓨터(노드)에 분산된 데이터베이스들 사이에서 하나의 작업 단위(트랜잭션)를 처리하는 것을 말한다.목표는 단일 DB에서는 DBMS가 알아서 보장하던 ..
2025.12.17 -
QueryDSL 엔티티 변경 시 빌드 오류 해결 방법
QueryDSL 엔티티 변경 시 빌드 오류 해결 방법🚀 들어가며QueryDSL을 활용해 쿼리를 작성할 때, 엔티티의 필드(테이블 변수)를 수정하면 기존의 QClass에서 해당 필드를 찾지 못해 빌드가 실패하는 문제가 발생할 수 있다.이 문제를 해결하려면 변경된 엔티티 필드를 반영한 QClass를 새로 생성해야 하지만, 빌드 과정에서 기존 QClass가 남아 있어 오류가 발생하는 경우가 많다.기존 방식대로라면, 해당 쿼리들을 주석 처리 → 빌드 진행 → QClass 갱신 → 주석 해제 후 수정이라는 번거로운 과정이 필요하다. 하지만, 이를 자동화하면 불필요한 수작업을 줄이고 더 효율적으로 개발할 수 있다.이번 글에서는 Gradle 설정을 통해 QClass를 자동으로 갱신하는 방법을 정리해보았다.✅ 1. ..
2025.03.01 -
[JPA]@Transactional이란
1. 서론프로젝트를 진행하고 코드를 작성할 때 DB를 사용하게 된다면 Spring Data JPA를 사용하게 된다. 그리고 이때 해당 JPA는 Java에서의 ORM의 표준으로 사용이 되며, Spring 프레임워크에서는 Spring Data JPA로 하여 사용을 하게 된다. 해당 JPA를 사용하면서 같이 등장하는 것이 바로 @Transactional 이다.해당 어노테이션은 트랜잭션 관리를 간편, 용이하게 해주는 어노테이션이다. 이를 통해 해당 백엔드 서버와 데이터베이스 간의 작업이 하나의 단위로 실행하도록 보장하는 역할이다. 그렇기에 지금까지는 이러한 논리적 하나의 단위(원자성)을 위해 항상 해당 트랜잭션을 기입해주었다.하지만 이번에 기능을 구현한 후 성능 개선을 위해 리팩토링 및 학습을 하던 도중 무분별..
2024.09.24 -
[ETC] Fetch 옵션
[ETC] Fetch 옵션 오래간만에 Querydsl을 통해 작업을 하면서 fetch 옵션들에 대해 정리가 필요한 것 같아서 학습 겸 작성하게 되었다. fetchOne() 단일결과, 하나의 레코드만 가져올 때 사용하는 메서드 결과가 하나인 경우 가장 직관적이고 간단한 방법 결괏값이 없거나 여러 개인 경우, 'NonUniqueResultException'이 발생할 수 있다. fetchFirst(() 첫 번째 결과를 가져올 때 사용하는 메서드 limit(1)과 유사한 역할 여러 개의 결괏값이 나올 때 그중 첫 번째 결괏값만 출력 첫 번째 결과가 필요할 때 유용 결과가 없는 경우 null 반환, 반드시 결과가 있다는 확신이 있을 때 사용하는 것이 좋음 fetchResult() 결과 목록과 전체 결과 수를 함께..
2023.08.28 -
[DataBase] CLOB / BLOB
데이터 타입 데이터베이스에서 사용되는 데이터 타입 각각 문자열과 이진 데이터를 저장하는데 사용 CLOB 문자열을 저장하는데 사용 텍스트 파일이나 문서 등의 데이터를 저장할 때 사용 장점 텍스트, 문서등의 문자열 데이터 저장 가능 단점 대용량의 문자열을 저장할 때 성능 저하 유발 가능성 존재 BLOB 이진 데이터를 저장하는데 사용 BLOB → 바이너리 값 변환 : 변환된 데이터는 최대 1GB를 넘을 수 없음 바이너리 → BLOB 변환 : 변환 데이터는 BLOB 저장소에서 제공하는 최대 파일 크기를 넘을 수 없음 이미지나 동영상 등의 바이너리 데이터를 저장할 때 사용 장점 이미지나 동영상 등의 바이너리 데이터 저장 단점 대용량의 바이너니 데이터를 저장할 때 성능 저하 유발 가능성 존재
2023.07.10 -
[DataBase] RDB와 객체 지향적 특징의 차이
차이점 데이터 표현 방식 RDB 데이터를 분리하고 관계로 연결 정형화된 쿼리 언어 사용 객체 지향적 데이터와 행위를 하나의 객체로 묶음 메시지 전달을 사용 데이터 관리 방식 해당 차이점을 매꾸기 위해 ORM ( Object - Relational Mapping )을 사용
2023.07.10