JPA를 "잘" 사용하려고 Query를 개선하다 보면 한 번쯤은 만날 수밖에 없는 문제가 있습니다. 바로 MultipleBagFetchException인데요. 해당 문제는 2개 이상의 xToMany 관계에 대해서 Fetch Join을 사용할 때 발생합니다. JPA fetch join 특징은 다음과 같습니다. OneToMany, ManyToMany : 하나의 fetch join만 사용 가능(Set을 사용하는 경우 제외) ManyToOne, OneToOne : 여러개의 fetch join 사용 가능 그리고 해결할 방법들도 당연히 존재하는데요, 아래 문제는 당연하게도 fetch type(EAGER, LAZY)로 인한 N+1 문제를 해결하기 위해 발생한 문제이기 때문에 아래와 같이 해결할 수 있습니다. LAZY..
서론 이메일 발송 기능을 개발하고 있었다. 이메일 발송은 시간이 약간 걸리는 작업인지라 클라이언트에게 응답을 곧바로 반환하지 못하는 문제가 있었다. 그래서 이메일 발송 기능은 비동기(Async)로 처리했다. 특히 인증코드에 만료 시간(ttl)이 존재해야 했기에, 이메일 발송 로직에는 인증 코드를 레디스에 저장하는 태스크도 포함되어 있었다. SecurityContext가 Authentication을 가지고 있지 않은 건에 대하여 그런데 문제는 여기서 시작되었다. AuthorityCode(인증 코드) 객체를 만드려면 현재 로그인한 멤버의 아이디가 필요했고, 현재 로그인한 멤버의 정보를 가져오는 로직은 SecurityContextHolder에서 가져온다. 내가 짠 코드기도 했고 코드 퀄리티를 더 챙기다보니 제..
이메일 발송 기능을 만들던 중 빌드를 돌렸더니 에러가 터졌다. 분명 WAS를 구동할 때는 잘 돌아갔는데 왜 다른 테스트들이 터지는지 의문이었다. 스프링 빈들이 모두 생성이 안되었다. 원래는 테스트까지 잘 동작했기 때문에 새로 만든 기능에서 스프링 빈 설정을 안한 부분이 있나 찾아보았지만, 모두 빈 주입을 잘 하고 있었다. 그러던 중 아래의 로그에 JavaMailSender 클래스의 빈이 등록이 안되었다고 한다! 필자는 JavaMailSender를 사용하긴 했지만, 해당 클래스의 설정으로 보낼 이메일을 구성하지는 않았다. 하지만 스프링 자체는 JavaMailSender라는 빈에 설정 값을 기반으로 빌드를 했기 때문에 아래와 같은 에러가 난 것 같다. 그래서 JavaMailSender의 설정 파일을 추가해주..
필자가 CI/CD 파이프라인을 구축하고 사용하는 과정에서 나왔던 문제다. 젠킨스 빌드가 모두 성공했다고 떴는데, 제일 최근에 개발한 기능이 동작하지 않는것이 아니겠는가 그래서 급하게 ssh에 접속해서 로그파일을 열어봤다. 직접 kill하기 애초에 배포 스크립트에 만약 8080포트가 열려있다면 지운 후에 실행하도록 작성했는데, 왜 이런 오류가 발생한지 의문이었다. 곧바로 사용중인 8080포트를 찾기 시작했다. lsof -i:8080 : 실패 netstat -tulpn | grep 8080 : 실패 netstat -ano : 실패 .... 애초에 저걸로 성공했으면 이 트러블 슈팅기는 작성하지 않았을 것이다. 있는 명령어 없는 명령어 다 실행하며 8080 포트를 찾으려 노력해봤지만 어디에도 보이지 않았다. 그..