분류 전체보기(152)
-
쿼리 메소드 기능
메소드 이름으로 쿼리 생성 Spring Data JPA - Reference Documentation Example 121. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del docs.spring.io 조회(SELECT) : find…By, query…By, get…By 개수 조회(COUNT) : count…By → long..
2023.09.29 -
공통 인터페이스 기능
공통 인터페이스 설정 javaConfig 설정 @Configuration @EnableJpaRepositories(basePackages = "jpabook.jpashop.repository") public class AppConfig {} 스프링 부트 사용시 @SpringBootApplication 위치를 지정(해당 패키지와 하위 패키지 인식) 만약 위치가 달라지면 @EnableJpaRepositories 필요 스프링 데이터 JPA가 구현 클래스 대신 생성 org.springframework.data.repository.Repository를 구현한 클래스는 스캔 대상 @Repository 애노테이션 생략 가능 공통 인터페이스 분석 공통 인터페이스 구성 주요 메서드 save(S) : 새로운 엔티티는 저장..
2023.09.29 -
프로젝트 환경 설정 / 예제 도메인 모델
프로젝트 환경 설정 build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.1.0' id 'io.spring.dependency-management' version '1.1.0' } group = 'study' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter..
2023.09.29 -
실무 필수 최적화
OSIV와 성능 최적화 Open Session in View : 하이버네이트 Open EntityManager In View : JPA 관례상 OSIV라함 OSIV ON spring.jpa.open-in-view : true -> 기본값 애플리케이션 시작 시점에 warn 로그 남김 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지 OSIV 때문에 View Template이나 API 컨트롤러에서 지연 로딩이 가능 지연 로딩은 영속성 컨텍스트가 살아있어야 가능하고, 영속성 컨텍스트는 기본적으로 데이터베이스 커넥션을 유지 너무 오랜시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에 실시간 트래픽이 중요한 애플리케이션에서는 커넥션이 모자랄 수 있음 ..
2023.09.29 -
컬렉션 조회 최적화
주문 조회 V1 : 엔티티 직접 노출 https://github.com/dpdms529/JpaShop/commit/3971dc6b9dc468984b367f0e171eba544a1f778f 주문 조회 V2 : 엔티티를 DTO로 변환 https://github.com/dpdms529/JpaShop/commit/105d4ee3a72114529e7eb4e048f9e746e5d335c8 지연 로딩으로 너무 많은 SQL 실행 주문 조회 V3 : 엔티티를 DTO로 변환 - 페치 조인 최적화 https://github.com/dpdms529/JpaShop/commit/203db80c6a987b83bcfc739a19dc0a0dddda80b1 fetch join으로 SQL이 1번만 실행됨 일대다 조인으로 다를 기준으로 r..
2023.09.29 -
지연 로딩과 조회 성능 최적화
간단한 주문 조회 V1 : 엔티티를 직접 노출 https://github.com/dpdms529/JpaShop/commit/dd799b8549ce171d4103b883109271c2f0c286cd 양방향 연관 관계로 설정한 클래스 한 쪽을 @JsonIgnore로 가져오지 않도록 한다. 설정하지 않으면 서로 호출하기 때문에 무한 루프에 빠져 오류 발생 지연 로딩 설정을 한 경우 하이버네이트가 실제 객체 대신에 ByteBuddyInterceptor를 사용하여 프록시 객체를 넣어둠 Jackson 라이브러리가 json 결과를 만드는데 초기화되지 않은 프록시 객체가 들어있으면 오류 발생 Hibernate5JakartaModule 등록 기본적으로 초기화 된 프록시 객체만 노출하고, 초기화되지 않은 프록시 객체는 n..
2023.09.29