[Spring boot] soft delete에서 duplicate entry 문제
·
Trouble Shootings/버그 해결
현재 상황현재 나는 모든 Entry를 soft delete로 구현을 하였다.soft delete를 적용한 이유는, 현재 프로젝트가 3D모델 저장소인 만큼, 삭제 복구 기능이 필요할 것이라고 판단하였기 때문이다.따라서 유저는 삭제(회원 탈퇴, 리포지토리 삭제)를 해도, 물리적 DB에서 해당 튜플이 삭제되는것이아닌,Entry의 delete_at 필드가 갱신된다. 삭제가 되지 않은 entry는 deleted_at IS NULL로 구분하고 있다. 또한, JPA의 Unique Constraints로 {userId,title} 를 설정해 두었다. 이는 유저가 중복된 title의 게시글을 막기위해서인데, 여기서 문제가 발생했다. 문제가 발생한 상황테스트를 하고있었는데, 어느순간 갑자기 duplicate title이 ..
[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를 상속받기..
[Springboot + Redis] 레디스를 이용한 캐싱을 통해 API 성능 개선하기 ( +JMeter)
·
Trouble Shootings/성능 개선
Github를 오마주한 3D model 버전 관리 웹 사이트를 만드는 프로젝트를 하던중 한가지 문제점을 발견했다.유저가 Mypage에 들어갈때마다, 매번  내 정보 (닉네임, 이메일 , 팔로워 수, 팔로잉 수)를 받아오는 API와, 내 리포지토리 리스트를 불러오는 API를 매번 호출하게되어, 응답시간이 매우 느리다는 것이었다. 유저가 새로고침할때마다, API호출을 매번 하게되면 서비스가 성장하여 유저 트래픽이 많아지게되면 DB에 큰 부하가 가게 된다. 따라서 나는 처음에 Spring boot 프레임워크에서 자체적으로 지원하는 Cache 라이브러리를 사용해 , 서버의 로컬 메모리에서 캐싱을 하도록 구현하였다.  결과적으로 응답속도는 매우 빨랐다. 왜냐하면 서버 내부의 메모리에서 다이렉트로 접근하기 때문에,..
[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..