본문 바로가기

jpa7

(JPA) JPA를 왜사용하나요? JPA 사용 이유 (JPA) JPA를 왜사용하나요? JPA 사용 이유 JPA도 Spring과 마찬가지로 처음 접하고나서 3년차가 되어가고 있습니다. 작년 초 까지만 해도 어떻게 동작하는지 아무것도 모르고 사용하고 있었는데, 작년 중순부터 지금까지 JPA에 대해 공부하며 되돌아보니 그때는 어떻게 사용했었는지 놀라울 따름입니다. JPA를 조금씩 더 알아가며 왜 JPA를 사용하는 것인가에 대해 나름 정리해보려합니다. JPA 사용 이유 Java는 객체지향 언어이고, DataBase(: 이하 DB)는 데이터 중심으로 구성되어 있다. 이 패러다임의 불일치를 해결하기 위해 JPA를 사용한다. (JPA는 ORM(:Object-Relational-Mapping 이다)) 객체는 필드와 메소드를 가지고있고, 상속이 가능하다. 예를들어 팀 객.. 2020. 8. 1.
(JPA) 엔티티매니져 플러시(EntityManager flush)란? 엔티티매니져 플러시(EntityManager flush) : 플러시(flush())는 영속성 컨텍스트의 변경 내용을 DB에 반영한다. 이렇게 꼭 외워두자. 구체적으로는 아래와 같이 동작한다. 1. 변경 감지 동작 : 영속성 컨텍스트에 의해 관리되는 엔티티를 스냅샷과 비교하여 수정이 일어난 엔티티에 대한 update 쿼리문을 쓰기 지연 SQL 저장소에 저장한다. 2. 쿼리 실행 : 쓰지 지연 SQL 저장소의 쿼리를 DB에 전송하여 실행한다. flush() 가 실행되는 경우는 3가지가 있다 1. entitiyManager.flush() 직접 호출 : 테스트 등의 경우를 제외하고 거의 사용하지 않음 2. 트랜잭션 커밋 시점에 자동으로 호출 : DB 변경 내용을 SQL로 전달하지 않고 (flush()를 실행하지.. 2020. 4. 20.
(JPA) 프록시, 지연로딩, 즉시로딩 (Proxy / Lazy Loading / Eager Loading) JPA 프록시 지연로딩 즉시로딩 Proxy / Lazy Loading / Eager Loading 지연로딩 (Lazy Loading) JPA 지연로딩은 프록시 객체의 메소드를 사용하는 시점에 데이터베이스에 쿼리문을 수행하여 엔티티를 조회하는 방식으로 동작한다. 지연로딩을 사용함으로써 연관관계이지만, 사용하지 않는 객체를 조회하는 쿼리문을 실행하지 않도록 하여 성능을 향상 시킬 수 있다. public class User { @GeneratedValue @Id @Column(unique = true, nullable = false) private Integer id; private String name; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LA.. 2020. 4. 17.
JPA란? 왜사용하나요? 짧은 답변 JPA는 ORM을 제공하는 Hibernate 프레임워크의 표준 인터페이스를 제공하는 API 이다. 사용하는 이유에는 4가지가 있다. 1. 생산성 2. 유지보수성 3. 성능 최적화 기능 ( fetch join, batch size, projection 등 ) 4. 추상화 ( 벤더 종속적이지 않음 ) 2020. 3. 30.
(JPA) JPA 성능개선이란? 성능개선 적용기 (fetch join/BatchSize) JPA 성능개선 적용기 fetch join BatchSize 이전글: jpa 성능개선 목록 ↓ https://lion-king.tistory.com/entry/JPA-Performance-Improvement-list 마이페이지 개편 중 구매내역 api를 호출해보니 응답속도가 매우 느린 이슈가 있었습니다. (서비스 메소드만 테스트 하였는데도 1분이상..) 테스트 계정이어서 구매내역이 많은 탓도 있었겠지만 개선이 필요할 것 같아 실행되는 쿼리를 확인해보니 엄청난 수의 select 문이 실행되는 것을 확인할 수 있었습니다. 업무시간 외에 이것저것 테스트를 하였고 fetch join과 BatchSize를 사용해서 성능개선 되는 과정을 기록에 남깁니다. (개선 전 77초 -> 개선 후 2초) 기존 Entity .. 2020. 3. 9.
(JPA) JPA 성능개선이란? 성능개선 목록 (N+1문제/read-only/Non-Transactional..) JPA 성능개선 목록 1. N+1 문제 개선 JPA 사용시 성능상 가장 조심해야하는 것이 N+1 문제이다. N+1 문제는 연관관계 설정이 되어있는 Entity 조회시 연관된 다른 Entity를 가져오기 위해 조회한 수 만큼 다시 SQL문이 수행되는 문제를 뜻한다. 예시) : select 문이 여러번 사용되는 것이 보이시나요? 위 쿼리는 한 Entity를 조회했는데 연관된 Entity들을 가져오려고 생성되는 쿼리들 입니다. 성능이 많이 느렸습니다 - 해결방법 a. (fetch = FetchType.EAGER) :FetchType을 EAGER 로 변경 (즉시 로딩 전략) : Entity 조회시점에 Mapping된 Entity를 join 문으로 함께 가져온다 b. JPQL fetch join 사용 (JPQL의.. 2020. 3. 7.
(JPA) JPA 영속성이란? 간단 요약 정리! (영속성 상태 / 기능) JPA 영속성 1. 영속성 컨텍스트 : Entity가 영구적으로 저장되는 환경 (논리적인 개념) 2. Entity Manager : Entity를 영속성 컨텍스트에 등록하거나 삭제 등의 기능을 담당 3. Entity의 상태 - 1. 비영속 : Entity가 영속성 컨텍스트에 등록되어 있지 않음 - 2. 영속 : Entity가 영속성 컨텍스트에 등록되어 있음. (기능을 제공받을 수 있음) - 3. 준영속 : Entity가 영속 상태에서 해제되었음 ( 하지만 영속성 컨텍스트에 식별정보는 남아있다 -> 다시 영속상태로 되돌릴 수 있음) - 4. 삭제 : Entity가 영속성 컨텍스트에서 아예 삭제되었음. 4. 제공받을 수 있는 기능 - 1. 1차 캐싱 지원 : Entity의 조회가 필요한 상황에서 영속성 컨텍.. 2019. 4. 23.