전체 글

하다보니 재미있는 AI에 빠져있는 평양냉면7 문의사항: ysoil8811@gmail.com
JPA를 사용하여 페이징 처리를 할 때 Slice와 Page 두 가지 방법이 있다. SliceJPA와 QueryDSL을 사용하여 페이징 처리를 할 때 Slice를 반환하는 방법은 전체 결과의 개수를 쿼리하지 않아도 되는 특별한 접근 방식이다. 이 방식은 페이징 처리 시 필요한 데이터의 일부만 로드하면서 다음 페이지가 존재하는지 여부만을 알려주는 방법이다. 즉, 사용자가 요청한 페이지와 그다음 페이지의 데이터만 조회하여 현재 페이지 다음에 데이터가 더 있는지 여부를 판단한다.  Slice의 동작 방식Slice는 페이징 처리된 데이터 목록과 함께 다음 페이지의 존재 여부를 알려주는 방식으로, 전체 데이터의 수를 계산하지 않기 때문에 count 쿼리를 실행할 필요가 없다. 이는 특히 대용량 데이터를 다룰 때 ..
@Builder 어노테이션Spring Boot와 Lombok 라이브러리를 활용할 때 @Builder 어노테이션은 객체 생성 과정을 간소화하고, 더 유연하고 안정적인 코드를 작성할 수 있도록 돕는다. 이 어노테이션은 크게 두 가지 방식으로 사용될 수 있다: 클래스 전체에 적용하는 방식과 클래스 내부의 특정 메서드에 적용하는 방식이다. 이 두 방식은 객체 생성의 유연성과 사용 목적에서 차이를 보인다.  클래스 전체에 @Builder 선언클래스 레벨에 @Builder를 선언하면, 해당 클래스의 모든 필드를 포함하는 빌더 클래스가 자동으로 생성된다. 이 방식은 클래스의 모든 필드를 빌더 패턴을 통해 설정할 수 있도록 하며, 불변 객체 패턴(Immutable Object Pattern)을 구현하기 위해 주로 사용..
📌 서론QueryRepository로 커스텀 레파지토리를 생성하고 @DataJpaTest로 테스트를 진행하려고 보니까 해당 Repository의 빈을 찾아오지 못하는 이슈가 발생했다. 이 이슈를 해결하면서 놓쳤던 부분을 다시한번 정리해보려고 한다. QueryDLS란?QueryDSL은 Java 어플리케이션에서 타입 안전성을 보장하는 동시에 복잡한 쿼리를 간결하게 작성할 수 있게 해주는 프레임워크다.특히, 스프링 부트와 함께 사용할 때, 데이터 접근 로직을 구현하는 방법에는 크게 두 가지 접근 방식이 있다: 기존의 custom interface 방식과 단독 빈으로 등록하는 QueryRepository 방식이다. 이 두 방식은 각각의 장단점을 가지며, 사용하는 컨텍스트에 따라 선택이 달라질 수 있다. 이번 ..
에러 발생MSSQL을 사용하면서 JPA와 QueryDSL을 활용하여 페이징 처리를 하다가 첫 페이지 조회 할때는 TOP 쿼리를 사용하여 데이터를 성공적으로 가져오지만, 두 번째 페이지부터는 OFFSET을 사용해야 하는데 이때 OFFSET이 존재하지 않는다는 에러가 발생했다.  에러 로그에러 로그는 다음과 같다. [12:27:08.181][DEBUG] org.springframework.orm.jpa.JpaTransactionManager[doCleanupAfterCompletion:648] - Closing JPA EntityManager [SessionImpl(1815722544)] after transaction [12:27:08.181][INFO ] org.springframework.test.c..
📌 서론Java의 JPA에서 복합키를 관리하는 방법에는 주로 @Embeddable, @EmbeddedId 어노테이션을 사용한다. 복합 키, 즉 복수의 필드로 구성된 기본 키를 사용하는 경우에 이러한 어노테이션을 활용하여 테이블의 기본 키를 엔티티에서 표현할 수 있다.이번 글에서는 @Embeddable과 @EmbeddedId에 대해서 알아보자 @Embeddable과 @EmbeddedId의 역할@Embeddable복합 키를 정의할 때 사용하는 어노테이션. 이 어노테이션을 사용하여 클래스를 정의하면, 해당 클래스는 다른 엔티티에서 임베디드 타입으로 사용될 수 있다. 복합 키 클래스 자체는 어떠한 생명주기도 갖지 않으며, 단지 엔티티의 일부로서 기능한다. @EmbeddedId 엔티티에서 복합 키를 사용할 때,..
코틀린과 스프링 부트 3에서 DynamoDB 항목 추가하기 📌 서론 이전 글에서 DynamoDB에 테이블을 생성했고 항목을 추가해 봤다. 이제 스프링 부트에서 DynamoDB를 연동해서 스프링 부트 코드에서 DynamoDB 테이블에 항목을 추가해 보자 dependencies 추가 코틀린과 DynamoDB와 연동하려면 일단 디펜던시가 필요하다. 나는 아래 링크에서 디펜던시를 가져왔다. https://central.sonatype.com/artifact/aws.sdk.kotlin/dynamodb Maven Central: aws.sdk.kotlin:dynamodb Discover dynamodb in the aws.sdk.kotlin namespace. Explore metadata, contributors..
코루틴과 suspend로 간단한 비동기 처리 📌 서론 이 글에서는 코루틴과 suspend 함수를 사용하여 복잡한 비동기 작업을 간단하게 처리하는 방법을 정리해보려고 한다. 코루틴(Coroutines) 기본 코루틴은 비동기 프로그래밍을 단순화하는 코틀린의 기능으로, 비동기 작업을 동기 작업처럼 쉽게 작성할 수 있게 해 준다. 코루틴을 사용하면, 복잡한 콜백(callbacks)이나 별도의 스레드 관리 없이 비동기 코드를 작성할 수 있다. 비동기 프로그래밍을 단순화하는 코틀린의 기능으로, 경량 스레드(lightweight threads)라고도 불린다. 그리고 비동기 작업을 동기 작업처럼 쉽게 작성할 수 있게 해준다. 코루틴을 사용하면, 복잡한 콜백(callbacks)이나 별도의 스레드 관리 없이 비동기 코드를..
· AWS
DynamoDB 테이블 생성하기 서론 알림 서버에서 사용할 닉네임 관련 테이블을 DynamoDB를 이용해 생성해 보자. RDB로 치면 member_nickname 테이블에 Long member_id(pk), Varchar nickname로 컬럼 두 개인 테이블인데 이것과 비슷하게 DynamoDB에서 테이블을 생성해 보자 DynamoDB 기본 개념 1. 테이블 이름 테이블 이름은 테이블을 고유하게 식별하는 이름이다. 내가 만들 테이블은 멤버의 ID와 닉네임을 저장하는 용도로 member_nickname라는 이름을 사용할 것이다. 2. 기본 키 기본 키는 DynamoDB의 각 항목을 고유하게 식별하는 데 사용되는 키다. 기본 키는 파티션 키만으로 구성되거나, 파티션 키와 정렬 키의 조합으로 구성될 수 있다...
평양냉면7
하다보니 재미있는 AI