DEV/Spring

DEV/Spring

[Spring] GlobalExceptionHandler 만들기 (with. Kotlin)

0.  개요 전역 예외처리에 관한 핸들러를 만들어서 관리하는 기능을 코틀린 베이스로 만들려 한다.이전 RestControllerAdvice, ControllerAdvice 포스팅하면서 말했던 내용을 베이스로 하기 때문에 조금 더 상세한 내용은 아래 링크 참고 바란다. * 이전 포스팅2023.07.12 - [DEV/Spring] - [Spring] Exception Handler (with. Spring Data Rest) 1. 구현구현하고자 하는 코드 구성은 아래와 같다.Class (or File)DescriptionErrorCode에러 정의를 담은 Enum 클래스.DomainException예외 클래스, RuntimeException 상속.GlobalRestExceptionHandler예외를 클래스 별..

DEV/Spring

[Spring] Slack 메세지 Custom Annotation 만들기

1. 개요 토비님의 스프링부트 강의를 보고 자주 쓸만한게 있다면 커스텀 어노테이션을 만들어보자 생각이 들어서 간단하게 슬랙 메세지를 보내는 기능을 만들어보기로 했습니다. 이번 포스팅에서는 따로 개념적인 부분을 크게 언급하지 않고 어떤 흐름으로 작업했는지에 대한 내용이므로 주요 키워드는 Annotation, AOP, Async, DI 이니 따로 해당 개념을 어느정도 보시고 이 포스팅을 보시면 편하실거라 생각됩니다. 2. Slack Bot Part 이 기능에서는 코드 작업 외에 슬랙 메세지를 작성해줄 봇이 필요합니다. 그렇기에 먼저 Slack Bot 을 만드는 내용을 다루기에 이미 가지고 계시다면 아래 3번 부분으로 넘어가주세요. a. Create App(Bot) 먼저 slack api 사이트에 접속하고 우..

DEV/Spring

[JPA] QueryDSL 페이징 적용

0. 관련 포스팅QueryDSL 설정하기QueryDSL DTO 반환 방법QueryDSL 동적 쿼리 적용QueryDSL 사용자 정의 레포지토리 적용QueryDSL 페이징 적용  1. 개요QueryDSL에서 JPA Pageable 객체를 받아 페이징하는 부분에 대한 정리 내용이다.  2. 구현이번 포스팅에서는 아래 3가지 메소드에 대한 구현체를 작성해 볼 예정이다. searchPageSimple() : 기본 사용 방법searchPageComplex() : 카운트 쿼리 별도 설정 방법searchPageOptimization() : 별도 쿼리 및 PageExecutionUtils 를 이용한 Page 객체 반환 방법  구현체는 이전 포스팅에서 만든 MemberRepositoryImpl 클래스에 만들었고Member..

DEV/Spring

[JPA] QueryDSL 사용자 정의 레포지토리 적용

0. 관련 포스팅QueryDSL 설정하기QueryDSL DTO 반환 방법QueryDSL 동적 쿼리 적용QueryDSL 사용자 정의 레포지토리 적용 QueryDSL 페이징 적용 1. 개요기존 JPA Repository에 연결하여 별도의 클래스에 QueryDSL 구현체 클래스를 구성하고 JPA Repository 인터페이스에서 호출하여 사용하는 방식에 대한 포스팅이다.(꼭 QueryDSL이 아니더라도 다른 라이브러리 사용에도 적용가능한 기능이다.) 하나의 Repository 를 호출해서 사용하기에 여러 클래스를 호출하지 않아서 좋긴 하지만별도로 연결에 필요한 인터페이스를 구성해야하고 구현체의 클래스 명 규칙을 지켜야한다는 점이 있다. '필수로 구성해야한다기 보다는 하나의 방식으로 봐주면 좋을 듯 하다.'  ..

DEV/Spring

[JPA] QueryDSL 동적 쿼리 적용

