즉시 로딩과 지연 로딩프록시 학습 처음에 했던 질문. Member를 조회할 때 Team도 함께 조회 해야 할까?비즈니스 로직에서 단순히 멤버 로직만 사용하는데 함께 조회하면, 아무리 연관관계가 걸려있다고 해도 손해이다.JPA는 이 문제를 지연로딩 LAZY를 사용해서 프록시로 조회하는 방법으로 해결 한다.코드로 이해하기Member와 Team 사이가 다대일 @ManyToOne 관계로 매핑되어 있는 상황에서,@ManyToOne 어노테이션에 fetch 타입을 줄 수 있다.FetchType.LAZY@Entity @Getter @Setter public class Member extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY)..
프록시질문으로 부터 프록시에 대한 학습을 시작한다.Member 엔티티를 조회할 때 Team도 함께 조회해야 할까?실제로 필요한 비즈니스 로직에 따라 다르다.비즈니스 로직에서 필요하지 않을 때가 있는데, 항상 Team을 함께 가져와서 사용할 필요는 없다.낭비가 발생하게 된다.JPA는 이 낭비를 하지 않기 위해, 지연로딩과 프록시라는 개념으로 해결한다.프록시 기초지연 로딩을 이해하려면, 프록시의 개념에 대해서 명확하게 이해해야 한다.JPA에서 em.find() 말고, em.getReference()라는 메서드도 제공 된다.em.find() 는 DB를 통해서 실제 엔티티 객체를 조회하는 메서드이고em.getReference() 는 DB의 조회를 미루는 가짜(프록시) 엔티티 객체를 조회하는 메서드이다.Membe..
영속성 컨텍스트JPA를 공부할 때 가장 중요한게객체와 관계형 데이터베이스를 매핑하는 것(Object Relational Mapping) 과영속성 컨텍스트를 이해하는 것 이다. 두가지 개념은 꼭 알고 JPA를 활용하자. 엔티티 매니저 팩토리와 엔티티 매니저JPA는 스레드가 하나 생성될 때 마다(매 요청마다) EntityManagerFactory에서 EntityManager를 생성한다.EntityManager는 내부적으로 DB 커넥션 풀을 사용해서 DB에 붙는다. 영속성 컨텍스트영속성 컨텍스트는 JPA를 이해하는데 가장 중요한 용어이다."엔티티를 영구 저장하는 환경"이라는 뜻EntityManager.persist(entity);앞의 예제에서 persist()로 db에 객체를 저장하는 것이라고 배웠지만,실제로..
다대다[N:M]실무에선 사용하지 않는 것을 추천한다. 사용하면 안되는 이유를 학습하자.관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다.연결 테이블(조인 테이블)을 추가해서 일대다, 다대일 관계로 풀어내야한다. 객체는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능하다.ORM 입장에서는 테이블은 안되고, 객체는 안되는 것을 지원해줘야 한다.따라서, 아래의 그림에서와 같이 객체의 다대다 관계(멤버와 프로덕트가 서로 리스트를 가짐)와테이블에서 다대다 관계를 일대다 다대일 관계로 풀어낸 것 두개의 차이를 연결해준다. JPA @ManyToMany 어노테이션을 사용하고@JoinTable로 연결 테이블을 지정해줄 수 있다.다대다 단방향@Entity public class Member { ..
일대일 [1:1]일대일 관계는 그 반대도 일대일이다.일대일 관계는 특이하게 주 테이블이나 대상 테이블 중에 외래 키를 넣을 테이블을 선택 가능하다.주 테이블에 외래 키 저장대상 테이블에 외래 키 저장외래 키에 데이터베이스 유니크 제약조건 추가되어야 일대일 관계가 된다.일대일 - 주 테이블에 외래 키 단방향회원이 딱 하나의 락커를 가지고 있는 상황이다. 반대로 락커도 회원 한명만 할당 받을 수 있는 비즈니스 적인 룰이 있고, 이때, 둘의 관계는 일대일 관계이다.이 경우 멤버를 주 테이블로 보고 주 테이블 또는 대상 테이블에 외래 키를 저장할 수 있다. 단, 유니크 제약조건을 추가한 상태에서만.다대일[N:1] 단방향 관계 매핑과 JPA 어노테이션만 달라지고, 거의 유사하다.일대일 - 주 테이블에 외래 키 양..
일대다 [1:N]일대다 관계에서는 일이 연관관계의 주인이다.일 쪽에서 외래키를 관리하겠다는 의미가 된다.결론을 먼저 말하자면, 표준스펙에서 지원은 하지만 실무에서 이 모델은 권장하지 않는다.일대다 단방향 매핑팀과 멤버가 일대다 관계이다.Team이 Members를 가지는데, Member 입장에서는 Team을 참조하지 않아도 된다라는 설계가 나올 수 있다. 객체 입장에서 생각하면 충분히 나올 수 있는 설계이다.그러나 DB 테이블 입장에서 보면, 무조건 일대다의 다쪽에 외래키가 들어간다.Team에서 members가 바뀌면, DB의 Member 테이블에 업데이트 쿼리가 나가는 상황이다.일대다 단방향 매핑JPA @OneToMany와 @JoinColumn()을 이용해서 일대다 단방향 매핑 코드로 이해하기Member..
- Total
- Today
- Yesterday
- vuejs
- 알고리즘
- vuex
- JPA
- IT융합인력양성사업단
- 무선통신소프트웨어연구실
- Java
- Recursion
- 한밭이글스
- Algorithm
- 자바
- 스프링부트
- 젠킨스
- AWS
- Spring Boot
- RBT
- 순환
- 한밭대학교
- 정렬
- 라즈베리파이
- Spring
- 시간복잡도
- Wisoft
- springboot
- 레드블랙트리
- ORM
- Raspberry Pi
- 인프런
- github
- Vue.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |