인프런

Dev/JPA

[강의정리] N+1 문제와 JPQL fetch join을 통한 해결

출처: 자바 ORM 표준 JPA 프로그래밍 N + 1 문제 N + 1 문제는 내가 예상했던 것보다 훨씬 많은 쿼리가 나가는 문제를 뜻한다. 여기서 1은 내가 예상한 (당장 보이는) 하나의 쿼리이고, N은 데이터의 개수 N만큼 발생하는 예상치 못한 쿼리이다. 다양한 예시 Member 엔티티와 Team 엔티티가 있다고 가정하자. 이들은 다대일 관계이며, Member에서 Team을 참조할수있다. 이런 상황에서 Member를 조회해보자. 1. em.find()로 조회 연관관계 매핑 시, 즉시 로딩으로 했는지, 지연 로딩으로 했는지가 중요하다. 즉시 로딩으로 설정시, 쿼리가 나갈때 즉시 로딩으로 설정된 엔티티들을 전부 조인해서 가져온다. 지연로딩으로 설정시, 쿼리가 나갈때 일단은 조회한 엔티티 자체만 가져온다. ..

Dev/JPA

[강의정리] 영속성 전이, 고아객체, 생명주기

출처: 자바 ORM 표준 JPA 프로그래밍 영속성 전이 영속성 전이(cascade)를 사용하면 말그대로 영속성을 전이시킬수 있다. A 엔티티를 영속화하면, 그에 연관된 B 엔티티도 자동으로 영속화 하는것이 가능해진다. 예시) @OneToMany(mappedBy="parent", cascade=CascadeType.PERSIST) 종류도 다양하다. CASCADE의 종류 • ALL: 모두 적용 • PERSIST: 영속 • REMOVE: 삭제 • MERGE: 병합 • REFRESH: REFRESH • DETACH: DETACH 오해하면 안되는점은, 이건 연관관계 매핑과 아무상관이 없다. 그저 편하라고 있는 기능을 제공해줄 뿐이다. 고아 객체 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 고아 객체라고 한다. ..

Dev/JPA

[강의정리] 프록시와 연관관계 관리

출처: 자바 ORM 표준 JPA 프로그래밍 프록시 객체는? 엔티티를 조회할때, 프록시 객체를 생성하여 그것을 대신 조회할수있다. em.find() 말고 em.getReference()를 호출하면, 일어나는 일들이다: 1. 진짜 엔티티를 상속하고 구조도 같은 프록시 객체가 만들어짐. 이 안에 실제 데이터는 없다. 2. 이렇게 얻은 객체에서 필드를 호출함 3. 그 순간 영속성 컨텍스트로 초기화 요청이 오고, 진짜 엔티티를 생성함 4. 프록시 객체가 진짜 객체로 요청을 다시 보내고 받아온 후 반환함. 한번만 초기화 되며, 프록시 객체 생성 전에 이미 영속성 컨텍스트에 진짜 엔티티 객체가 들어와 있으면, 그냥 진짜를 반환함. . . . 이런 프록시 객체는 어디에 사용될까? 지연로딩(lazy loading)에 사..

Dev/JPA

[강의정리] 상속관계 매핑

출처: 자바 ORM 표준 JPA 프로그래밍 계속 언급했지만 객체지향 언어와 관계형 DB는 패러다임의 불일치가 있다. 관계형 데이터베이스는 상속관계가 없고, 이와 유사한 슈퍼타입 서브타입 관계를 자바에 매핑해야한다. 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) • JOINED: 조인 전략 • SINGLE_TABLE: 단일 테이블 전략 • TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 상속관계 매핑의 종류 1. 조인전략 장점 - 테이블 정규화가 잘됨 - 저장공간 효율적임: 각 엔티티 클래스가 필요한 필드만 가지고 있어서 null로 채워줄 필요 없음 - 외래 키 참조 무결성 제약조건 활용 단점 - 조회시 조인이 많이 발생(조회 쿼리가 복잡함)->성능..

