Spring 6

[Spring] Transactional의 이해

💡 트랜잭션🤔 트랜잭션이란?트랜잭션이란 데이터베이스 혹은 유사 시스템에서 하나의 상호작용 단위이다. 이는 데이터의 정합성을 보장하기 위해 고안된 방법이다. 이는 데이터베이스를 일관성 있게 유지하고, 동시 접근하는 여러 프로그램 간의 격리를 제공하기 위해 존재한다.트랜잭션 내 SQL문들은 모두 성공하여 commit 되거나, 하나라도 실패하는 경우 전체가 rollback 된다. 🫨 ACID트랜잭션이 어떤 속성을 지녀야 하는지 나타내는 핵심이다.4가지 규칙을 모두 보장해 안전하게 수행되어야 한다. 원자성(Atomicity)All or Noting모두 성공 or 모두 실패하나의 트랜잭션은 논리적으로 나누어질 수 없는 단위이기 때문에 동일한 경과를 보장해야 한다.즉, 일부만 성공하거나 실패하는 상태는 존재해..

Spring/Spring 2026.03.02

[JPA] BaseEntity로 공통 엔티티 속성 추상화하기

🤔 시간과 같은 공통 엔티티 속성을 효율적으로 관리하는 방법은 없을까?엔티티를 작성하다 보면 중복되는 코드가 자주 등장한다.대표적인 예로 등록된 시간(createdAt), 수정된 시간(updatedAt) 과 같은 필드가 있다.이 필드는 거의 모든 엔티티에 필요하지만,매번 같은 코드를 반복해서 작성하는 것은 불필요하고 유지보수에도 좋지 않다.그렇다면 이 시간 관련 속성을 효율적으로 추상화할 수는 없을까?그리고 한 번 만들어두면 자동으로 관리되게 할 수 있을까?💡 추상 클래스 BaseEntity로 공통 필드 추상화하기이를 해결하기 위한 가장 좋은 방법은 공통 속성을 관리하는 추상 클래스(BaseEntity)를 두는 것이다.JPA의 @MappedSuperclass와 스프링 데이터 JPA의 Auditing ..

Spring/JPA 2025.11.06

[JPA]JPA Entity 생명주기(Entity LifeCycle)

1️⃣ 엔티티 생명주기란?JPA에서 엔티티(Entity) 는 단순한 자바 객체(POJO)가 아니다.EntityManager가 관리하는 “영속성 컨텍스트(Persistence Context)” 안에서 상태를 가지는 객체로 존재한다.즉, 엔티티는 아래와 같은 상태 변화(생명주기, Lifecycle) 를 거친다.🪄 엔티티의 4가지 상태상태설명예시비영속 (Transient)아직 JPA가 모르는 단순한 객체new Member("홍길동")영속 (Persistent)EntityManager에 의해 관리 중em.persist(member) 이후준영속 (Detached)관리에서 벗어난 상태em.detach(member)삭제 (Removed)삭제 예약 상태em.remove(member)2️⃣ 생명주기 이벤트 콜백 (Li..

Spring/JPA 2025.11.06

[Querydsl] Querydsl이란?

QueryDsl은 Java에서 관계형 데이터베이스를 쿼리하기 위한 타입 안전한 API를 제공하는 프레임워크이다. SQL과 매우 유사한 구문을 사용하여 복잡한 데이터베이스 쿼리를 보다 쉽게 작성하고 구성할 수 있다.장점쿼리를 자바 코드로 작성하여 문법 오류를 컴파일 시점에 잡음동적 쿼리 문제 해결쉬운 SQL 스타일 문법인텔리제이와 같은 IDE의 자동 완성 기능여기서 말하는 컴파일 시점이란? 프로그램이 실행되어 동작중인 상태(런타임)이 아닌 프로그램을 빌드하는 시점을 말한다.그럼 Querydsl은 무조건 좋다!!! 꼭 쓰자!! 현업에서도 많이 쓴다더라!! 인 것일까??아니다. Querydsl은 1차 캐시를 이용하지 않고 바로 DB를 바라보기 때문에 예상치 못한 응답이 발생하거나, 네트워크 통신이 느린 경우 ..

Spring/Querydsl 2024.09.02

[Querydsl] Querydsl 적용 방법

implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api"spring 3.x 버전부터는 다음과 같이 build.gradle에 추가해주면 된다.의존성을 추가해주면 하단 사진과 같은 Q객체들이 생성된다.사용 방식은 대표적으로 두가지이다.1. Custom 인터페이스를 만들어 사용하는 방식public interfac..

Spring/Querydsl 2024.09.02