커스텀 Repository — QueryDSL 연동을 위한 확장 패턴
1. 개요 JpaRepository의 메서드 이름 쿼리와 @Query로 해결할 수 없는 경우가 있다. 동적 조건이 많거나, QueryDSL 같은 외부 라이브러리를 써야 하거나, 복잡한 집계 쿼리가 필요한 경우다. 이때 커스텀 Repository 패턴을 사용한다. 이 글에서는 커스텀 Repository의 구조, 명명 규칙, EntityManage...
1. 개요 JpaRepository의 메서드 이름 쿼리와 @Query로 해결할 수 없는 경우가 있다. 동적 조건이 많거나, QueryDSL 같은 외부 라이브러리를 써야 하거나, 복잡한 집계 쿼리가 필요한 경우다. 이때 커스텀 Repository 패턴을 사용한다. 이 글에서는 커스텀 Repository의 구조, 명명 규칙, EntityManage...
1. 개요 엔티티 전체를 조회하면 필요 없는 컬럼까지 DB에서 읽어온다. 목록 조회에서 제목과 가격만 필요한데 SELECT *를 날리는 셈이다. Projection은 필요한 필드만 선택적으로 조회해서 데이터 전송량과 메모리 사용을 줄이는 기법이다. Spring Data JPA는 인터페이스 기반, 클래스(DTO) 기반, 동적 Projection ...
1. 개요 목록 조회에서 전체 데이터를 한 번에 가져오면 메모리가 터진다. 페이징은 이를 조각 단위로 잘라서 가져오는 방식이다. Spring Data JPA는 Pageable, Page, Slice 등의 추상화로 페이징 처리를 단순하게 만들어준다. 이 글에서는 PageRequest 생성 방법, Page와 Slice의 차이, COUNT 쿼리 분리...
1. 개요 메서드 이름 쿼리는 단순 조건에서 강점을 보이지만, 조건이 복잡하거나 JOIN이 필요하면 한계에 부딪힌다. @Query는 JPQL 또는 SQL을 직접 작성해서 이 한계를 극복한다. 이 글에서는 @Query의 기본 사용법, 파라미터 바인딩 방식, 네이티브 쿼리, 그리고 UPDATE/DELETE 벌크 연산 처리까지 다룬다. ...
1. 개요 Spring Data JPA는 메서드 이름을 파싱해서 JPQL을 자동으로 생성한다. findByTitle이라고 선언하면 SELECT b FROM Book b WHERE b.title = :title 쿼리가 만들어진다. 별도 SQL 없이 메서드 선언 하나로 쿼리가 완성되는 구조다. 이 방식을 파생 쿼리(Derived Query) 또는 ...
1. 개요 Spring Data JPA를 쓰다 보면 JpaRepository를 상속하는 인터페이스 하나만 만들어도 저장, 조회, 삭제가 전부 동작한다. 왜 그런지, 내부에서 무슨 일이 벌어지는지 이해하고 있어야 나중에 커스터마이징이나 성능 튜닝을 제대로 할 수 있다. 이 글에서는 Repository 인터페이스 계층 구조, 각 계층이 제공하는 메...
TDD를 처음 배울 때 가장 흔하게 하는 오해가 있다. “테스트 코드를 잘 짜는 방법”이라고 생각하는 것이다. TDD(Test-Driven Development)는 테스트 기법이 아니라 설계 방법론이다. 테스트를 먼저 작성함으로써 코드를 사용하는 입장에서 API를 먼저 설계하게 되고, 이것이 자연스럽게 더 나은 인터페이스로 이어진다. 이 글에서는 S...
Spring Boot 애플리케이션을 만들다 보면 @Configuration, @Value, @ConfigurationProperties 등 설정 관련 어노테이션이 한가득 등장한다. 각각이 무슨 역할인지, 언제 어떤 것을 써야 하는지, 그리고 실제로 값이 주입되는 시점이 언제인지 정리한다. 1. 개요 📌 핵심 원칙 Spring Boot의 설정 ...
1. 개요 MSA 프로젝트에 서비스가 5개라면, application.yml 파일도 5개다. DB 주소가 바뀌거나 Redis 비밀번호가 바뀌면 5개 파일을 모두 수정하고, 서비스를 재배포해야 한다. 서비스가 10개, 20개가 되면 이 작업은 점점 고통스러워진다. Spring Cloud Config Server는 이 문제를 해결하는 중앙화된 설정...
1. 개요 MSA에서는 서비스들이 서로 HTTP 호출로 연결되어 있다. 만약 ai-service가 다운됐는데 recommendation-service가 계속 ai-service를 호출한다면 어떤 일이 벌어질까? 호출 스레드가 타임아웃을 기다리며 쌓이고, 결국 스레드 풀이 고갈되어 recommendation-service까지 죽는다. 이 현상을 ...