📖 ORM

    JPA Entity에서 필드에 this를 쓴 것과 안 쓴 것의 차이

    @Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; public void changeName(){ name = "stir"; this.name = "stir"; } } 예전에 인프런 질문 답변에 Entity에서 필드 변경을 위해 위와 같이 this로 접근하는 것과 그냥 접근하는 것에 대한 차이를 물어보신 분이 계셨고 김영한님이 친절히 설명해주셨는데 그 글이 어디갔는지 검색해도 안나온다. 깊게 들어가면 프록시에 관련된 답변이었걸로 기억한다. 일단은 예전에 강의 정리한 내용에 의하면 김영한님은 this를 안쓴다고한다. Intellij에 보라..

    MSA 환경에서의 JPA 사용법

    MSA 환경은 기본적으로 도메인 별로 분리되어있는 마이크로서비스 환경이다. 모놀리스 아키텍처에서 JPA를 사용할 때는 DDD를 이용해 도메인 별로 분리 시켜서 구현할 수도 있었지만 그렇게 하지 않더라도 시스템 상 제약은 없었다. 근데 MSA 환경에서는 아예 물리적으로 서비스가 떨어져 있기 때문에 DDD를 강제해야하는 부분이 존재한다. 그래서 아래 Popit에서 본 글을 정리해보고자 한다. 서로 다른 Aggregate에서 연관관계 사용하지 않기 예를 들어 User와 Post라는 도메인이 서로 분리되어있는 마이크로 서비스라고 가정하자. User는 여러개의 Post를 작성할 수 있기 때문에 1:N 관계에 놓여있다. Post 테이블에는 당연히 '작성자'라는 User 정보가 담겨져 있긴 하지만 그 외에 User에..

    Kotlin에서 JPA 사용법

    Kotlin에서 JPA를 사용하면서 겪은 시행착오를 좀 짧게 적어보려고 한다. 다른 글들도 많지만 개인 정리 겸 한꺼번에 모아서 보기 위함이다. plugin.jpa 사용하기 plugins { kotlin("plugin.allopen") version "1.3.71" kotlin("plugin.noarg") version "1.3.71" kotlin("plugin.jpa") version "1.3.72" } allOpen { annotation("javax.persistence.Entity") } noArg { annotation("javax.persistence.Entity") } JPA에서 Lazy Loading을 사용하려면 프록시 객체를 이용해야한다. 하지만 Kotlin에서의 모든 클래스, 함수, 프..

    Fetch Join 사용 시 조건문(Condition) 올바르게 사용하기 - 실습으로 배우는 JPA 4편

    코드는 Github을 통해 확인할 수 있습니다. 이 글은 Fetch Join에 조건문을 사용해보면서 어떠한 상황에서 문제가 생기는 지 알아보는 예제입니다. Fetch Join은 일대다 조인 시 한계점이 많아서 default_batch_fetch_size를 설정하는 것이 가장 좋은 방법이지만 드물게나마 Fetch Join에 조건문을 걸고 이용해보고 싶다면 어떠한 방법으로 사용해야 올바른 방법인지 알 수 있습니다. 제대로 설명이 될지는 모르겠으나 한번 시작해보겠습니다! 들어가기 전 Member Entity와 Order Entity를 아래와 같이 만들었습니다. 총 3명의 회원을 만들고 회원마다 각각 Apple, Banana, Orange를 주문한 상태입니다. Fetch Join 이란? Fetch Join은 N..