이번 게시글에서는 JPA의 N+1 쿼리를 감지하여 사용자에게 알려주는 라이브러리를 제작한 내용에 대해서 작성하겠다.
아래는 제작한 라이브러리이다.
이 라이브러리가 많은 개발자분들에게 도움이 되기를 바라며, 만약 감지되지 않는 N+1 쿼리가 발생한다면 이슈에 남겨주시면 감사하겠습니다. 프로젝트의 사용성을 높이기 위해 설명서와 릴리즈 노트는 영어로 작성되었음을 양해 부탁드립니다.
라이브러리의 작동 방식은 릴리즈 노트에서 자세히 다루고 있으며, 이번 글에서는 라이브러리를 만든 배경과 개발 과정에서 느낀 점들을 정리하겠다.
JPA를 사용할 때 발생하는 N+1 문제는 많은 개발자들이 자주 겪는 문제 중 하나이다. 평소 이 문제를 해결하기 위해 show-sql
옵션을 사용해 직접 쿼리를 확인하며 개발을 진행해왔다. 하지만 이러한 과정을 자동화하고, 개발자에게 실시간으로 문제를 알릴 수 있는 라이브러리가 필요하다고 생각했다.
기존에 존재하는 라이브러리들을 찾아보았지만, 대부분 오래된 프로젝트였고 현재도 유지보수되고 있는 것은 찾기 어려웠다. How to detect N+1 problems in a Hibernate/JPA application에서도 볼 수 있듯이, 많은 개발자들이, 나와 비슷한 생각을 하는 것을 알게 되었고 라이브러리를 직접 만들기로 했다.
오픈 소스 프로젝트는 지속적인 관리와 개선이 중요하다고 생각한다. 이를 위해 사용자들의 관심과 피드백이 필수적이다. 프로젝트를 잘 관리하고, 사용자들에게 신뢰를 주기 위해 인기 있는 오픈 소스 프로젝트들을 참고했다.
특히, spring-projects에서 아이디어를 얻어, 라이브러리와 테스트 프로젝트를 멀티모듈 환경으로 구성했다. 단, 다른 멀티모듈 환경과는 다르게, 각 모듈이 자체적으로 의존성을 관리하도록 하여 유지보수와 배포가 더 쉽도록 구성했다.
또한, 프로젝트의 글로벌 인지도를 높이기 위해 영어로 프로젝트를 관리하고 있다. 비록 한글로 관리해도 괜찮을 정도의 규모이지만, 생성형 인공지능 (Generative AI) 연구를 통해 영어로 관리된 프로젝트가 더 많은 관심을 받을 수 있다는 것을 깨달았다. 따라서 조금 더 번거로울지라도, 영어로 프로젝트를 관리하는 것이 장기적으로는 더 나은 선택이라고 판단했다.
이번 프로젝트를 통해 평소 자주 사용하는 오픈 소스들의 제작과 관리가 얼마나 많은 고민과 노력을 요구하는지 다시 한 번 느낄 수 있었다.
나도 사용자들이 최대한 편리하게 사용할 수 있도록 라이브러리의 기능과 구조를 고민하는 과정에서, 개발자로서의 성장을 경험할 수 있었다.
또한, 라이브러리를 제작하며, 데이터베이스와 JPA에 대한 지식의 부족함을 느낄 수 있었다. 이를 계기로 데이터베이스 관련 지식을 더 깊이 공부하여, 라이브러리를 계속해서 개선해나가고자 한다.
슬프게도, 내가 발견하지 못한 더 나은 라이브러리가 이미 존재할 수도 있고, 다른 개발자들이 제 라이브러리의 필요성을 느끼지 못할 수도 있다. 그러나, 나는 이 라이브러리를 제작하는 과정 자체에서 큰 재미를 느꼈고, 짧은 시간이지만, 이 프로젝트에 애착이 생겼다. 따라서, 앞으로도 이 프로젝트를 지속적으로 개선해나가고자 한다.