Dev/JPA

[강의정리] 연관관계 매핑

출처: 자바 ORM 표준 JPA 프로그래밍 객체와 테이블을 매핑하기위해서 페러다임의 불일치를 해결해야 한다. 객체의 참조와, 테이블의 외래 키를 매핑해야 하는것이다. JPA의 @JoinColumn를 사용하면 이를 쉽게 해결할수있다. 용어 정리, 설명 • 방향(Direction): 단방향, 양방향 -객체는 참조의 방향이 있다. A 객체가 B 객체를 참조하면 단방향 매핑이 하나 있는것이며, B 객체가 A 객체를 참조하면 단방향 매핑이 두개 있는것이고, 이를 양방향 매핑이라 부른다. 양방향 매핑을 하면, 1. 연관관계의 주인을 설정해주어야 한다. 2. 연관관계 편의 매소드를 작성해야 한다. 양방향 매핑은 나중에 필요하면 추가하는 식으로 작성하는것이 바람직하다. • 다중성(Multiplicity): 다대일(N:..

Dev/JPA

[강의정리] 영속성 컨텍스트의 동작

출처: 자바 ORM 표준 JPA 프로그래밍 PersistenceContext: 영속성 컨텍스트 영속화의 의미는 데이터를(엔티티) 영구 저장하는 것. 그것에 사용되는 논리적인 환경이 영속성 컨텍스트이다. EntityManager를 통해 접근할수 있다. 세부적으로는 EntityManagerFactory에서 EntityManager를 만들고, 그걸 트랜잭션 단위로 클라이언트가 사용한다. 생명주기 • 비영속 (new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 • 영속 (managed) 영속성 컨텍스트에 관리되는 상태 • 준영속 (detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 • 삭제 (removed) 삭제된 상태 영속성 컨텍스트의 이점 1차캐시 - 영속성 컨텍스트에 포함되..

Dev/개발일지

자바 ORM 표준 JPA 프로그래밍 완강

김영한님의 JPA 인강을 드디어 다 들었다. 17시간 짜리 강의이고, 강의 내용도 쉽지않아서 힘들었다. 사실 난이도 자체가 너무 어렵고 이해가 죽어도 안된다는 느낌은 아니였고, 강의에서 안다고 전제하고 설명하는 것들, 초반부에 알려주고 제대로 복습이 안된것들에 대해서 슉슉 지나가는 느낌이여서 힘들었다. DB설계와 SQL에 관한 내용들이 특히 알쏭달쏭했다. 하지만 이 강의를 듣기 잘했다고 생각하는게, 이렇게 내가 뭘 모르는지 아는 상태가 되는것이 너무너무 필요했기 때문이다. 이제부터 강의를 쭉 복습해서 블로그에 정리하고, 남은 강의들을 빨리 듣고나서 토이 프로젝트를 얼른 해보고싶다.

Dev/Spring

9. 빈 스코프

강의내용 빈 스코프란? -> 빈이존재할 수 있는 범위이다. 우리가 알고있던 빈 존재 범위는 사실 싱글콘 빈의 범위이다. 그게 기본값이니까. 하지만 스프링은 다양한 스코프를 지원한다. 1. 프로토타입 2. 웹관련 -request, session, application 스코프 등등이 존재한다. 프로토타입 스코프 매우 짧은 스코프이다. 스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계 주입, 초기화까지만 처리한다 -> 그러므로 @PreDestory는 동작하지 않는다. 그리고 싱글톤이 아니니까 이렇게 클라이언트는 서로 다른 빈을 받게된다. 이런 특성을 지닌 프로토타입 빈을 싱글톤과 같이 쓴다면 어떻게 될까? 프로토타입 빈이 호출됐지만, 결국 클라이언트 빈 호출시 한번만 호출되므로, 기대한 결과가 안나오게 된..

ChoiBulldog
'인프런' 태그의 글 목록