⚡ 개요DB에서 테이블 생성할 때 Default 값을 설정했지만 값이 null로 들어가 있는 상황이 발생을 하게 되었고 기본값을 사용하는 과정에서 NPE 발생하게 되었다. 이에 따른 내용을 정리하려고 한다. 내부 로직에서 저장하는 부분을 찾아보니 repository에서 save() 함수를 통해서 저장을 하고 있었다. Entity에서도 Default을 설정 했는데 왜 기본값으로 저장이 안 되고 null로 저장이 되는지 한번 알아보자. ⚡ 내용 Entity 일부코드를 살펴보면 @colunmDefault() 어노테이션을 사용해서 기본값을 설정한 부분을 볼 수 있다. nullable은 설정하지 않았기 때문에 실제 DB에 값은 null로 들어갈 수도 있었다. @colunmDefault() 에 대해서 문서를 ..
분류 전체보기
⚡ 개요요즘 고객사에 점진적으로 솔루션이 나가게 되면서 기능적인 오류 보다도 사용자가 많고, 데이터가 많아짐에 따라 생각지도 못한 부분에서 속도가 느리거나 OOM 이슈가 나오고 있다. 😓 내부적으로 개발 단계에서 생각하지 않고 개발한 부분에 대해서는 개선 작업을 통해서 어느 정도 해결이 된 부분도 있고, 초기 단계에서 구조를 잘못 잡아서 발생하는 부분도 존재하고 있지만 어느 정도 인지를 하고 개선 작업을 하고 있다. 하지만 특정 화면이나 기능이 동작하는 과정에서 여러 서비스를 호출하고, 데이터를 가공하는 과정에서 문제를 찾기란 쉽지가 않다. 내부에서 테스트 코드를 작성해서 호출 과정 및 메모리 사용을 체크 해서 발견이 되면 다행이지만 나오지 않는 경우도 종종 존재한다. 위의 이슈에 따라서 모니터링에 ..
⚡ 개요개발 단계에서 발생한 session 이슈가 있어서 해당 내용을 정리 하려고 한다. 운영 단계에서는 발생할 가능성이 적은 내용이며 보안상의 이슈이기 때문에 간단하게만 정리하고 넘어가려고한다. 특정 데이터를 통신 과정에서 유지하기 위해서 session, cookie, token 등 여러가지 방법이 존재한다.Spring boot session 을 검색만 하더라도 어떻게 구현을 해야하는지도 나온다. 물론 개념적으로 더 알면 좋지만 검색을 하고 따라만 하더라도 개발자 도구에서 쿠키를 확인 해보면 session ID가 들어오고 유지되는 부분을 확인 할수가 있다.로그인 페이지를 구현하고 테스트 하는 과정에서 계속 session에 저장되지 않고 새로운 session이 생기는 이슈가 발생해서 내용을 정리하게 되었..
⚡ 개요spring boot + vue 프로젝트를 진행할 때, vue에서 router를 설정했지만, 새로고침을 하는 순간 404 에러 페이지가 로드되는 이슈에 대해서 내용 및 수정 방법에 대해서 정리를 하려고 한다. 일단 기본적으로 404가 나오는 이유에 대해서 설명하자면 새로고침을 하는 순간 spring에서 servelt에 맵핑된 주소를 찾는데 없기 때문에 404가 발생하는 것이다. 단순하게 컨트롤러에 전부 맵핑을 해준다면 해결되는 이슈이기도 하다. Vue는 SPA이고, index.html 페이지 내에서 모든 동작이 이뤄지도록 되어있다. 페이지 이동을 몇 번을 하던 결국은 index.html 페이지 하나에서 동작한다고 보면 된다. ⚡ History Modevue 공식 문서를 확인 해보면 History ..
⚡ 내용속도적인 이슈로 인해서 일부 queryFactory를 사용하는 부분을 SQLQueryFactory로 변경을 했다.이때 조회 방식은 동일하지만 내부 구현체가 좀 달라서 그런지 LocalDate 타입으로 반환하는 결과값이 이상하게 나오는 부분이 있어서 정리를 하려고 한다.⚡ 이슈 정리나는 오늘 날짜를 기준으로 데이터를 조회 했지만 하루전 데이터가 나와서 데이터가 꼬이는 부분이 발생을 했다.실제 결과 값에 대한 디버그를 해보니 하루전 데이터가 나오고 있었다. 최근에 변경한 부분이 queryFactory 를 sqlQueryFactory로 변경한 부분이 있어서 실제 결과 값을 만드는 부분에 대해서 클래스 내용을 확인 해보니 반환하는 부분에서 좀 이상한 부분이 있어서 공유를 하려고 한다. 아래의 이미지는 실..
⚡ 개요최근에 프로젝트를 하면서 신규로 적용했던 내용을 정리하려고 한다. 일단 공식 가이드 문서가 순차적으로 잘 되어있기 때문에 공식 가이드를 먼저 보는 걸 추천한다 (링크) 공식 가이드 문서가 잘 되어 있기때문에 설치에 대한 내용은 보고 따라 하는 게 편하다. vue cli를 통해서 라이브러리를 추가하는 방법도 존재하고, 이미 프로젝트가 존재하는 경우에도 추가하는 방법이 자세히 설명되어 있다. ⚡ 사용 이유공식 가이드에 따른 장점과 내가 적용을 하면서 느낀 사용 이유에 대해서 정리를 해놓으려고 한다. 📗 공식 가이드 문서 기준 사용 이유 (링크)1. 지원 범위가 넓다.React를 기준으로 가이드가 작성되어 있지만 다른 FrontEnd 프레임 워크를 지원 하고 있다. 2. HTTP 네트워크 통신아마..
📑 개요지난번에 작성했던 블로그의 내용은 완전 기초적인 내용 및 설정에 대해서 설명을 했다면 이번에는 세부적으로 샘플 코드를 작업하면서 나온 내용에 대해서 정리를 하고 작업 간에 했던 생각을 적어 보려고 한다. :) 📕 구조BackEnd내가 이번 프로젝트에서 잡은 구조는 도메인 구조이다. 계층형 구조와 도메인 구조에 대해서 비교를 하는 블로그들을 많이 보았다.내용을 살펴보면 알겠지만 정답은 없다. 장단점에 따라서 프로젝트에 맞는 구조를 사용해서 개발을 진행하면 된다. (유지보수를 위해서라도) 본론으로 돌아와서 도메인 구조를 잡은 이유에 대해서 설명하도록 하겠다.패키지별 분리를 했을때 내용을 파악하는데 더 쉽다고 판단프로젝트 개발간에 기획이 변경되는 상황이 많이 발생하는데 이때 유리하다고 판단확장성을 ..
📑 개요신규 프로젝트 작업을 해야 하는 상황이 있어서 이번 기회에 spring boot, kotlin과 vue 최신 버전을 기준으로 초기 세팅 작업을 했고 이 과정을 기록하려고 한다. 버전에 따라 없어진 내용도 존재하고, 추가된 내용도 존재하니 체크를 해보는 게 좋을 거 같다. 아래의 이미지는 이번에 프로젝트를 작업 하면서 만든 패키지 구조이다. (참조용) 📑 기술 스택BackEndjava 21자바의 미래라고 불리는 virtual thread를 사용해보고 싶어서 버전을 21 이상을 사용하려고 생각했고 21이 LTS 버전이라서 사용하게 되었다.kotlin 1.9.23spring boot 3.2.4DGS 8.6.0넷플릭스에서 개발한 GraphQL 프레임워크이다. 예전에 한번 내용일 살펴보고 테스트를 해봤..
⚡ 개요근본적으로 동적 쿼리를 작성해야 하는 이유가 뭘까에 대해서 생각을 해봐야 한다.데이터 베이스의 테이블 구조 또는 사용자 입력에 따라 조건 변경, UI에 따른 세부 조건 변경등 여러가지 이유가 있을수 있다. 만약 조회 하는 테이블은 같은데 조건만 달라지는 경우라면 동적 쿼리를 사용하지 않는다면 중복된 코드가 발생하고 이는 생산성 및 유지보수 측면에서 좋지 않은 결과를 가져온다고 생각을 한다. 예전에는 myBatis에서 쿼리를 작성할떄는 동적으로 param을 보내서 조회 하도록 작업을 하고 있었을 것이며, JPA를 사용 하는 개발자의 경우 초기에는 어떻게 동적 쿼리를 작업 해야하는지 모르는 사람한테 유용한 정보가 될거라고 생각한다. 내가 JPA를 사용하면서 동적 쿼리 및 배치 쿼리를 작업하는 방법에 ..