문제해결(15)
-
Spring JPA 대용량 데이터 조회 최적화, 300만건 포트폴리오 손익 데이터 처리 개선 사례
배경데이터베이스에 포트폴리오 손익 내역(PortfolioGainHistory) 데이터가 300만개인 상태에서 포트폴리오 종목 조회시 응답 시간이 길어지는 문제가 발생하였습니다.포트폴리오 종목 조회 API : /api/portfolio/:portfolioId/holdings 포트폴리오 손익 내역 데이터를 가져오기 위한 JPQL은 다음과 같았습니다.@Query(value = """ select p, p2 from PortfolioGainHistory p inner join Portfolio p2 on p.portfolio.id = p2.id where p.portfolio.id = :portfolioId and p.createAt findFirstLatestPortfo..
2025.04.29 -
이벤트 리스너 메서드에서 삭제된 매입 이력이 조회되는 문제 해결
1. 문제 배경주식 포트폴리오 가상 관리 웹 애플리케이션을 구현하던 중 포트폴리오에 있는 어떤 한 종목에 등록되어 있는 매입 이력을 삭제하는 서비스를 구현하고 있었습니다. 이때 포트폴리오, 포트폴리오 종목, 매입 이력 도메인의 관계는 다음과 같습니다. 하나의 포트폴리오에는 0개 이상의 포트폴리오 종목을 가질 수 있고, 하나의 포트폴리오 종목에는 0개 이상의 매입 이력을 가질수 있습니다. 위와 같은 관계를 기반으로 매입 이력을 삭제하는 서비스 구현 자체에는 문제가 없었습니다. 그러나 매입 이력 삭제 서비스에 알람 이벤트를 추가하였을 때 문제가 발생하였습니다. 다음 코드는 매입 이력 삭제 서비스에 대한 코드입니다. 매입 이력을 삭제하기 위해서 어떤 한 매입 이력의 식별번호(purchaseHistoryId)..
2024.08.18 -
ngrinder agent의 local server 연결 문제 해결
문제 상황ngrinder/controller와 ngrinder/agent를 docker 컨테이너를 이용하여 실행한 상태에서 기본적인 로그인 성능 테스트를 하기 위해서 groovy 언어 기반 스크립트를 다음과 같이 작성하였습니다.import static net.grinder.script.Grinder.grinderimport static org.junit.Assert.*import static org.hamcrest.Matchers.*import net.grinder.script.GTestimport net.grinder.script.Grinderimport net.grinder.scriptengine.groovy.junit.GrinderRunnerimport net.grinder.scriptengine...
2024.06.28 -
junit으로 작성한 테스트가 gradle로 실행될때 해결
문제원인 인텔리제이서 Junit으로 작성한 테스트 코드를 gradle로 실행할때 에러가 발생합니다. 해결방법 파일->설정->빌드,실행,배포->빌드도구->Gradle -> 빌드 및 실행에서 Gradle에서 Intellij IDEA로 변경 References https://www.jetbrains.com/help/idea/work-with-tests-in-gradle.html
2023.03.26 -
JDK18 한글 인코딩 문제
배경 Windows 10의 인텔리제이 환경에서 자바 언어 컴파일시 한글이 깨지는 문제가 발생하였습니다. 문제원인 프로젝트의 JDK 버전을 JDK18로 설정하였습니다. 해결방법 JDK 버전을 JDK15로 변경
2023.02.06 -
[docker] mysql conatiner 생성시 포트포워딩 문제
배경 docker 엔진을 사용하여 mysql container를 생성하기 위해 다음과 같은 명령어를 실행하였습니다. $ docker run -p 3306:3306 —name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=springboot -e MYSQL_USER=yonghwan -e MYSQL_PASSWORD=pass -d mysql 위 명령어의포트 포워딩 설정은 호스트 시스템에서 3306번 TCP 포트로 유입되는 트래픽은 모두 도커 컨테이너의 3306번 TCP 포트로 전달된다는 의미입니다. 문제 위 명령어를 수행시 다음과 같은 결과가 나왔습니다. Error response from daemon: Ports are not available: exposi..
2022.12.21