본문 바로가기

Spring Data JPA3

[Spring Data JPA] @OneToMany Entity 연관 관계에 대하여 JPA는 RDBMS의 table 연관 관계를 Java object로 표현되는 DB model로 표현하기 위해 @OneToMany, @ManyToOne, @Embedded 와 같이 entity 간의 연관 관계를 설정하는 여러 기능을 제공한다. 이는 JPA를 사용하면서 POJO로 이뤄진 Entity와 DB model인 JPA Entity를 굳이 분리하지 않아도 표현력 있는 Entity 코드를 작성할 수 있게 해준다. 이번 포스팅에서는 JPA를 사용했을 때 상위 객체가 하위 객체를 포함하고 있음을 표현하기 위해 @OneToMany로 일대다 관계를 만드는 방식에 대한 얘기를 해보겠다. 여기서는 다대일 관계(many-to-one)에 대해서는 다루지 않겠다. 다대일 관계는 query 효율을 위해 사용할 수 있지만,.. 2023. 1. 20.
Spring Data JPA - Write, Read Only 분리 적용하기 - 2. 무력화 되는 경우 이전 포스팅을 통해 Spring Data JPA를 사용하면서 AbstractRoutingDataSource, LazyConnectionDataSourceProxy를 사용하여 Write, Read Only DB를 분리하여 사용하는 방법의 원리를 알아보았다. 그럼 이 설정을 무력화하려면 어떻게 하면될까? 앞서 봤던 설정의 핵심은 LazyConnectionDataSourceProxy를 사용하여 DataSource로 부터 Connection을 가져오는 타이밍을 늦추는 것이었다. 그럼 이를 무력화 할 수 있는 방법은 Transaction이 시작되자마자 DataSource로부터 Connection을 가져와 이를 직접 사용하게 만드는 것이다. 이러한 방법 중에 당장 테스트해볼 수 있는 방법은 기존 설정에 p6spy를.. 2021. 12. 18.
Spring Data JPA - Write, Read Only 분리 적용하기 - 1. 설정 및 원리 프레임워크를 사용하여 비지니스 로직이 아닌 특정한 기술을 구현하려면 프레임워크 내부에 대한 충분한 이해가 필요하다. 구글링을 통해 해당 기능의 코드를 알아내더라도 정확하게 내부적인 동작 원리를 아는 것이 좋다는 뜻이다. 그렇지 않다면 해당 코드 관련해서 이슈가 생겼을 때 원인을 파악하고 적절한 조치를 취하기가 어렵거나 불가능할 수도 있다. 이번 포스팅에서는 Spring Data JPA를 사용할 때 DB의 부하를 분산시키기 위해 주로 사용하는 기법인 @Transactional에 readonly=true 옵션을 줬을 때 Read Only(Secondary) DB를 사용하고, 그렇지 않은 경우(쓰기를 할 때) Write(Primary) DB를 사용하는 방법에 대해 설정과 내부적인 원리를 알아보고, 다음에는 이.. 2021. 12. 17.