고수만/언어
-
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 -
기본:: 필자의 주력언어는 현재 c# 이지만 과거에는 Java였다. 일본에 팔려가면서 부득이하게 .Net 프레임워크로 시작하였고 어플리케이션 개발을 배웠다. 그리고 새로운언어를 시작한다는 것에 막연한 두려움이 있었다.그러나 Java와 C#은 매우 비슷한 언어이다. c#은 2000년대 초에 발표가 되었고 네트워크나 웹 서비스 개발을 중점으로 만들어지고 설게되었다. java와 C++에 영향 받았다는 것으로 알려져 있으며 현재 대표적인 객체 지향 프로그래밍 언어 중 하나이다. 일단 두 언어에 대해서 무엇이 차이가 있는지 알기 전에 어떤 철학으로 두 언어가 나왔는 지를 알아보야 한다.JavaWrite Once, Run Anywhere 이란 철학을 기반으로 어느 하드웨어(다양한 플랫폼)에서도 동작할 수 있기 위..
.Net(c#) vs Spring(Java) 에 대하여 -보통기본:: 필자의 주력언어는 현재 c# 이지만 과거에는 Java였다. 일본에 팔려가면서 부득이하게 .Net 프레임워크로 시작하였고 어플리케이션 개발을 배웠다. 그리고 새로운언어를 시작한다는 것에 막연한 두려움이 있었다.그러나 Java와 C#은 매우 비슷한 언어이다. c#은 2000년대 초에 발표가 되었고 네트워크나 웹 서비스 개발을 중점으로 만들어지고 설게되었다. java와 C++에 영향 받았다는 것으로 알려져 있으며 현재 대표적인 객체 지향 프로그래밍 언어 중 하나이다. 일단 두 언어에 대해서 무엇이 차이가 있는지 알기 전에 어떤 철학으로 두 언어가 나왔는 지를 알아보야 한다.JavaWrite Once, Run Anywhere 이란 철학을 기반으로 어느 하드웨어(다양한 플랫폼)에서도 동작할 수 있기 위..
2023.12.04