유저 권한에 따라 모든 쿼리에 조회조건이 추가되야 하는 경우가 생겼다.예를 들면 '본인 소속 데이터만 조회해야 하는 권한자 일 경우' 매 쿼리마다 유저권한을 체크해서유저 부서와 쿼리 데이터를 비교하는 조건절을 추가해야 하는 상황이 생겼다. 제네릭하게 구현해보려다가PathBuilder 를 사용해서 모든 엔티티를 비교하는 메소드를 작성하였다. PathBuilder 란? QueryDSL 에서 제공하는 유연한 클래스이며,엔티티의 QClass를 직접 사용하는 대신, 동적으로 엔티티의 속성에 접근할 수 있는 클래스이다.동적으로 생성된 엔티티나 필드를 다룰때 유용하다. PathBuilder 의 특징이라면QClass 없이 엔티티에 접근가능하고제네릭 메소드와 함께 사용하여 런타임 오류를 방지하고특정 엔티티..
이번에 poi 라이브러리 버전으로 이슈를 겪어 남겨본다. 내부에 ibSheet8 이라는 그리드를 사용하는데해당기능에서 엑셀다운로드 기능이 포함되어 있어 사용하게 되었다. ibsheet 측 개발문서에 보면poi 3.13 버전과 poi4.1.2 버전에 대해 구분을 지어놓았다. 당연히 나는 poi 3 버전은 보안취약점이 존재하는 버전이라자연스럽게 4.1.2 를 채택하여 디펜던시를 추가하였다.(애초에 인텔리제이에서도 4.1.1 이상으로 업데이트 하라고 표기됨...) 인텔리제이에서 개발하고 테스트할때 까지는 문제가 없었다. 동작을 아주 잘 했기 때문.허나 운영에 배포하자 엑셀 스타일이 적용이 안되는 것을 확인하였다. 처음엔 엑셀 요청자체가 Response 200 으로 응답되서 오류가 없는줄 알았느나로그열..
게시글을 올리고 삭제했을때,데이터를 완전 삭제해버리는 Hard Delete 방식과데이터를 남기는 Soft Delete 방식이 존재한다. 어떻게 운영하냐에 따라서 각각의 방식을 사용할 수 있다. 사내 백오피스를 리뉴얼하면서 레거시를 보니어떤 메뉴는 Hard 방식 어떤메뉴는 Soft 방식을 혼용하고 있었다. 그래서 동일하게 가져가기 위해 모든 메뉴의 삭제기능을 soft 방식으로 가져가려고 한다. JPA 엔티티에 @SQLDelete 어노테이션을 사용하여Delete 명령시 Update로 삭제유무 컬럼을 조정하게 해줄 수 있다. 적용한 엔티티는 아래와 같다.@Entity@Table(name="sample")@SQLDelete(sql = "UPDATE sample SET DELETE_YN = '..
매번 같은 형태의 데이터를 각 메뉴마다 지속적으로 사용한다면큰 부하는 아니지만 DB에 수시로 접근하여 조회를 해와야 한다. 여기서 복잡도가 올라가게 되고 조회해오는 항목들이 방대해지면 이제 점차적으로 DB에 부하를 야기하게 될 것이다. 그래서 반복 호출 되는 이러한 것들을 기존에 사용하고 있는 Redis 활용하여 cache 로 사용하고자 한다. 심플하게 한번 적용해보자Redis data 를 build.gradle 에 추가한다.implementation 'org.springframework.boot:spring-boot-starter-data-redis' application 프로퍼티에 redis 를 설정한다(필자는 기존에 redis session을 사용하고 있어서 되어있었다.)spr..
금일 배포를 하는데 젠킨스에서 빌드 fail 을 내뱉었다. * What went wrong:A problem occurred configuring root project 'project'.> Could not open cp_proj generic class cache for build file '/var/lib/jenkins/workspace/project/build.gradle' (/var/lib/jenkins/.gradle/caches/7.6/scripts/w8d24ftp5l9i4txysv06y888). > BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major ver..
테스트파일을 작성하여 기능을 구현하였으나추후에 기능이 변경되거나 삭제될 경우빌드 시 해당 테스트파일에서 오류를 뿜어낸다. 테스트파일을 변경하는게 맞지만 간혹 잊혀진 녀석들이 발견되기도 하기 때문에빌드시에 테스트파일만 무시하도록 설정해놓고자 한다. 방법은 여러가지가 있는데프로젝트 자체의 테스트 빌드를 무시하는 방법.gradle 의 테스트 제외하는 빌드를 만드는 방법. * build.gradle 에 선언하여 모든 빌드에서 해당 task 를 제외하는 방법tasks.named('compileTestJava') { enabled = false} * gradle 특정빌드에 task 제외하는 방법# intelliJ gradle build; Edit Configuration 에서 설정buil..