[Spring Data JPA] Offset 기반 Pagination 성능 향상하기 (index 설정, count 쿼리 캐싱)
·
Java & Kotlin/JPA
🧐 들어가기전프로젝트를 진행하면서 Pageable을 활용한 검색 필터링 API를 구현해야 했다. 이 API는 프로젝트의 핵심 자재인 원단을 등록하고 조회할 때 사용되며, 비즈니스 로직의 특성상 원단은 빈번하게 조회해야 하며, 조회 결과를 기반으로 다음 단계의 로직이 수행되기 때문에 조회 성능이 매우 중요한 요소였다. 해당 API는 총 다섯 개의 파라미터를 받는다.page, size, startDate, endDate, 그리고 fabricTypeName이며, 이 중 fabricTypeName만 필수로 입력받고 나머지 값들은 선택적으로 전달된다. JPA Repository에서는 아래와 같이 @Query를 사용하여 JPQL로 조회 조건을 정의하였다: @Query( """ SELECT f F..
[Spring Data JPA] Pageable, Page, Slice 뜯어보기 (JPA에서 Page를 생성하는 내부 동작)
·
Java & Kotlin/JPA
🧐 들어가기전페이스북, 인스타그램, 네이버 카페 등 우리가 자주 사용하는 서비스들에는 공통점이 하나 있다. 바로 모든 데이터를 한 번에 보여주지 않고 필요한 만큼만 잘라서 보여준다는 점이다. 사용자는 현재 보고 있는 데이터를 기준으로 "다음", "이전", 또는 "특정 페이지"를 요청하고 시스템은 이에 맞는 데이터 일부만을 응답한다. 이는 단순히 UX의 문제만은 아니다. 수천, 수만, 수백만 건에 달하는 데이터를 한 번에 응답하는 일은 서버에 큰 부하를 주고 성능 저하나 장애로 이어질 수 있다. 따라서 위 사진처럼 N개의 데이터만 보여주고, 사용자의 요청에 따라 다음 혹은 이전 순번의 N개의 데이터를 볼 수 있게 구현하는 것을 통해 이러한 점을 보완할 수 있다. 하지만, 위와 같은 기능을 구현하기 위해서..
[백준] 1806번 부분합 (투포인터, 슬라이딩 윈도우) - JAVA
·
CodingTest
🧐 문제https://www.acmicpc.net/problem/180610,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오.첫째 줄에 N (10 ≤ N 첫째 줄에 구하고자 하는 최소의 길이를 출력한다. 만일 그러한 합을 만드는 것이 불가능하다면 0을 출력하면 된다.10 15 5 1 3 5 10 7 4 9 2 8🔸완전탐색? →🚨시간초과주어진 수열에서 연속된 부분 수열의 합이 S 이상이 되는 가장 짧은 길이를 구하는 문제이다.이걸 처음 접하면 for문을 중첩해서 사용하는 방식이 제일 먼저 떠오를 것이다.int minLength = Integer.MAX_VALUE;..
[CI/CD] Docker와 Github Actions으로 CI/CD 파이프라인 구축하기
·
CI-CD
🧐 들어가기전최근에 예전에 진행했던 프로젝트를 코프링(Kotlin + Spring) 기반으로 마이그레이션하는 작업을 시작하게 되었다. 당시에는 코드가 수정될 때마다 로컬에서 빌드한 파일을 서버에 수동으로 업로드하고 실행하는 방식으로 배포를 진행했었다.하지만 이런 방식은 코드가 변경될 때마다 매번 수작업으로 빌드 파일을 옮겨야 하는 번거로움이 있었고, DB나 기타 환경 설정들도 서버에 직접 설치하고 구성해야 해서 불편함이 많았다. 그래서 이번에는 이런 불편을 줄이기 위해, Docker와 GitHub Actions를 활용해 코드 변경 시 자동으로 테스트 → 빌드 → 배포가 이루어지는 CI/CD 파이프라인을 구축해보고자 한다. 추가로, 무중단 배포까지 도전해보며 실무에 가까운 배포 환경을 경험해볼 계획이다...
[프로그래머스 알고리즘 고득점 kit] 이분탐색 징검다리 - JAVA
·
CodingTest
🧐 문제출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여있습니다. 바위 중 몇 개를 제거하려고 합니다. 예를 들어, 도착지점이 25만큼 떨어져 있고, 바위가 [2, 14, 11, 21, 17] 지점에 놓여있을 때 바위 2개를 제거하면 출발지점, 도착지점, 바위 간의 거리가 아래와 같습니다.제거한 바위의 위치        각 바위 사이의 거리       거리의 최솟값[21, 17]                         [2, 9, 3, 11]                   2[2, 21]                           [11, 3, 3, 8]                   3[2, 11]                         ..
[MSA] MSA 환경에서 장애 전파를 막기 위한 전략 (Tracing, Circuit Breaker, Rate Limit)
·
Distributed System
🧐 들어가기전모놀리틱 아키텍처에서 벗어나 서비스 단위로 쪼개진 마이크로 서비스 아키텍처에 들어서게 되면 모놀리틱의 단점을 보완할 수 있다. 모놀리틱은 모든 기능이 하나의 application에 집중 되어 있기 때문에 하나의 기능에서 발생한 장애가 서비스 전체로 이어질 여지가 있다. 반면 MSA 환경은 서비스들 간의 독립성이 유지되기에 장애를 격리 시킬 수 있다. 하지만 과연 정말 장애를 격리시킬 수 있을까에 대한 고민을 해봐야한다. 위와 같이 클라이언트가 서비스 A를 통해서 요청과 응답을 받고 서비스 A는 client의 요청을 서비스 B로 전달해 B로부터 온 응답을 client에게 전해준다고 가정하자. 그렇다면 위에서 만약 서비스 B의 장애가 발생하면 어떻게 될까?서비스 B에 장애가 발생한다면 생기는 ..
J_hzlo
'분류 전체보기' 카테고리의 글 목록