이 포스팅은 인프런의 김영한님의 강의를 복습하며 정리한 글입니다. 로그 추적기 개발 요구사항 개발의 편의를 위해서 모든 메서드마다 다음과 같은 로그를 남기는 로그 추적기의 개발 및 적용이 필요하다고 가정하자. 필요 요구사항은 다음과 같다. UUID로 요청을 분류한다. 실행되는 메서드들의 이름을 출력한다. 실행되는 메서드들이 아래로 내려가면 갈수록 -->,
Query DSL이란? Query DSL은 JPA의 JPQL을 자바 코드로 작성해서 컴파일 단계에서 에러를 쉽게 발견하고, 복잡한 JPQL을 쉽게 작성할 수 있도록 돕는 라이브러리다. 이 라이브러리를 사용하기 위해서는 의존관계를 추가하고, QType 객체를 생성해야한다. BuildGradle에 의존관계 추가하기 //querydsl 추가 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } dependencies { //querydsl 추가 implementation "com.querydsl:querydsl-jpa:${quer..
Open Session In View : True Spring의 Open Session In View의 기본 설정값은 True다. 따라서 Open Session In View를 사용하는 것이다. 이것을 사용하게 되면 다음과 같은 현상이 발생한다. 영속성 컨텍스트는 클라이언트의 요청이 들어오면 생성된다. 트랜잭션은 @Transactional이 붙었을 때 실행된다. 즉, 영속성 컨텍스트와 트랜잭션의 라이프 사이클이 다르다는 것이다. 상세 동작은 다음과 같다. 클라이언트의 요청이 들어오면 서블릿 필터나, 스프링 인터셉터에서 영속성 컨텍스를 생성한다. 이 때 트랜잭션은 시작하지 않는다. 서비스 계층에서 @Transactional로 트랜잭션을 시작할 때 1번에서 미리 생성해둔 영속성 컨텍스트를 찾아와서 트랜잭션을..
이 글은 인프런의 김영한님의 강의를 듣고 복습하며 정리한 글입니다. 연관관계 복잡한 테이블 API 제작 JPA : JPA를 활용한 회원 관련 API 개발은 간단한 API 개발이었다. 왜냐하면 Member와 관련된 API를 만들기는 했으나, 단순하게 회원 저장했을 때 만들어지는 PK값, 그리고 회원의 이름 정도였기 때문이다. 또한, 회원 조회와 관련된 API는 회원 내부적으로 주문 정보를 가지고 있지 않았기 때문에 null로 표시되었기 때문이다. 이번에는 조금 다르다. 주문은 회원, 배송, 주문_아이템과 연관관계를 가지고 있다. 따라서 회원 API를 개발하는 것보다 복잡하다. 이런 저런 문제가 발생할 수 있다. 하나하나 알아보려고 한다. 알아두기 : Hibernate5Module @Bean Hibernat..
JPA가 DTO로 직접 접근 기본적으로 DTO로 직접 접근하기 위해서는 new 연산자를 사용해 DTO를 만들어서 반환해줘야한다. 따라서 반환 타입을 Dto.class로 하고, new 연산자로 DTO를 만들어주면 된다. 약간 뜬구름 잡는 거 같은데, 좀 더 상세하게 알아보자. 첫번째 방법, Root Alias를 넘기기 → 실패 public List findOrderDtos() { return em.createQuery("select new hellojpa.jpa.repository.order.simplequery.SimpleQueryDto(o)" + " from Order o" + " join o.member m" + " join o.delivery d", SimpleQueryDto.class) .getR..