0. 관련 포스팅QueryDSL 설정하기QueryDSL DTO 반환 방법QueryDSL 동적 쿼리 적용 QueryDSL 사용자 정의 레포지토리 적용QueryDSL 페이징 적용 1. 개요QueryDSL 동적 쿼리 생성 시,BooleanBuilder, Where Parameter 사용 방법에 대해 공부한 내용을 정리한 글이다. 해당 포스팅은 김영한님의 QueryDSL 강의를 보고 작성된 내용이나추가적인 공부 내용과 견해가 일부 들어가 있으니 틀린 댓글은 언제나 환영! 2. 구현a. BooleanBuilderBooleanBuilder의 경우,우리가 where 문에 적용하고자 하는 조건을 BooleanBuilder 객체에 적용 후 사용하는 방법이다.@DisplayName("Boolean Builder로 동적 쿼..

DEV/Spring

[JPA] QueryDSL DTO 반환 방법

0. 관련 포스팅QueryDSL 설정하기QueryDSL DTO 반환 방법 QueryDSL 동적 쿼리 적용QueryDSL 사용자 정의 레포지토리 적용QueryDSL 페이징 적용 1. 개요JPA나 JPA Repository, QueryDSL 등 어떤 조회를 하든 DTO 로 반환해야하는 경우가 발생할 수 있다.QueryDSL 로 DTO를 반환할 때 사용하는 방법에 대한 글이다. (해당 포스팅은 김영한 님의 QueryDSL 강의를 보고 검색한 내용과 함께 정리한 글입니다.) 2. 구현구현 방법에는프로퍼티 접근필드 직접 접근생성자 사용@QueryProjection 사용방법이 있다. DTO 반환 시,기본 생성자로 먼저 객체 생성으로 객체를 만들기 때문에 만들어주어야한다.(생성자 사용이나, @QueryProject..

DEV/Spring

[JPA] QueryDSL 설정하기

0. 관련 포스팅QueryDSL 설정하기 QueryDSL DTO 반환 방법QueryDSL 동적 쿼리 적용QueryDSL 사용자 정의 레포지토리 적용QueryDSL 페이징 적용 1. 개요QueryDSL 설정하면서 생겼던 오류와 해결 방법에 대해서 적은 포스팅이다. QueryDSL에 대한 설명은 따로 정리할 생각이고SpringBoot 2.6, 3.0 버전으로 바뀌면서 생겼던 부분에 대한 내용이다.   현재 기준(23.10.16) QueryDSL 은 5.0 버전이 최신이고,Java 8 이상 부터 작동한다. (이전 버전의 경우 4.x 버전의 QueryDSL을 사용하면 된다.)  2. build.gradle아래 gradle 파일은 필요 외 설정은 빼두었으니 QueryDSL에 해당하는 부분만 옮겨 적으면 된다.bu..

DEV/Spring

[JPA] JoinColumns 조회 방식

1. 개요JPA 공부 중에 @JoinColumns 어노테이션의 조회 방식에 대해 궁금해졌다. 실제 데이터베이스에서는 Join 관계를 나타내기 위한 컬럼이기 때문에 해당 컬럼들이 들어갈텐데FetchType.Lazy 상태에서 엔티티 조회를 진행할까? 에 대한 궁금중이 생겼다.  2. 구현테스트를 하기 위한 코드는간단하게 Member(멤버)와 Info(멤버와 연관된 정보)로 구성하였고Member : Info = 1 : N 관계이다. a. Datadummy 컬럼은 테스트상 넣었기 때문에 없어도 무방한 컬럼이다.  b. EntityMember@Entity@Table(name = "MEMBER")@NoArgsConstructor@Getterpublic class Member { @Id @Generated..

DEV/Spring

[JPA] Fetch Join 활용

0. 관련 포스팅[JPA] Fetch Join  1. 개요이전 포스팅에서~ToOne에 Fetch Join,~ToMany의 경우 한 개의 연관 관계에만 사용하는 것이 좋다고 언급하였다.그렇다면 '어떻게 연관 관계에 있는 Entity를 함께 조회하는게 좋을까?' 에 대한 것을 정리해보고 연관관계에 있는 Entity를모두 Fetch Join 하는 경우와 ~ToOne 만 Fetch Join 하는 경우를 비교해보는 포스팅이다.  2. 구현a. Comment 이전 포스팅에서의 도메인 관계에 Comment(댓글) 라는 Entity를 추가하였다. 연관 관계의 형태는Member : Comment (1:N)Board : Comment (1:N)Member : Board (1:N)관계를 띠고있고, Comment 클래스는 아..

DEV/Spring

[JPA] Fetch Join

0. 관련 포스팅[JPA] Fetch Join 활용  1. 개요JPA 를 활용한 개발 중에 @ManyToOne, @OneToMany, @OneToOne 등으로연관된 경우 Entity를 같이 조회해야하는 경우가 발생한다. 이때 Fetch Join을 사용하지 않고 연관 Entity를 사용하게 되면 N+1 문제가 발생한다. a. N + 1 문제란?JPA에서는 영속성 컨텍스트라는 말이 자주 나온다.데이터 베이스에서 데이터를 불러오면 1차 캐시에 저장이 되면서 영속성을 가진다 하는데,이 상태에서는 변경 감지나 동일성 보장, 트랜잭션 내 쓰기지연 등의 기능을 제공하게 된다.  이때 지연 로딩 기능에 대해서도 나오는데,지연 로딩은 연관된 Entity를 바로 조회하지 않고 사용 시에 조회하는 기능이다. 그렇기 때문에 ..

l-eazzy
'DEV/Spring' 카테고리의 글 목록