[JPA] 영속성 컨텍스트(Persistence Context) 내부 구조 살펴보기
·
Programming/Spring,JPA
StatefulPersistenceContextPersistenceContext 인터페이스의 구현체로 이 구현은 영속성 컨텍스트가 해당 세션의 생명 주기 동안 엔티티의 상태를 유지하고 관리한다.  HashMap 구조영속성 컨텍스트의 1차 캐시는 HashMap 구조이다. 1차 캐시에 관한 그림을 살펴보면 엔티티의 식별자를 Key로 사용한다고 알려져있다.  StatefulPersistenceContext 클래스 StatefulPersistenceContext 클래스를 살펴보면, Key 값으로 EntityKey 객체를 사용하고 있다. 해당 객체 안에 식별자가 존재할것으로 추측할 수 있다.  EntityKey 클래스public final class EntityKey implements Serializable {..
[JPA] 일대다(OneToMany) 단방향 매핑의 성능 이슈
·
Side Project/Study Together
서론프로젝트에 JPA를 처음 적용했을 땐 너무 편리하다며 감탄했다. 최근에는 제대로 이해하지 않고 사용하면 오히려 독이 될 수 있다는 것을 깨닫고 있다. 특히 연관관계 매핑에서는 세심한 주의가 필요하며, 양방향 매핑과 단방향 매핑이 각각 가져오는 차이를 이해하는 것이 중요하다. 이번 글에서는 양방향 매핑과 단방향 매핑에서 발생하는 문제들을 분석하고, 이러한 문제를 해결해 나가는 과정을 정리해보려 한다.양방향 매핑의 문제점✔️ 상태 변경에 대한 관리 복잡성이 증가 A객체가 B객체에 대해 직접 참조가 가능한 것은 B객체의 비즈니스 로직 노출, 상태 변경에 대한 가능성이 열려있는 구조이다. 양방향 매핑을 사용할 경우, 양쪽 객체가 서로를 참조하게 되면서 상태 관리가 복잡해지고 불필요한 비즈니스 로직 노출 문제..
[JPA] Hibernate 내부 동작을 알고 계신가요?(save 안티패턴 고찰)
·
Programming/Spring,JPA
서론프로젝트 초기에는 JDBC Template을 사용해 데이터베이스와의 연동 작업을 진행했다. 하지만 객체지향적 언어로 도메인을 구성하며 프로그래밍을 하던 중, 객체와 데이터베이스 간의 연결 방법에 대한 고민이 생겼다. 객체지향 설계와 관계형 데이터베이스 사이의 패러다임 불일치로 인해 코드가 복잡해지는 문제를 겪었다.  이러한 문제를 해결하기 위해 ORM(Object-Relational Mapping) 기술인 JPA를 도입하게 되었고, 이를 통해 객체와 데이터베이스 간의 매핑을 더 자연스럽게 처리하고자 했다. JPA는 Java Persistence API의 약자로, 자바 ORM 기술에 대한 표준 API 명세를 의미한다. JPA는 여러 인터페이스로 구성되어 있으며, 이 인터페이스들을 구현한 대표적인 프레임..