⚡ 개요 queryDsl을 사용하면서 데이터를 조회하거나, 조건을 추가할 때 case when 구문을 사용해야 하는 경우가 발생한다. 내부적으로는 이력을 조회하거나, 카운트를 조회 한다거나 조건을 추가하려고 stream의 중간 연산자를 쓰는 것보다 쿼리를 한 번에 날려서 조회하는 게 속도적으로 좀 더 좋다고 판단해서 사용하고 있다. 물론 일반적인 비지니스 로직에서 처리를 할 때는 최대한 사용하지 않는 게 좋다고 생각하기는 하지만 분명 어쩔 수 없는 경우도 있을 것이다. 좋지 않다고 해서 사용을 안 하는 것이 아니라 상황에 맞게 판단해서 사용하는 게 좋다고 생각을 한다. ⚡ case when 사용 방식 정리 일단 가장 기본적으로 queryDsl 에서 caseBuilder를 사용해서 case when 구문을..
Spring

⚡ 개요 spring boot 2.x 버전에 대한 지원이 이번년도를 기점으로 종료가 된다. 이에 따라 새로 나온 3.x 버전으로 내부 프로젝트를 변경을 진행을 해야될거 같아서 라이브러리의 충돌을 방지하기 위해서 신규 프로젝트로 종속성 및 설정등을 진행하고 기존 프로젝트에 적용을 하려고 했으나 시작 부터 에러가 발생한다... ⚡ 이슈 및 설정 관련 내용 정리 spring boot 3.x 버전에 대해서 공식 페이지에 나와있는 설명 및 추가적으로 바뀐 부분에 대해서 확인을 했었지만... 까먹고 설정을 하다가 이슈를 확인 하고 수정을 했다. 검색을 해보니 해당 문제를 접하는 개발자 분들이 많은거 같아서 정리를 해보려고 한다. 📚 개발 스텍 Kotlin JAVA 17 Spring boot 3.1.4 Gradle ..

🤔 사용 이유 우리 회사 프로그램 로직상 서비스가 동작을 하고 프로토콜을 보내는 작업을 하게 된다. 쉽게 프로세스의 흐름에 대해서 설명을 하자면, 사용자가 자산을 구매를 하고 등록을 한다. 이후에 해당 자산을 사용자에게 할당 해주고 회수를 하는 서비스가 존재한다. 이때 자산에 대해서 할당 및 회수를 하게 되는 경우 프로토콜을 서버쪽에 보낸다. 여기서 프로토콜을 서버에 보낼때 프로토콜의 내용이 변경이 되면서 Exception 이 발생하게 되었고, 할당 및 회수도 같이 롤백이 되버리는 이슈가 발생하게 된다. 같은 트랜젝션으로 물려있기 때문에 발생한 이슈로 해당 이슈를 수정하기 위해서 Spring Event 기능을 사용하게 되었다. 프로세스마다 다를수는 있지만 메인 기능의 성공과 서브 기능의 성공은 분리가 되..

⚡ 개요 Spring Boot에서 QueryDsl을 사용하는 방법에는 여러 가지 방법이 존재한다. 내가 가장 많이 사용하는 방식은 queryFactory를 이용하는 방식을 사용한다. 회사에서 개발을 하면서 단일 테이블 기준으로 데이터를 뽑아낼 수 있는 부분이 적고 데이터량이 많다. 이외, 다른 방식들이 있는데 이부분에 대해서 정리를 하면서 잘못 쓰고 있는 부분이 있는지 체크를 해보려고 한다. ⚡ 사용 방법 querydsl을 사용하는 이유부터 생각을 해보자. 만약 spring boot JPA 및 JPQL을 사용해서 쿼리를 구현 한다고 생각해봤을때 단건 조회 또는 적당한 조건에 따른 조회는 크게 문제가 되지 않는다. 하지만 쿼리가 복잡해지고 조건이 많아지는 순간 실수가 발생할 가능성이 존재하고 유지보수에 어..
⚡ 개요 리눅스 운영 서버에서 운영중인 웹 서비스에서 SFTP 접속 관련 이슈가 발생했고, 원인 분석 및 수정을 어떻게 했는지 내용을 정리 하려고 한다. ⚡이슈 및 수정 내용 정리 이슈가 발생 했고 운영 서버의 로그를 확인해본 결과, connection 관련 null 이라는 Exception만 찍히고 있었다. 😭 해당 부분의 로그 설정이 printStackTrace 로 되어 있었고, 이로 인해서 리눅스 환경에서 로그를 찍지 않고 리턴된 값에 대해서만 찍고 있었다. 물론 개발 서버에서 SFTP 관련 테스트 및 로그 보강등 추가적인 작업을 했지만 운영 서버에 반영을 할 수 없는 상황이라서 connection 관련해서 null이 반환 되는지 찾아보고 처리하는 방법 밖에 없었다. 내부에서는 JAVA에서 SFTP..

