[Spring boot] JPA에서 Slice와 Page의 차이
·
Backend/Spring Boot
Slice public interface Slice extends Streamable { int getNumber(); int getSize(); int getNumberOfElements(); List getContent(); boolean hasContent(); // ...} JPA에서 정의한 Slice 인터페이스는 다음과 같다. 현재 페이지의 데이터들을 불러오고, 다음 페이지가 있는지 여부를 확인한다. Page public interface Page extends Slice { long getTotalElements(); int getTotalPages(); //...} Page 인터페이스는, Slice를 상속받기..
[Spring Boot] JPA N + 1 문제 직면과 해결, 그리고 Fetch Join
·
Trouble Shootings/성능 개선
문제 상황내 프로젝트에는 최근 DDD와 헥사고날 아키텍쳐로 리팩토링을 하게되었는데 JPA 영속성 객체인 UserEntity와 User라는 POJO 도메인을 따로 분리시켜서 관리하고있다따라서 모든 도메인로직은 외부 의존성이 없는 순수 자바 코드로 구현하고, 영속성은 JPA Entity가 따로 맡아서 관리한다. 그렇게 분리하게되면, Entity 객체 Domian 객체간의 mapping이 필요하다. (나의 경우 PersistenceAdapter에서 UserEntity를 DB에서 로드한후에, Mapper를통해 User 도메인으로 변환시켜서 Service에게 반환한다.) 그런데 여기서 문제가 발생했다. UserEntity에는 OneToMany로 이루어진 관계들이 많았기에, N+1문제가 발생하는것이었다. UserE..
[Spring Boot] Pageable을 이용해 페이지네이션구현(+JPA)
·
Backend/Spring Boot
페이지네이션이란?페이지네이션이란, 게시글이 많을 때 , 이를 전부 보여주지않고 페이지화 시켜서 보여주는것을 의미합니다.보통 적은 규모의 데이터는 , 리소스를  서버에서 클라이언트로 전부 전달해도 성능에 큰 지장이없지만,큰 규모의 데이터를 전달할 때(혹은 트래픽이 많은 서버), 쓸데 없이 모든 리소스를 전달하는 것보다.해당 페이지의 리소스만 전달하는것이 서버 입장에 있어 부담이 덜 하기 때문에 사용합니다.  RESTFUL API로 설계된 서버에서, 페이지네이션을 구현하려면두가지 단계가 필요합니다. 첫번째로, 총 페이지가 몇 페이지인지 클라이언트에게 전달해야합니다. 그래야만이 클라이언트는 이 리소스가 총 몇페이지가 있는지 확인 할 수 있습니다. 또한, 현재 페이지가 몇페이지인지 , 마지막페이지인지 첫번째페이..
[Spring boot] Spring Security + JWT 이용한 로그인 세션 유지
·
Projects/web
로그인을 JWT를 이용해서 구현 + 리액트를 통한 로그인 유지를 하는것이 목표이다. [참고자료]https://youtube.com/playlist?list=PLJkjrxxiBSFCcOjy0AAVGNtIa08VLk1EJ&si=JdZK8QlkZn-bfHRr 스프링 시큐리티 JWTJWT 방식 인증을 위한 스프링 시큐리티 구현 방법 (Spring Security JWT)www.youtube.com    WebSecurityConfig.javapackage com.kjs990114.goodong.config;import com.kjs990114.goodong.jwt.JWTFilter;import com.kjs990114.goodong.jwt.JWTUtil;import com.kjs990114.goodong.jwt..