본문 바로가기

jpa4

Jpa @PrePersist & @PreUpdate 사용해서 Entity 부가정보와 도메인 관심사 분리하기 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. Spring Data Jpa 환경에서 엔티티는 비즈니스 영역의 핵심 도메인이면서 데이터베이스 테이블과 메핑 되는 역할을 한다. 즉, 도메인(비즈니스영역) 관점으로 엔티티를 바라볼 수도 있고 데이터 관점으로 바라볼 수도 있다. 프로젝트를 진행하면서 엔티티는 최대한 데이터 관점이 아니라 도메인 관점으로 바라보고 싶었다. 하지만 데이터에 대한 변경 이력을 남기는 것이 때로는 필요한 테이블이 존재했고, 이러한 관심사는 도메인의 관심사라기보단 데이터나 모니터링의 관심사로 생각되었다. 엔티티의 생성 & 변경에 대한 관리를 수용하면서도 도메인영역(비즈니스로직)에서 이를 노출하지 않는 구조를 고민하던 중 Jpa의 @PrePe.. 2023. 5. 1.
Java HashMap 동작원리와 Hibernate 영속성 컨텍스트의 엔티티 관리 방식 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. JPA를 사용하면서 흔하게 듣는 이야기 중 하나로 엔티티를 작성할 때 equals & hashcode를 id 기반으로 재정의 하라는 말이 있다. 엔티티는 자바 객체이기도 하지만 데이터베이스의 레코드로 보는 것이 좀 더 본질적인 접근일 수 있고 그러한 접근으로 바라봤을 때 id를 기준으로 동등성을 정의하는 게 맞다는 이야기이다. (예를 들어 데이터베이스 입장에서 pk 가 1인 레코드에 대해 자바 객체 인스턴스가 2개가 만들어지면 이 두 인스턴스는 동등하다고 보는 게 자연스럽다.) 위 이야기에 대해 납득을 했고 모든 엔티티에 equals & hashcode 를 재정의 하던 중 한 가지 의문이 들었다. 내가 재정의 .. 2023. 4. 17.
jpa hibernate 프록시와 entity equals 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. jpa hibernate 지연로딩과 프락시 지연로딩의 필요성: 연관된 엔티티가 항상 필요하지 않을 수 있다 아래와 같이 팀과 멤버 엔티티가 있다고 하자. @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private String name; @JoinColumn(name = "team_id") @ManyToOne(fetch = FetchType.LAZY) pri.. 2023. 3. 25.
@Transactional 정리가 필요해 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. Spring에서 DB 접근 기술은 많이 추상화되어 있다. 가장 기본적으로 JDBC가 있고 이를 조금 더 편하게 사용하기 위한 Mybatis, JPA 등이 있다. 트랜잭션은 이러한 JDBC, Mybatis, JPA에서 본래 가지고 있던 부분은 아니다. 데이터베이스 자체에서 출발한 부분이다. 그래서 그런지, 개발을 하면서 데이터베이스 수준, JDBC 수준, Mybatis 수준, JPA 수준에서 트랜잭션이 어떠한 의미를 갖는지 혼란이 온다. 따라서 이 글을 시작으로 앞으로 관련 내용을 학습할 때마다 정리하려고 한다. --------------------------------------------------------.. 2021. 12. 17.