목록2025/02 (5)
HJW's IT Blog
0. Hibernate 프록시 객체본 글로 넘어가기전 간략하게 나마 Proxy 객체에 대해 짚고 넘어가겠다.JPA 의 엔티티 간에 연관 관계가 있을때, fetch = FetchType.LAZY 가 설정되어 있다면, Hibernate 는 DB에 실제 쿼리를 날리는 대신 임시 프록시 객체를 반환한다. 이로 인해, Hibernate 는 데이터가 실제로 필요한 순간까지 SQL 을 실행하지 않을 수 있다.Member member = em.getReference(Member.class, 1L); 이와 같이 getReference() 를 활용하면, 실제 클래스가 아닌 프록시 클래스를 조회할 수 있다. 1. 1:1 관계와 프록시 동작 분석@Entity public class Member { @Id ..
0. 들어가며JPA 의 entity 사이에 연관관계를 올바르게 설정하는것은 매우 중요하다. 데이터 무결성, 성능, 유지보수성 측면 모두에서 영향을 끼칠 수 있는것이 어떻게 연관 관계를 설정하는가 이다. 이번 글에서는, 연관관계의 주인 개념을 명확하게 짚고 넘어가겠다. 1. 연관관계란 무엇인가1.1 객체 지향 모델링 관점에서의 영향관계객체 지향 프로그래밍에서 연관관계는 하나의 객체가 다른 객체를 참조하거나 포함하는 구조를 의미한다. 즉, 객체간의 상호작용을 모델링할 수 있고, 현실의 개념을 더욱 직관적으로 표현할 수 있다. 예를 들어 User 와 Order 이 있다고 가정하자. User 는 여러 Order를 가질 수 있으며, Order 는 한명의 User 를 가진다. 이러한 관계를 어떻게 표현하고 설계할 ..
0. 들어가며JPA(Java Persistence API)는 Java 애플리케이션에서 데이터베이스와의 상호작용을 단순화하는 ORM(Object-Relational Mapping) 기술이다. 그중 EntityManager는 엔티티를 관리하고 데이터베이스의 CRUD 작업을 수행하는 핵심 객체이다. 이 글에서는 EntityManager의 역할과 특징, 그리고 영속성 컨텍스트의 동작 방식에 대해 다뤄보겠다.1. EntityManager 란?JPA 에서 Entity 를 관리하는 객체로, 데이터베이스의 CRUD 작업을 수행하는 역할을 한다. 다음과 같은 주요 기능을 수행한다.1.1 핵심 기능EntityManager 는 Entity 의 생명 주기를 관리한다.영속화 (Persist) : 엔티티 객체를 DB에 저장조회 ..
0. 들어가며 JPA 를 사용하며 SQL문을 보기 위해 보통 applicaion.yml 의 spring.jpa.show-sql = true 설정을 쓸 것이다. 하지만.. 너무 가독성이 떨어진다. 디버깅 하기도 어렵고 어떤 쿼리가 발생하는지 읽기도 힘들다. 이번 포스팅에선 이러한 Hibernate 가 자동으로 찍어주는 쿼리 대신 P6Spy 라이브러리를 이용한 쿼리 커스터마이징에 대해 다루겠다. 1. 적용 전Hibernate: select user0_.id as id1_0_, user0_.age as age2_0_, user0_.name as name3_0_ from user user0_ where user0_.name=? 정말 읽기 힘들고 가독성이 떨어지는 코드가 발생한다. 물론, format-sql = ..
0. MapStruct 란 무엇인가?0.0 DTO 도메인 엔티티 변환 Java 코드를 작성하다 보면 DTO와 도메인 엔티티 간의 변환 작업이 빈번하게 발생한다. 특히, 계층적 구조를 가진 애플리케이션에서는 Controller - Service - Repository를 거치며 DTO와 엔티티를 서로 변환하는 일이 반복된다. 이를 수작업으로 작성할 경우,필드가 추가되거나 변경될 때마다 수동으로 코드를 수정해야 한다.사람이 작성하는 코드이므로 일부 필드를 누락할 가능성이 있다.필드의 수가 적다면 직접 변환 로직을 작성해도 문제가 없을 것이다. 그러나 필드가 수십 개 이상이거나 변환 로직이 복잡해질 경우, 실수로 인해 오류가 발생할 확률이 급격히 증가한다. 이때 MapStruct는 이러한 변환을 간결하게 처리..