본문 바로가기

Spring JPA8

[트러블슈팅] JPA의 deleteAll() 대신 IN을 사용한 성능 최적화 📄 Describe작업 대상지금까지 별 생각없이 JPA의 일 대 다 관계, 엔티티들에 관해 JPA의 deleteAll()를 메소드를 사용했었다.하지만, API 테스트 중 로그의 쿼리를 확인하니 관련있는 엔티티 개수만큼 delete 쿼리가 나가는 것을 확인했다. FitTrip의 커뮤니티 서비스 기준 포럼 : 파일 -> 일 : 대 관계애서 포럼 한개를 삭제했을 때 파일의 개수만큼 delete 쿼리가 나간 것이다.이는 만약 한 포럼에 수십, 수백개의 파일이 존재한다면 쿼리 성능에 문제가 있을 수 있겠다는 생각이 들었다. 따라서, 단순하게 JPA의 deleteAll()를 사용하는 것이 아닌 IN을 사용하여 배치 삭제를 해야겠다는 생각이 들었다.  deleteAll() 예시 사진✅ Tasks작업 세부 내용위에서.. 2024. 6. 25.
[QueryDSL] QueryDSL이란? QueryDSL이란? 우선, DSL은 Domain Specific Language의 줄임말이다. 뜻은 특정 영역에 특화된 언어이다. 그렇기 때문에 QueryDSL은 쿼리 생성에 특화된 프레임워크이다. 우리가 QueryDSL를 사용하면 좋은 점이 무엇이 있을까? 그것에 관한 설명을 하기 전에 JPA와 JPQL에 관한 문제점에 대해 잠깐 알아보자. JPA JPA는 객체지향 어플리케이션과 RDBMS 사이의 패러다임 불일치를 해결해주는 역할을 하는 프레임워크이다. JPA 덕분에 우리는 객체지향 관점으로 개발할 수 있게 되고 JPA 프레임워크는 자동으로 SQL 쿼리문을 생성해준다. SQL문이 JPA에 의해 자동으로 생성되기에 개발자는 SQL 관점에서 프로그래밍을 하지 않아도 된다. 하지만, 그렇다하더라도 완전한 .. 2024. 3. 30.
Spring Pagination 연습 이번 포스팅에는 Spring Pagination에 대해 다뤄 볼 것이다. 구글, 네이버 카페, 커뮤니티 등 어떤 웹에서도 페이징 처리가 된 웹 형태를 자주 찾아볼 수 있다. 그렇다면 이렇게 페이징 처리하는 이유가 뭘까? 수많은 데이터가 DB에 존재한다고 했을 때, 페이징 처리를 하지 않고 모든 데이터들을 한 번에 뿌려준다면 해당 데이터들을 DB로부터 가져오는데 엄청난 시간이 소요될 것이다. 또한, 해당 데이터 자체를 들고 있어야 하기에 메모리에도 부담이 클 것이다. 하물며 사용자들이 그 수많은 데이터들을 다 보게 하는 것도 용이하지 못하다. 그래서, 모든 데이터들의 개수에 대한 기준을 만들어 해당 개수만큼 가져오는 페이징 형태를 사용하는 것이다. 페이징 처리를 적절히 활용하여 정렬 기준과 정렬 방식(오름.. 2024. 3. 8.
Spring + Redis + S3 + 이메일 인증 + Docker + CI/CD - 5 이번 글에서는 Order, Item에 관한 CRUD 구현과 관련 통합 테스트를 담은 내용이다. 하지만, 시작하기전에 앞 글에서 수정한 내용이 있다. 1. SecurityConfiguration 수정 주문과 관련된 사항들은 이메일 인증이 된 사용자들이 이용하는게 좋을 것 같다는 생각이 들어 관련하여 적용했다. public class SecurityConfiguration { ... @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{ ... http.authorizeHttpRequests( authorize -> authorize.requestMatchers(EXCLUDE_URL.stream() .map(AntPa.. 2024. 2. 22.