Programing/Java & Spring 35

[JPA&QueryDSL] QueryDsl이란 무엇인가?

서론Spring Boot 프로젝트를 개발 및 운영하다보면 MyBatis라는 라이브러리를 사용해서 쿼리를 DB로 요청할 수 있으나 최근 들어서 JPA를 이용하는 서비스가 많아지고 있는 추세이다. 쿼리 운영 유지보수 측면에서 고려해봤을 때 복잡한 쿼리가 많은 경우 Native Query를 활용하지 않고 MyBatis 라이브러리를 사용하는 경우도 종종 있다.JPA에서 제공하는 쿼리 메소드를 사용해도 기본적인 CRUD의 경우 어렵지 않다. 다만 복잡한 쿼리 혹은 요구사항에 따라 JPA에서 제공해주는 인터페이스로 활용이 어려울 경우 QueryDSL을 사용하게 된다.인터페이스로만 구현할 경우 복잡성과 유지보수 측면에서 효율적이지 못함(가독성이 떨어짐) 이에 따라 Spring Boot 프로젝트에 QueryDSL을 함..

[Spring] 정의되지 않은 요청 파라미터에 대한 유효성 검증 및 Jackson 과 @EnableWebMvc의 관계성

회사에서 취약점 개선 개발을 진행하면서 아래의 이슈를 접하게 되었다."정의되지 않은 요청 파라미터에 대해서 유효성 검증 필요" 해당 수정 방안은 ObjectMapper Configuration 설정 방법 혹은 Jackson 설정 방법이 있는데그 중 가장 간단한 방법인 Jackson 설정으로 변경해보려고 한다. 변경 방법1. Application.yml Jackson: deserialization: fail-on.unknown-properties : trueJackSon.deserialization.fail-on.unknown-properties은 Json 역직렬화 시 객체에 정의되지 않은 속성이 들어올 경우UnrecognizedPropertyException 예외를 발생 시키는 설정이다. 2. Appl..

[Spring] QueryDsl 설정 및 Q파일 생성 안되는 이슈 해결(Gradle 8.x 이상 설정 방법)

최근에 Java 17, Spring 3.x 버전으로 개발을 진행하면서..QueryDsl 설정이 안되어 삽질을 좀 했었다. 이에 따라 삽질을 최소화 하기 위해 글을 남겨보려고 함  1. Gradle Version 확인 필요 우선 Gradle Version이 8.x 이상일 경우 아래의 의존성을 추가하면 안된다.id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' 해당 의존성을 추가할 경우 아래의 문구를 만나게 된다.The AbstractCompile.destinationDir property has been deprecated. This is scheduled to be removed in Gradle 9.0. Please use the destinationDi..

[MacOS] OpenJdk 17 -> temurin 17로 변경하기

이번에 팀 프로젝트를 진행하면서, 기존에 OpenJDK를 설치해서 진행했다가, Temurin로 변경이 필요하여 변경하면서..트러블 슈팅을 했던 부분도 한번 기록해보려고 한다.  우선 내가 사용하고 있는 jdk는 openjdk-17을 사용하고 있었다.이에 따라 가장 먼저 openJdk를 제거해야 했다.  1) OpenJDK 제거 방법1.1) uninstall로 수행(실패)brew uninstall adoptopenjdk17uninstall을 했을 때 위와 같이 cask 이슈가 있었음이는 alfred를 설치하면 해결되는 이슈라고 하지만, 이미 설치한 상태였음으로 해당 방식으로 삭제하는건 아니였음 1.2 cask 설치 (이미 설치가 된 상태) brew install cask이미 설치가 완료된 상태로, 해당 문..

[Spring] Utility Class에 대해서는 Static Method로 구성하는 것이 좋을까?

안녕하세요 세기무민입니다. 이번 포스팅은 Utility Class에 대해서 Static Method vs @Component 중 어떻게 구성하는 것이 조금 더 효율적인지에 대해 의견을 정리해보려고 합니다. 서론회사에서 오프라인 코드 리뷰 중 Utility Class에 대해 Static Method가 효율적일지, @Component가 조금 더 효율적일 지 검토를 해보기로 하였고 이에 따라 개인적인 궁금증에 따라 서치를 시작했다. Static Method 말 그대로 정적 매서드로 인스턴스 생성 없이 호출이 가능하다. 주로 Utiility Class와 같이 재사용이 가능한 매서드를 제공하기 위해 사용된다. @Componet 비즈니스, 서비스 로직과 같이 어플리케이션 로직 구현 시 사용되는 어노테이션이며 의존성..