⚡ 개요 기본적으로 QueryDsl을 사용할때 QClass가 생성이 된다. 초기에 QueryDSL을 사용하면서 궁금했던 내용은 그냥 Entity를 사용해도 될거같은데 굳이 QClass를 만들어서 사용을 할까? 어떻게 만드는거지? 라는 기본적인 궁금증에서 래퍼런스 문서 부터 많은 블로그의 내용을 찾아봤으며 해당 내용을 정리 해보려고 한다. JPA_APT(JPAAnnotationProcessorTool)가 @Enttiy 와 같은 특정 어노테이션을 찾고 해당 클래스를 분석해서 QClass를 만들어 준다. 빌드 도구를 통해서 만드는 방법은 다른곳을 찾아봐도 나오니 생략한다. (Gradle의 경우, 버전별로 설정을 하는 방식이 다르기 때문에 버전에 맞게 잘 찾아서 사용 해야 한다.) ✋ APT 란 ? Annota..

⚡ 개요 래거시 APP 기준으로 신규 개발을 해야 되는 내용이 있어서 이미 쿼리가 다 짜져 있기 때문에 JPA가 아닌 mybatis를 사용해서 신규 개발을 했던 내용을 정리해놓으려고 한다. (신규로 구축하려니까 생각보다 헤맴..) 내용 중 기본적인 내용과 다른 부분이 있다면 DB를 두 개를 사용해서 연동이 들어갔다는 점이다. (mssql, oracle) ⚡ 기술 스택 Spring Boot 3.0.5 JAVA 17 MSSQL Oracle Mybatis ⚡ 사용 방법 정리 전반적인 사용 방법에 대해서 정리하기보다는 내가 좀 버벅거렸던 부분에 대해서 사용 방법을 정리하고 넘어가려고 한다. DatabaseConfig 설정 데이터 베이스를 관리할 때 Hikari Datasource (2.0부터는HikariCP가 ..

⚡ 개요 spring boot를 사용하면서 기본적인 yml 설정 파일이 존재하고, 프로파일 설정을 하게 되면 프로파일 설정된 값이 우선으로 설정이 된다는것도 협업을 하면서 알고 있었다. 그렇다면 신규 구축 및 서로 다른 설정을 할때 우선순위가 어떻게 되는지 궁금해서 정리를 해보려고 한다. ⚡ 우선 순위 내용 정리 Spring Boot에서는 여러 개의 YAML 파일을 사용하여 애플리케이션 구성을 관리할 수 있다. 이러한 파일은 다음과 같은 우선순위를 가지고 있다. 기본 값 (default) Spring Boot에는 application.yml 또는 application.properties 파일이 기본값으로 제공된다. 이 파일은 다른 구성 파일에 정의되지 않은 모든 구성 속성을 가지고 있다. 프로파일별 값 ..

이번에는 좀 가벼운 내용으로 쉬어가려고 한다...😅😅😅 개발을 진행 하다 보니 지루함도 느끼고 개발이 하기 싫을때가 있다. 그럴때마다 리프레쉬를 하기 위해서 여러 좋은 글들을 읽거나 재미있는것을 찾아 보곤 한다. 그러던 도중 매일 보는 콘솔에 찍히는 기본 배너는 어떻게 나오며 어떻게 변경하지??? 라는 생각을 하게 되었고 배너를 변경하는 법을 찾아보게 되었다. ⚡배너를 변경하는 방법 Spring Boot 에서 배너를 변경하고 싶다면 src/main/resources 폴더에 banner.txt 파일을 작성하게 되면 해당 텍스트를 배너로 표현을 해줍니다. (매우 간단😤) 테스트용으로 아래의 참조 사이트를 이용해서 만들어본 배너 이다. (😁😁) ⚡참조 사이트 배너 생성 사이트 Spring Boot banner..