본문 바로가기

전체 글

(35)
Fetch Join 사용할때 Paging 처리 옵션 Hibernate (Spring Data JPA)에서 fetch join을 사용할 때 페이징 처리와 관련된 문제를 해결하기 위해 fail_on_pagination_over_collection_fetch fail_on_pagination_over_collection_fetch 옵션을 사용하는 방법이 있다고 합니다.  내용1. Fetch Join과 페이징 처리의 문제fetch join을 사용하면 관련된 엔티티들을 한 번에 가져오므로 N+1 문제를 해결할 수 있습니다. 하지만, 페이징 처리할 때 문제가 발생할 수 있습니다.페이징을 적용할 때, fetch join을 사용하면 페이징이 전혀 적용되지 않고, 조건에 맞는 모든 데이터를 한 번에 가져와 메모리에 적재하고, 그 후에 메모리에서 페이징을 처리하게 됩니다...
[Vault] Spring Cloud Config Vault 연동, secrets 환경변수 관리하기 추후 내용 추가 예정..
Github actions, AWS Codedeploy, Docker blue/green 무중단 배포 name: Spring Boot CI/CD with Gradleon: push: branches: [ "master" ] pull_request: branches: [ "master" ]jobs: build: runs-on: ubuntu-latest permissions: contents: read steps: - uses: actions/checkout@v4 - name: Set up JDK 21 uses: actions/setup-java@v3 with: java-version: '21' distribution: 'temurin' # Gradle Build를 위한 권한 부여 - name: Gran..
Java Arrays.sort(), Collection.sort() 정렬 알고리즘 Java 에서 기본 배열 정렬 Arrays.sort() 는 Dual-Pivot Quicksort 알고리즘 즉 pivot 두 개를 사용해 배열을 세 구역으로 나누어 퀵정렬의 성능을 개선한 알고리즘을 사용하고 있습니다.  Collections.sort() 는 TimSort 알고리즘 즉 실제 데이터에서 효율적인 Merge Sort와 Insertion Sort의 하이브리드 알고리즘을 사용하고 있습니다.       먼저 각 sort 방식에 대한 시간 복잡도를 따져보겠습니다. 1. Bubble Sort, Insertion Sort: O(n²) (느린 알고리즘)이들 알고리즘은 배열 내에서 모든 요소를 비교하고 자리를 교환하는 방식으로 작동합니다.Bubble Sort:배열의 각 요소를 차례대로 비교하면서, 더 큰 값이..
마이크로서비스 간 트랜잭션 Saga 패턴 상황(Context)서비스별 데이터베이스 패턴(Database per Service pattern)을 적용한 상황에서 각 서비스는 고유한 데이터베이스를 가지고 있습니다. 그러나 일부 비즈니스 트랜잭션은 여러 서비스에 걸쳐 일어나므로, 서비스 간 트랜잭션을 구현할 수 있는 메커니즘이 필요합니다. 예를 들어, 고객의 신용 한도가 있는 전자 상거래 스토어를 구축한다고 가정해 보면 애플리케이션은 새로운 주문이 고객의 신용 한도를 초과하지 않도록 보장해야 합니다. 하지만 주문 서비스와 고객 서비스는 서로 다른 데이터베이스를 사용하고 있으므로, 단순히 local ACID Transaction 을 사용할 수 없습니다. 문제 (Problem)서비스 간에 걸쳐 있는 트랜잭션을 어떻게 구현할 수 있을까요? 제약 조건 (F..
@FunctionalInterface 사용기 page 와 size 옵션에 따라 count 쿼리가 실행될때도 있고 아닐때도 있어서 PageableExecutionUtils 추상 클래스를 더 자세히 살펴보게 되었습니다. package org.springframework.data.support;public abstract class PageableExecutionUtils { private PageableExecutionUtils() { } public static Page getPage(List content, Pageable pageable, LongSupplier totalSupplier) { Assert.notNull(content, "Content must not be null"); Assert.not..
Kafka Partition 과 Consumer Group 테스트 코드로 알아보기 개요 기존에 진행되었던 프로젝트에서 채팅방에서 팀원들의 대화가 모두 끝난 후 알림을 보내는 역할을 Kafka 를 통해 수행하고 있었습니다. Partition 을 여러개 두고 있었고 Consumer Group 에서 conusmer 가 추가되면 처리가 완료된 지점부터 consume 을 할지에 대한 의문이 들어 test code 로 직접 확인해보기로 하였습니다.   Consumer Group Kafka 에는 Consumer Group 이라는 개념이 존재합니다. 여러개의 Consumer 들을 하나의 Group 으로 묶어서 메세지를 처리하는 방법을 의미합니다. Consumer Group 은 단순하게 Consumer 의 갯수를 늘린것이 아닙니다. Consumer Group 은 single logical consum..
Java 시간 유형에 대한 고민 개요 채팅방에 24 시간 내에 입장 기록이 있으면 (redis 캐시에 해당 key 값이 있는지 여부) 사용자에게 주어지는 질문 리스트의 알고리즘을 달리 해야 하는 로직에서 사용된 isWithin24Hours 메소드 입니다. 저는 현재System.currentTimeMillis() 를 사용하고 있지만 LocalDateTime.now().minusDays(1) LocalDateTime 은 minusDays 로 측정 가능하기 때문에 Java 날짜 시간 유형에 각각 어떤 차이가 있는지 어떤 class 를 사용하는 것이 적합할지 궁금해졌습니다.  타임존이란?타임존은 동일한 로컬 시간을 따르는 지역을 의미하며, 주로 해당 국가에 의해 법적으로 지정된다. 보통 국가별로 각자의 고유한 타임존을 사용하고 있으며, 미국이..