목록CS/JPA (4)
GiYeong
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/coqFQu/btrK4Cz2h5R/6zsqp2QMcXrHm1XaJ2pn60/img.png)
N + 1 문제 연관 관계가 설정되어있는 엔티티를 조회할 때, 조회된 데이터의 개수(N개)만큼 연관 관계의 조회 쿼리가 추가적으로 발생하여 데이터를 읽어오는 현상 원인 JPA가 JPQL을 분석하여 SQL을 생성할 때, 글로벌 Fetch 전략을 참고하지 않고 JPQL 자체만을 사용하기 때문에 Fetch 전략이 즉시 로딩(Eager)일 경우 findall() 이 발생하면 [select * from A] 과 같은 JPQL 구문 및 이를 분석하여 생성된 SQL이 실행됨 DB의 결과를 받아 엔티티(A)의 인스턴스들이 생성됨 생성된 엔티티와 연관되어있는 다른 엔티티(B)도 로딩됨 영속성 컨텍스트에 연관되어있는 다른 엔티티(B)가 있는지 확인 영속성 컨텍스트에 없다면 2단계에서 생성된 인스턴스들의 개수와 맞게 [se..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cIys6S/btrK0GpS43c/cTmCNVtFyVWf9nYYdudpLK/img.png)
영속성 컨텍스트 엔티티를 영구적으로 저장하는 환경으로서, App과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다. 엔티티 매니저가 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 영속성 컨텍스트의 특징 엔티티 매니저를 생성할 때 1개 생성된다. 엔티티 매니저를 통해 영속성 컨텍스트에 접근하고 관리할 수 있다. 영속성 컨텍스트는 엔티티를 식별자 값으로 구분한다. 엔티티의 생명주기 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태 영속(managed) : 영속성 컨텍스트에 저장된 상태 준영속(detached) : 영속성 컨텍스트에 저장되어있다가 분리된 상태 삭제(removed) : 삭제된 상태 영속성 컨텍스트 장점 1차 캐시를 통한 성능 향상 : 엔티티 조회시 영속성 컨텍..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cyYWhZ/btrHIfae8tA/9QERcnoOdjHOt6Pr2nuMWK/img.jpg)
JPA(Java Persistence API) 현재 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음이다. JPA의 동작 과정 JPA는 어플리케이션과 JDBC 가이에서 동작한다. 개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하고, DB와 통신한다. 즉, 개발자가 직접 JDBC API를 사용하지 않는다. 저장 과정 MemberDAO에서 객체를 저장하고 싶은 경우 1. JPA에 Member 객체를 넘긴다. 2. JPA에서 Member 엔티티를 분석한다. 3. JPA에서 SQL을 생성한다. 4. JPA에서 JDBC API를 사용해서 SQL을 DB에 날린다. 조회 과정 Member 객체를 조회하고 싶은 경우 1. JPA에 member의 pk 값을 넘신다. 2. JPA에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/YRG1t/btrHIZSjRU1/T68dXDowuKaxJP5bAo7fdk/img.png)
ORM(Object-Relational Mapping, 객체 관계 매핑) ORM이란 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 이를 통해 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다. 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하기 때문에 불일치가 존재하는데, ORM이 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다. ORM의 장점 1. 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있도록 해준다. ORM을 통해 SQL Query가 아닌 직관적인 코드(메서드)로 데이터를 조작할 수 있기 때문에 개발자가 객체 모델로 프로그래밍하는데 집중할 수 있도록 도와준..