JPA

    Spring jpa의 사실과 오해

    우연히.. youtube를 보던 도중 NHN에서 올린 Spring JPA의 사실과 오해라는 알고리즘이 내 유튜브에 떳고 해당 영상을 시청하고 새롭게 알게된 지식을 다시한번 기록하기위해 작성하려고 합니다.ㅎㅎ 흔히 JPA를 통해 entity설계 및 로직을 구현해본사람이면 N+1문제는 알 것이빈다. 한번의 쿼리가 나갈 것을 예상하고 쿼리를 작성했는데 연관관계의 의해 N번의 쿼리가 추가적으로 나가는 것을 N+1이라고하는데 , 이것이 EAGER Fetch 타입뿐만아니라 lazy로딩에서도 발생될 수 있고, findAll과 같이 jpql이 먼저 수행되는 로직이 작성됐을 때도 발생할 수 있다는 이야기를 해주셨다. 위에 설명을 읽으니까 너무 이해가 잘 됐다. findAll같은 경우 단일 레코드 조회가 아닌경우, 해당 ..

    Spring Data JPA 에서 Page와 Slice

    Spring Data JPA를 쓰면서 동적 페이징처리가 매우 쉬워졌다. 바로 PageRequest 객체가 자동으로 limit, offset으로 페이징하던 이전 쿼리를 자동으로 생성해주기 때문이다. Page와 Slice PageRequest 객체를 통해 페이징을 할때 반환형으로 Page와 Slice를 사용한다. 두 객체의 결과물과 성능은 어떤 차이가 있는지 확인해보자 Repository Interface //MemberRepository ... Page findPageBy(Pageable pageable); Slice findSliceBy(Pageable pageable); ... 위와같이 Page와 Slice를 반환해주는 리포지토리를 만들고 @Test public void paging() throws E..

    DTO에 Noargs 사용하는이유와 aceessLevel Protected을 사용하는이유

    @Getter @NoArgsConstructor(access= AccessLevel.PROTECTED) public class SignUpRequestDto { private String email; private String password; } 👉 이러한 DTO에서 습관적으로 @NoArgsConstructor 를 붙여서 사용하곤 했는데, 사용하는 이유를 제대로 알지 못해서 이번 기회에 제대로 알아보고자 한다. 우선, 기본 생성자가 필요한 이유를 알기 위해서는 스프링이 어떻게 Dto를 JSON으로 맵핑하는지 그 원리를 알아야 한다. 스프링은 바로 Jackson 라이브러리의 ObjectMapper를 사용하여 JSON으로 맵핑한다! ObjectMapper는 직렬화(serialize), 역직렬화(deseri..

    JSON parse error: Cannot deserialize value of type `enum package`

    이게 무슨오류일까 ?? enum을 validationCheck해주는 어노테이션을 만들다가 오류가 발생했다. 기본적으로 json body를 받을때, json to object 과정에서 deserialize 는Jackson라이브러리에서 실행됩니다. 이 경우 enum value의 name과 완전 동일한경우, 기본 deserialize가 있기에 문제는 없으나, 변수가 조금이라도 틀리게되면 바로 이런 에러를 맞이하게됩니다. JSON parse error: Cannot deserialize value of type `enum package` 이경우 해당 에러를 맞이하지않고, 내가 지정한 setter를 사용하게끔 지원하는 @JsonCreator라는 어노테이션이 필요합니다. youth,adult,oldMan; @Jso..