Spring & Spring boot 32

[Spring Boot] 예외 처리 - 3. CustomException 사용하기

1. Custom Exception2. 생성 방법 3. 테스트 [Custom Exception]Exception 을 커스텀하여 사용하는 것에 대해 다양한 의견이 있다.대부분의 상황에 대해 표준 예외로 처리할 수 있는 부분이긴 하지만, 실제 프로젝트를 경험하며 커스텀 Exception 객체를 사용하지 않은 적은 없었다.경험 상 가장 큰 이유는, 에러 메시지를 처리하고 관리하는 방법에 대해, 고객사의 의견이 제각각이기 때문이다.DB 관리, 상수 관리, properties 파일 관리 등 각 요구사항에 맞추다보면 Exception 객체를 커스텀하는 것은 거의 필수였다.또한, 개발 단계에서 발생하는 예외들을 개발자가 직접 관리하고 처리하기 수월해지기 때문에 실무에서 사용하는 것이 좋다고 본다. CustomEx..

[Spring Boot] 예외 처리 - 2. 유효성 검사 Exception 처리

앞서, @Valid 어노테이션과 @Validated 어노테이션을 활용하여 유효성 검사를 수행하는 내용에 대해 포스팅을 작성하였다.해당 내용에 이어, 유효성 검사에 실패했을 경우 Exception 처리를 하는 방법에 대해 알아보자. 관련 포스팅 [Spring Boot] Validation - 1. @Valid 어노테이션 사용방법1. 유효성 검사2. @Valid 어노테이션 테스트3. 유효성 검사 어노테이션 [유효성 검사]애플리케이션의 비즈니스 로직이 올바르게 동작하기 위해, 데이터를 사전 검증하는 유효성 검사 작업이 필요jh4dev.tistory.com  [Spring Boot] Validation - 2. @Validated 어노테이션 사용방법1. @Valid vs @Validated2. @Valid..

[Spring Boot] 예외 처리 - 1. ExceptionHandler 사용하기

1. @ExceptionHandler 2. @RestControllerAdvice / @ControllerAdvice 사용하여 처리하기3. 컨트롤러에서 처리하기 REST API 를 제공하는 애플리케이션 입장에서는, 요청값을 처리하던 중 예외가 발생하면 예외를 복구하여 정상적으로 처리하기 보다는, 요청을 보낸 클라이언트에게 어떤 문제가 발생하였는지를 전달해주는 경우가 많다. 따라서, 각 레이어에서 예외가 발생했을 경우, 발생한 예외를 엔드포인트 레벨인 컨트롤러로 전달해야 하며, 컨트롤러에서 클라이언트로 오류 메시지를 전달하는 방법에 대해 알아보자. Exception 에 대한 내용은, 아래 포스팅을 참고. [JAVA] 예외처리 - Exception 이해하기1. Error & Exception2. Exce..

[Spring Boot] Validation - 4. 커스텀 Validation 설정하기

1. 커스텀 Validation 의 필요성2. 커스텀 Validation 어노테이션 설정3. 테스트 [커스텀 Validation 의 필요성]실제 업무에서 유효성 검사 시, JAVA 나 Spring 에서 어노테이션으로 제공하지 않는 내용을 체크해야할 경우가 있다.좀 더 자세한 케이스를 살펴보자면,같은 검증 로직이 여러 곳에서 반복된다면, 이 로직을 커스텀 어노테이션으로 만들어 코드의 중복을 줄일 수 있다.Ex) 전화번호특정 도메인에만 적용되는 내용이라면 커스텀 어노테이션을 사용하는 것이 좋다.Ex) 계좌번호여러 필드의 값을 조합하여 검증해야하는 경우 커스텀 어노테이션을 사용하는 것이 좋다.Ex) 종료 날짜가 시작 날짜보다 커야한다는 조건[커스텀 Validation 어노테이션 설정]그렇다면, 이러한 ..

[Spring Boot] Validation - 2. @Validated 어노테이션 사용방법

1. @Valid vs @Validated2. @Validated 검증 그룹 지정하기 이전 포스팅에서, JAVA 에서 지원하는 @Valid 어노테이션에 대해 알아보았으며, 이번 포스팅에서는 스프링에서 지원하는 @Validated 어노테이션 사용법에 대해 알아보자.[@Valid vs @Validated]@Validated 는 기본적으로 @Valid 의 기능을 포함하고 있으며, 다음과 같은 차이가 있다.항목@Valid@Validated용도Java Bean Validation을 수행할 때 사용된다. 필드 또는 메서드 파라미터에서 사용된다.Java Bean Validation을 수행하면서 특정 검증 그룹(Group)을 지정할 수 있다.적용 위치필드, 메서드 파라미터, 생성자 파라미터클래스, 메서드 파라미터, ..

[Spring Boot] Validation - 1. @Valid 어노테이션 사용방법

