Spring

· Spring
⚡ 개요DB에서 테이블 생성할 때 Default 값을 설정했지만 값이 null로 들어가 있는 상황이 발생을 하게 되었고 기본값을 사용하는 과정에서 NPE 발생하게 되었다. 이에 따른 내용을 정리하려고 한다. 내부 로직에서 저장하는 부분을 찾아보니 repository에서 save() 함수를 통해서 저장을 하고 있었다. Entity에서도 Default을 설정 했는데 왜 기본값으로 저장이 안 되고 null로 저장이 되는지 한번 알아보자. ⚡ 내용  Entity 일부코드를 살펴보면 @colunmDefault() 어노테이션을 사용해서 기본값을 설정한 부분을 볼 수 있다. nullable은 설정하지 않았기 때문에 실제 DB에 값은 null로 들어갈 수도 있었다.   @colunmDefault() 에 대해서 문서를 ..
· Spring
⚡ 내용속도적인 이슈로 인해서 일부 queryFactory를 사용하는 부분을 SQLQueryFactory로 변경을 했다.이때 조회 방식은 동일하지만 내부 구현체가 좀 달라서 그런지 LocalDate 타입으로 반환하는 결과값이 이상하게 나오는 부분이 있어서 정리를 하려고 한다.⚡ 이슈 정리나는 오늘 날짜를 기준으로 데이터를 조회 했지만 하루전 데이터가 나와서 데이터가 꼬이는 부분이 발생을 했다.실제 결과 값에 대한 디버그를 해보니 하루전 데이터가 나오고 있었다. 최근에 변경한 부분이 queryFactory 를 sqlQueryFactory로 변경한 부분이 있어서 실제 결과 값을 만드는 부분에 대해서 클래스 내용을 확인 해보니 반환하는 부분에서 좀 이상한 부분이 있어서 공유를 하려고 한다. 아래의 이미지는 실..
· Spring
📑 개요지난번에 작성했던 블로그의 내용은 완전 기초적인 내용 및 설정에 대해서 설명을 했다면 이번에는 세부적으로 샘플 코드를 작업하면서 나온 내용에 대해서 정리를 하고 작업 간에 했던 생각을 적어 보려고 한다. :) 📕 구조BackEnd내가 이번 프로젝트에서 잡은 구조는 도메인 구조이다. 계층형 구조와 도메인 구조에 대해서 비교를 하는 블로그들을 많이 보았다.내용을 살펴보면 알겠지만 정답은 없다. 장단점에 따라서 프로젝트에 맞는 구조를 사용해서 개발을 진행하면 된다. (유지보수를 위해서라도) 본론으로 돌아와서 도메인 구조를 잡은 이유에 대해서 설명하도록 하겠다.패키지별 분리를 했을때 내용을 파악하는데 더 쉽다고 판단프로젝트 개발간에 기획이 변경되는 상황이 많이 발생하는데 이때 유리하다고 판단확장성을 ..
· Spring
📑 개요신규 프로젝트 작업을 해야 하는 상황이 있어서 이번 기회에 spring boot, kotlin과 vue 최신 버전을 기준으로 초기 세팅 작업을 했고 이 과정을 기록하려고 한다. 버전에 따라 없어진 내용도 존재하고, 추가된 내용도 존재하니 체크를 해보는 게 좋을 거 같다. 아래의 이미지는 이번에 프로젝트를 작업 하면서 만든 패키지 구조이다. (참조용) 📑 기술 스택BackEndjava 21자바의 미래라고 불리는 virtual thread를 사용해보고 싶어서 버전을 21 이상을 사용하려고 생각했고 21이 LTS 버전이라서 사용하게 되었다.kotlin 1.9.23spring boot 3.2.4DGS 8.6.0넷플릭스에서 개발한 GraphQL 프레임워크이다. 예전에 한번 내용일 살펴보고 테스트를 해봤..
· Spring
⚡ 개요 Spring boot 2.6.x 버전이 2024년 2월달 부로 지원이 종료가 된다. :( 아직 까지는 크게 문제가 없지만 결국은 버전을 올려야 하며, 내부 버전을 마이그레이션을 하기로 생각했다. 아마 추가적으로 다른 내용들도 정리를 하고 있지만 가장 먼저 QueryDsl 의 Dialect의 사용 방식이 변경돼서 이 부분에 대해서 정리를 하려고 한다. 공식 문서 및 관련 자료를 찾아도 방법에 대해서 공유를 해놓은 사람이 없어서 내부 클래스를 분석해서 사용 방법을 재정의 했다. 이에 대한 내용을 정리해보려고 한다. 📚 버전 정보 현재 테스트를 할떄 필요한 버전 정보만 공유하도록 하겠다. Spring boot 2.6.x ==> Spring boot 2.7.18 ==> Spring boot 3.0.18..
· Spring
⚡ 개요 내부적으로 spring boot 2.6.6 버전을 사용 중이며, 이제 곧 2.6.x 버전의 지원이 종료가 된다. java 21 도 나왔고, 가상 스레드를 실무에서 사용해 보고 싶은 생각도 있다. 겸사겸사 spring boot에 대한 버전을 업데이트하면서 변경된 내용과 오류를 잡은 과정에 대해서 내용을 정리하려고 한다. 일단 먼저 내부적으로 사용중인 일부 라이브러리 버전에 대해서 공유하도록 하겠다. (이외 다른 라이브러리도 사용 하고 있지만 버전을 올리면서 문제가 발생하는 경우에만 따로 버전 및 이슈를 공유하도록 한다.) spring boot 2.6.6 java 17 queryDsl 5.0 spring boot 를 버전을 올리면서 이외 다른 라이브러리 버전도 올려야 하는 부분이 발생할 수도 있다...
· Spring
⚡ 개요 save()와 saveAndFlush()의 차이점에 대해서 정리하기 전에 결론부터 얘기하면 두 개의 함수 모두 메서드가 끝나는 시점에 DB에 데이터가 저장이 된다. @Transactional 어노테이션에 따라서 동작하는 방식의 차이는 있을 수 있지만 결론은 동일하다. 아래의 사용 방법에 대해서 보기 전에 JPA 영속성에 대해서 잘 모른다면 한번 찾아보고 내용을 본다면 좀 더 도움이 된다. 추가적으로 JPA 영속화 과정에 대해서 정리를 하려고한다. ⚡ 사용 방법 📔 save() entity 데이터 한건을 저장하는 데 사용을 하는 함수이다. entity의 키의 존재 여부를 판단하고 신규 entity라고 판단을 하면 영속성 상태로 바꾸고 기존에 존재하는 entity이면 준영속 상태를 영속 상태로 바꿔..
· Spring
⚡ 개요 비지니스 로직을 작업하면서 일부 컬럼만 조회해서 사용하는 경우가 존재한다. 이때 나는 보통 queryFactory를 통해서 일부 컬럼에 대한 조회를 하는것이 익숙해서 이렇게 조회를 했다. 그러다가 문득 JPA 의 repository를 통해서 단일 컬럼 또는 일부 컬럼을 조회를 하는 것이 가능할 텐데 어떻게 하는지 궁금해졌다. queryFactory를 사용하든 repository를 사용하든 대용량 데이터를 조회하는 게 아닌 이상 속도적인 측면은 잠시 미뤄놓고 어떤 게 더 편하게 개발을 할 수 있는지가 궁금했고 방법을 찾아보게 되었다. :) ⚡ 일부 컬럼만 조회하는 방법 결론부터 이야기 하자면 일부분 컬럼만 가져오고 싶다면 Mapping Interface를 별도로 만들고 리턴을 받을 때 Entity..
· Spring
⚡ 개요 queryDsl을 사용하면서 데이터를 조회하거나, 조건을 추가할 때 case when 구문을 사용해야 하는 경우가 발생한다. 내부적으로는 이력을 조회하거나, 카운트를 조회 한다거나 조건을 추가하려고 stream의 중간 연산자를 쓰는 것보다 쿼리를 한 번에 날려서 조회하는 게 속도적으로 좀 더 좋다고 판단해서 사용하고 있다. 물론 일반적인 비지니스 로직에서 처리를 할 때는 최대한 사용하지 않는 게 좋다고 생각하기는 하지만 분명 어쩔 수 없는 경우도 있을 것이다. 좋지 않다고 해서 사용을 안 하는 것이 아니라 상황에 맞게 판단해서 사용하는 게 좋다고 생각을 한다. ⚡ case when 사용 방식 정리 일단 가장 기본적으로 queryDsl 에서 caseBuilder를 사용해서 case when 구문을..
HaeTae
'Spring' 카테고리의 글 목록