본문 바로가기

JPA4

트러블 슈팅 - Project의 bookmarkCount 컬럼이 null로 초기화됨 🚨문제프로젝트 북마크등록 관련 기능에서 다음과 같은 오류가 발생하였습니다."런타임 오류 발생: Cannot invoke "java.lang.Integer.intValue()" because "this.bookmarkCount" is null" Project의 컬럼값인 bookmarkCount가 null이라는 것입니다. 하지만 DB에 저장할때 다음과 같이 0으로 초기화 되도록 구현되어있었습니다.@Column(columnDefinition = "INT DEFAULT 0")private Integer bookmarkCount; 그럼에도 불구하고 Project가 생성될때 bookmarkCount는 null로 저장되었습니다. 그러다보니 북마크를 등록할때도 처음 bookmarkCount에1을 증가시킬때 오류가 다.. 2025. 5. 29.
[ MOIM ] 파티셔닝을 통한 알림함 조회 성능 개선 - 1 서론MOIM의 알림함 기능은 동아리 관리시스템인 만큼 사용자가 모임의 이벤트(알림)을 놓치지 않도록 하는 중요한 기능 중 하나입니다.하지만 서비스 특성상 다수의 사용자들에게 알림을 보내야하기 때문에 알림 데이터의 양은 가파르게 증가하였고, 읽기 및 필터링 성능 저하 문제가 나타났습니다. 기존에는 모든 알림 데이터를 하나의 테이블에서 모두 관리하고 있습니다.이로 인해 알림 테이터가 수백만 건 이상 쌓이면서 조회 성능이 저하되었습니다. 또한 정리가 늦어질수록 계속해서 데이터가 많아지면 구조 개선이 어려워지기 때문에 우선순위를 높여서 진행하게 되었습니다. 알림서비스의 특징은 다음과 같습니다.1. 모든 종류의 알림을 조회할 수 있다.2. 읽은 알림, 읽지 않은 알림을 구분해서 조회할 수 있다. 3. 최근 2주.. 2025. 5. 9.
[ 메이트 프로필 ] - JPQL을 QueryDSL로 전환한 이유 📜서론단잠 서비스에서 메이트 프로필을 조회할 때 다양한 필터링 조건을 동적으로 적용해야 하는 경우가 많습니다. 기존에는 이를 JPQL로 구현했지만, 모두 동적으로 변하다 보니 코드가 상당히 복잡했습니다. 그러다 보니 다음과 같은 오류 상황이 많이 발생했습니다.- 실행 후, 런타임 단계에서 여러 오류 발생으로 인한 번거로움.- 매우 길고 가독성이 떨어지는 쿼리 로직 이러한 문제를 해결하기 위해 QueryDSL을 도입하게 되었습니다. 이번 글에서는 QueryDSL이 무엇인지, JPQL과의 차이점, 그리고 실제 적용 과정에 대해 정리해보겠습니다.더보기❓JPQL이란JPQL은 JPA에서 제공하는 객체 지향 쿼리 언어입니다. 기본적으로 SQL과 상당히 유사하지만, 데이터베이스의 테이블을 대상으로 쿼리를 작성하는 .. 2025. 3. 4.
[ 리뷰 기능 ] Redis+Scheduler를 활용한 매장 평균 별점 기능 고도화하기 - 2 저번 글이 궁금하시다면👆https://agongstory.tistory.com/39 [ 리뷰 기능 ] 매장 평균 별점 기능 고도화하기 - 1📜서론단순히 매장 목록을 조회할때 해당 매장의 평균 별점까지 함께 제공하려면 성능 이슈가 발생할 수 있습니다. 이번 글에서는 어떤 방법들이 있고 제가 선택한 해결 방법을 작성하려고 합agongstory.tistory.com   기본설정1. build.gradle에 Redis의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-redis' //Redis 2. application.yml에 redis 정보 추가spring: data: redis: host: localho.. 2025. 2. 21.