1. 유효성 검사2. @Valid 어노테이션 테스트3. 유효성 검사 어노테이션 [유효성 검사]애플리케이션의 비즈니스 로직이 올바르게 동작하기 위해, 데이터를 사전 검증하는 유효성 검사 작업이 필요하다.유효성 검사란, 각 계층에서 들어오는 데이터에 대해, 의도한 형태대로 값이 들어오는지 체크하는 과정을 말한다. 계층별로 진행하는 유효성 검사의 경우, 검증 로직이 각 계층 클래스 별로 분산되어 있어 관리하기 어렵다는 문제가 있다.또한 유효성 검사 로직 자체가 중복되는 경우가 많아, 불필요한 중복 소스가 발생하며, 검증해야하는 값이 많다면 코드 또한 몇 배로 길어지게 된다. 이런 문제를 해결하기 위해, JAVA 에서는 Bean Validation 이라는 프레임워크를 제공하고 있으며, 스프링 부트에서는 Be..

[Spring Boot] JPA - 8. 연관관계 매핑 (Relation)

1. 개요2. 1 : 1 관계3. 1 : N / N : 1 관계4. N : M 관계 [개요]테이블이 많아지고 설계가 복잡해지는 경우,RDBMS를 사용하고 있다면, 테이블 간의 연관관계를 설정하면, 외래키를 통해 서로 조인하여 참조하는 구조로 사용할 수 있지만,JPA를 사용하는 객체지향 모델링에서는 엔티티 간 참조 방향을 설정할 수 있다.데이터베이스와 관계를 일치시키기 위해 양방향으로 설정해도 무관하나, 단방향 설정을 지향하자.단방향 / 양방향단방향 : 두 엔티티의 관계에서 한쪽의 엔티티만 참조하는 형식양방향 :  두 엔티티의 관계에서 각 엔티티가 서로의 엔티티를 참조하는 형식연관관계를 설정하게되면, 한 테이블에서 다른 테이블의 기본값(ID / PK) 를 외래키로 갖도록 생성된다.이런 관계에서, 외래키를 ..

[Spring Boot] JPA - 7. QueryDSL 사용 방법

앞선 포스팅에서, QueryDSL 을 사용하기 위한 설정 방법에 대해 알아보았다.이번 포스팅에서는, 간단한 테스트 코드를 통해 QueryDSL을 사용하는 방법에 대해 알아보자.1. JPAQuery / JPAQueryFactory2. QuerydslPredicateExecutor3. QuerydslRepositorySupport QueryDSL 설정 방법은 아래 포스팅을 참고 [Spring Boot] JPA - 6. QueryDSL 설정아래 환경에서 QueryDSL을 사용하기 위한 설정 방법에 대해 알아보자.IntelliJSpringboot 2.7.18Maven1. QueryDSL ?2. QueryDSL 설정 방법 (QDomain) [QueryDSL ?]JPQL의 경우, 쿼리 메소드 외에도 @Query 어..

[Spring Boot] JPA - 6. QueryDSL 설정

아래 환경에서 QueryDSL을 사용하기 위한 설정 방법에 대해 알아보자.IntelliJSpringboot 2.7.18Maven1. QueryDSL ?2. QueryDSL 설정 방법 (QDomain) [QueryDSL ?]JPQL의 경우, 쿼리 메소드 외에도 @Query 어노테이션을 사용하여 직접 쿼리를 작성할 수 있으나, 직접 문자열을 입력하기 때문에 컴파일 시점에 에러를 잡지 못하고, 런타임 에러가 발생하여 실제 애플리케이션 배포 후 오류가 발견되는 리스크를 수반한다.QueryDSL 은 이같은 JPQL의 단점을 보완하기 위하여 개발된 라이브러리이다. QueryDSL 은 정적 타입을 사용하여, SQL과 같은 쿼리를 생성할 수 있도록 지원하는 프레임워크이다.문자열이나 XML 파일을 통하여 쿼리를 작성하는..

[Spring Boot] JPA - 5. JPQL Query Method 쿼리 메서드

1. JPQL 쿼리 메서드2. Subject / Predicate Keywords3. Sort / Paging [JPQL 쿼리 메서드]JPQL 은, JPA Query Language 의 약자로, JPA에서 사용할 수 있는 쿼리를 의미한다.JPQL 은 Entity 객체를 대상으로 수행하는 쿼리이기 때문에, 매핑된 엔티티의 이름과 필드의 이름을 사용한다. Repository 는 JpaRepository 를 상속받는 것 만으로도 다양한 기본 쿼리 메서드를 사용할 수 있다.하지만, 기본 메서드의 경우 엔티티의 Id (PK, 식별자) 기반으로 제공되기 때문에, 결국 별도의 메서드를 정의하여 사용하는 경우가 많으며, 이를 '쿼리 메서드' 라고 한다. 쿼리 메서드는, 크게 동작을 결정하는 주제(Subject) 와 ..