-
검색 단어에 따라 에러가 발생한다고?글또 2022. 3. 5. 20:08
들어가며
사이드 프로젝트는 코틀린과 jpa를 사용하고 있는데요.
jpa를 사용하며 만났던 문제를 알아보겠습니다.
문제 상황
테스트 시연을 하기 전에 개발자들끼리 모여서 test 중 문제가 발생했습니다.
검색 기능을 제공하는 API가 존재했었는데 특정 단어를 검색하면 에러를 뱉는다는 것이었습니다.
???
좀처럼 이해가 되지 않았지만 로그를 열어 확인했습니다.
sql grammar 에러를 내보내고 있었는데 별칭 p를 찾지 못한다는 것이었습니다.
???
처음에는 찾지 못할 이유가 없다고 생각을 해서 show sql 설정을 켜 확인에 들어갔습니다.
발생원인
특정 문자로 검색 시 count 쿼리가 나가고 있었습니다.
왜 나갈까요?
해당 문자로 검색 시 검색 size 보다 결과가 많을 경우 count를 다시 내보내고 있었습니다.
이때 count 쿼리에서 문법 에러가 나고 있었던 것입니다.
해당 검색 API는 우선순위 요구 사항이 있어 native 쿼리를 사용하고 있었는데요.
- 검색 시 제목에 검색어가 있는 경우
- 카테고리에 검색어가 있는 경우
- 별명에 검색어가 있는 경우
- 본문에 검색어가 있는 경우
4가지의 우선순위를 둬서 select를 해오는 메서드였습니다.
count 시 native sql을 사용하기에 q를 못 찾는다는 에러가 발생하는 것이었습니다.
ex) select count ( select q.*...)
native 쿼리가 아니었다면 아래와 같이 count 쿼리를 잘 생성하게 됩니다.
해결
jpa에 countQuery라는 속성을 이용해 해결해주었습니다.
마치며
jpa의 특성을 알지 못하고 사용해 발생한 문제였습니다.
사이드 프로젝트이긴 하지만 사용할 기술에 대해 더 깊이 있게 공부할 필요가 있어 보이네요.
참고
'글또' 카테고리의 다른 글
제목은 젠킨스 서버 분리로 하겠습니다. 근데 이제 도커를 곁들인 (0) 2022.03.13 jenkins 해킹 (0) 2022.03.06 도커가 계속 죽어요.. OOM killer (0) 2022.01.23 사이드 프로젝트 - Enum converter (0) 2022.01.23 Atdd [인수 테스트 -1 ]피드백 (0) 2022.01.22