orm
-
JoinColumn이란 JoinColumn이란 엔티티 간의 관계를 매핑할 때 사용하는 어노테이션이다. 관계가 외래키 (foreign key)로 묶여있는 엔티티 간의 참조 관계를 나타내준다. 여기에서 각 테이블은 연관 관계를 맺고 테이블은 외래 키로 묶이면서 한 쪽이 연관 관계의 주인이 된다.우선 연관 관계의 주인이라는 것에 대해서 알아야 한다. 연관 관계의 주인이란? 연관 관계의 주인이란 JPA같은 ORM에서 사용하는 개념으로, 외래키로 묶인 엔티티들 중 외래키를 관리 할 책임이 있는 엔티티를 의미한다. 일반적으로 외래 키를 맺는 엔티티는 다대일, 일대일 관계를 맺게 되는데 일대일의 관계를 제외하고 다대일에선 무조건 ‘다'쪽의 엔티티가 외래 키를 가지게 된다. 이는 RDB의 설계 원칙 상 컬랙션을 담을 ..
JAVA N+1에 대하여 - JoinColumn 과 연관 관계의 주인이란? (2) -어려움JoinColumn이란 JoinColumn이란 엔티티 간의 관계를 매핑할 때 사용하는 어노테이션이다. 관계가 외래키 (foreign key)로 묶여있는 엔티티 간의 참조 관계를 나타내준다. 여기에서 각 테이블은 연관 관계를 맺고 테이블은 외래 키로 묶이면서 한 쪽이 연관 관계의 주인이 된다.우선 연관 관계의 주인이라는 것에 대해서 알아야 한다. 연관 관계의 주인이란? 연관 관계의 주인이란 JPA같은 ORM에서 사용하는 개념으로, 외래키로 묶인 엔티티들 중 외래키를 관리 할 책임이 있는 엔티티를 의미한다. 일반적으로 외래 키를 맺는 엔티티는 다대일, 일대일 관계를 맺게 되는데 일대일의 관계를 제외하고 다대일에선 무조건 ‘다'쪽의 엔티티가 외래 키를 가지게 된다. 이는 RDB의 설계 원칙 상 컬랙션을 담을 ..
2024.10.30 -
N+1의 해결 방법 N+1 문제를 설명하면서 왜 길게 JoinColumn을 설명했냐 하면 이러한 객체 참조를 이용할 때 많이 나타날 수 있기 때문이다. 물론 JPA를 사용하지 않아도 발생할 수 있지만 비슷한 ORM을 사용할 때 많이 발생하고 해결해야 하기에 JoinColumn 먼저 설명하였다.이론상 Contest에서 participants를 일대다로 JoinColumn 하고 Lazyloading을 썼다면 , Contest만 조회를 하면 participants는 조회를 하지 않아야 한다. 그러나 문제는 Entity를 View로 전환 하는 과정이다. API에서 Entity를 그대로 내보내면 최종 Return 객체 값을 Json 형태로 바꿔준다. @GetMapping("/contests") publ..
JAVA N+1에 대하여 - 해결 방법 (3) - 어려움N+1의 해결 방법 N+1 문제를 설명하면서 왜 길게 JoinColumn을 설명했냐 하면 이러한 객체 참조를 이용할 때 많이 나타날 수 있기 때문이다. 물론 JPA를 사용하지 않아도 발생할 수 있지만 비슷한 ORM을 사용할 때 많이 발생하고 해결해야 하기에 JoinColumn 먼저 설명하였다.이론상 Contest에서 participants를 일대다로 JoinColumn 하고 Lazyloading을 썼다면 , Contest만 조회를 하면 participants는 조회를 하지 않아야 한다. 그러나 문제는 Entity를 View로 전환 하는 과정이다. API에서 Entity를 그대로 내보내면 최종 Return 객체 값을 Json 형태로 바꿔준다. @GetMapping("/contests") publ..
2024.10.30 -
1. N+1이란 무엇인가. ORM을 사용하여 DB와 상호작용을 할 때 발생하는 성능 이슈 중 하나이다. DB에 있는 데이터을 엔티티로 로드하는 과정에서 연관 엔티티를 어떻게 로드 할 것인가에서 나오는 문제이다.ORM의 영속성 컨텍스트(persistence context)는 db의 데이터를 객체로 변환하여 영속성을 가질 수 있는 환경을 만들어 주는데데이터의 영속성이라함은 애플리케이션의 실행 상태나 데이터를 영구적으로 저장하여, 프로그램이 종료된 후에도 사라지지 않고 유지되는 데이터의 특성을 말한다. 즉, 데이터를 영구적인 저장소로 저장하여 데이터가 지속될 수 있게 하는 것이다. 이는 컴퓨터가 재시작되어도 데이터를 보존하고 재사용을 가능하게 한다.이런 데이터를 DB 밖에서 영속성을 유지한 상태로 객체화 시켜..
JAVA N+1에 대하여 - N+1이란? (1) -어려움1. N+1이란 무엇인가. ORM을 사용하여 DB와 상호작용을 할 때 발생하는 성능 이슈 중 하나이다. DB에 있는 데이터을 엔티티로 로드하는 과정에서 연관 엔티티를 어떻게 로드 할 것인가에서 나오는 문제이다.ORM의 영속성 컨텍스트(persistence context)는 db의 데이터를 객체로 변환하여 영속성을 가질 수 있는 환경을 만들어 주는데데이터의 영속성이라함은 애플리케이션의 실행 상태나 데이터를 영구적으로 저장하여, 프로그램이 종료된 후에도 사라지지 않고 유지되는 데이터의 특성을 말한다. 즉, 데이터를 영구적인 저장소로 저장하여 데이터가 지속될 수 있게 하는 것이다. 이는 컴퓨터가 재시작되어도 데이터를 보존하고 재사용을 가능하게 한다.이런 데이터를 DB 밖에서 영속성을 유지한 상태로 객체화 시켜..
2024.10.30 -
앞선 이야기: https://dogfootsleep.tistory.com/40 Entity Framework 동시성 충돌의 해결에 대하여드디어 동시성 해결에 대한 내용이다!이 이야기를 하기 위해서 앞서 많은 내용들을 이야기 하였다.https://dogfootsleep.tistory.com/38 트랜잭션 격리 수준 (Isolation level)https://dog-foot-sleep.tistory.com/34 트랜dogfootsleep.tistory.com EF에서 dbContext를 사용할 때 DI(Dependency Injection)을 사용하면 기본적인 Life cycle(생명 주기)은 Scoped로 되어 있다. Life Cycle에 대해서는 추후에 다시 이야기 하도록 하겠다. DI 컨테이너의 ..
Entity Framework 동시성 충돌의 해결에 대하여 -SaveChanges와 EF의 매커니즘 (3) -어려움앞선 이야기: https://dogfootsleep.tistory.com/40 Entity Framework 동시성 충돌의 해결에 대하여드디어 동시성 해결에 대한 내용이다!이 이야기를 하기 위해서 앞서 많은 내용들을 이야기 하였다.https://dogfootsleep.tistory.com/38 트랜잭션 격리 수준 (Isolation level)https://dog-foot-sleep.tistory.com/34 트랜dogfootsleep.tistory.com EF에서 dbContext를 사용할 때 DI(Dependency Injection)을 사용하면 기본적인 Life cycle(생명 주기)은 Scoped로 되어 있다. Life Cycle에 대해서는 추후에 다시 이야기 하도록 하겠다. DI 컨테이너의 ..
2023.09.14