대량의 데이터를 다룰 때 가장 흔히 부딪히는 문제 중 하나가 대량 insert(Bulk Insert)이다. Spring Data JPA는 개발 생산성을 크게 높여주지만, JPA 표준 스펙에서는 Bulk Insert에 최적화되어 있지 않다.➡️ 외부 API 요청을 통해 100개 이상의 데이터를 여러 번 받아서 DB에 적재해야 하는 일이 있었는데, JPA를 활용하는 경우 insert 쿼리가 여러 번 발생하고 DB와의 connection time이 길어지는 문제가 있었다. 이번 글에서는 그 이유와 Hibernate의 ID 전략, 그리고 실제로 성능을 높이는 방법을 정리하고자 한다 1. JPA에서 Bulk Insert가 어려운 이유JPA는 “객체 중심의 영속성 관리”를 목표로 설계되어 있다. 즉, 엔티티의 상태..
Hibernate Envers란Hibernate Envers는 엔티티의 변경 이력(Revision History)을 자동으로 추적하고 저장해 주는 기능이다. @Entity로 정의된 테이블의 INSERT/ UPDATE / DELETE 시점마다 자동으로 감사(Audit) 테이블에 변경된 데이터를 기록한다. 만약에 User 엔티티가 있다면 아래와 같은 테이블이 생성된다.테이블 이름용도user실제 데이터user_aud변경 이력(Audit) 데이터revinfo각 revision(이력)의 메타데이터 주요 개념개념설명Revision데이터 변경이 발생한 “이력 단위”를 의미. 각 Revision에는 고유한 ID와 타임스탬프가 존재Audit Table (_AUD)각 엔티티의 이력을 저장하는 별도의 테이블RevisionE..
RestClientIntroRestclient is a synchronous HTTP Client.A synchrounous HTTP client sends and receives HTTP requests and responses in a blocking manner. Restclient features a fluent API.A fluent API is a design pattern that allows method chaining in a way that makes the code more readable and expressive by sequentially calling methods on an object.RestClient restClient = RestClient.create();create..
Spring + Postgresql JSONB 타입 처리하기PostgreSQL은 관계형 데이터베이스이면서도 문서형(JSON) 데이터 구조를 동시에 지원한다. 특히 jsonb 타입은 빠른 검색과 인덱싱을 제공해, 반정형 데이터(semi-structured data)를 효율적으로 다룰 수 있다. 하지만 문제는, Spring Data JPA가 JSON 컬럼을 기본적으로 지원하지 않아, 👉 hibernate-types 라이브러리를 추가해야 한다. import com.vladmihalcea.hibernate.type.json.JsonTypeimplementation("org.springframework.boot:spring-boot-starter-data-jpa")implementation("org.pos..