WIL(07.11~07.16)

전성영·2022년 7월 17일
0

WIL

목록 보기
10/22

07.11~07.12

이것저것 여러가지 했지만 가장 큰건 CI/CD를 구축했다는 것이다!!
진짜 도커+젠킨스부터 시작해서 엄청난 일들이 있었는데 결국 GithubAction을 사용하긴 했지만 끝이 났다!

[여기](https://velog.io/@junsj119/CICDgithub-Action

07.13

Dto를 Jpa Query로 반환하는 방법

@Query("select new com.study.datajpa.dto.MemberDto(m.id, m.username, t.name) from Member m join m.team t")
List<MemberDto>findMemberDto();

Slice

Slice<Member> slice = memberRepository.findByAge(age, pageRequest);

slice는 일반 Page보다 limit + 1 해서 가져온다.
ex) 어플이나 웹 보면 더보기 버튼에 사용


CountQuery 분리(총 개수를 가져올 때 보다 효율적이다.)

@Query(value = "select m from Member m left join m.team t",
             countQuery = "select count(m) from Member m")
Page<Member>findByAge(int age, Pageable pageable);

07.14

벌크 쿼리

@Modifying(clearAutomatically = true)
@Query("update Member m set m.age = m.age + 1 where m.age >= :age")
int bulkAgePlus(@Param("age")int age);

@Modifying(clearAutomatically = true) 어노테이션을 꼭 붙여줘야 한다.


JPA 영속성 컨텍스트의 동일성 보장
또한 이 상태에서 member5의 값은 40이다. 왜냐하면 member5의 아이디 값 즉 5가 엔티티에 존재하기 때문이다.
그렇게 되면 DB에서 조회한 값을 버리고 영속성 컨텍스트에서 조회한 값을 반환한다.

그렇기 때문에 @Modifying에서 clearAutomatically = true 옵션을 넣어주는 것이고,(em.clear()를 해줘서 영속성 컨텍스트를 깔끔하게 비워준다.)
가장 깔끔한 방법은 벌크쿼리는 딱 벌크쿼리에서 끝나는 것이 좋다!


N+1 문제

여기 에 정리를 해놓았지만 추가로 고고.

이렇게 fetch 키워드를 사용하면 fetch join을 사용할 수 있고,
기존의 Eager랑 다른 점은 select m 과 select m, t 가 차이점이다.
즉 후자가 fetch인데 한번에 다 가져온다는 뜻. 저 링크에도 정리가 되어있다.
무튼 이건 알겠는데 기존에 jpa가 제공하는 함수는??? JPQL을 또 짜?
아니???

findAll을 오버라이딩 한 후 @EntityGraph 어노테이션을 사용해주면 된다.

간단할 때에는 @EntityGraph를 사용/ 복잡할 때에는 fetch 사용

07.15

07.16

부리더 분이 중간 발표를 잘 해주셨다.
생각이 많아지는 하루다. 신경 써야될 부분이 많아서 스트레스 받지만 최대한 열심히 해보자!

profile
Slow and Steady

0개의 댓글