
종합 의견
https://checkuu.tistory.com/172
게시물 검색 최적화 작업 2 (인덱스 적용)
게시판 검색 기능의 성능 개선을 위해 인덱스를 적용해봤다. 최적화 작업1편에서 했던 테스트를 그대로 해봤다.https://checkuu.tistory.com/171 게시물 검색 최적화 작업 1 (기본 검색기능 구현)게시
checkuu.tistory.com
https://checkuu.tistory.com/173
게시물 검색 최적화 작업 2-1 (인덱스 설정 수정)
인덱스 설정을 바꿔보았다. 변경 전 변경 후 위와 같이 합친 이유가 boardRepository에 검색시 title과 content 다 찾아보도록 설정했기 때문이었다. 테스트 결과 검색어검색 기록1Title1493 ms2Content1419
checkuu.tistory.com
https://checkuu.tistory.com/174
게시물 검색 최적화 작업 2-2 (인덱스 설정 에러)
이번엔 더미데이터를 만들때 인덱스 설정이 제대로 들어가지 않았는지에 대해 확인해 보았다.1. 게시물 더미데이터 만들기2. SQL 콘솔창에 명령어 치기내가 원했던 title과 content가 인덱스 잘되어
checkuu.tistory.com
https://checkuu.tistory.com/175
게시물 검색 최적화 작업 2-3 (Like 부분 수정)
검색 쿼리에 Like 부분을 수정하기 위해서 변경 전@Query("SELECT b FROM Board b WHERE b.title LIKE %:keyword% OR b.content LIKE %:keyword%")List searchBoardByTitleOrContent(String keyword);변경 후@Query("SELECT b FROM Board b WHERE b.tit
checkuu.tistory.com
https://checkuu.tistory.com/176
게시물 검색 최적화 작업 2-4 (데이터 량 늘리기)
검색하는 쿼리에서 keyword에 %를 한곳에만 붙히는건 성능차이를 확인 해보려고 한번 해본것 뿐, 실제로 그런 검색 서비스를 제공하진 않을것이기에 keyword에 %가 없는 딱 keyword만 찾는 테스트는 진
checkuu.tistory.com
인덱스를 여러 조건에서 테스트를 진행하다보니 인덱스를 쓰는것에 있어 유의미한 효과를 발견하진 못했다.
여러 조건에서 테스트 하다보니 한가지 더 떠오르는 부분이 있었다.
지금은 게시판에서 title,content 두가지 항목에서 찾는거지만 만약 다른 항목이 추가된다면? 이라는 생각이었는데,
사실 우리가 일반적인 인터넷에서 게시판 검색할때 키워드에 맞는 제목이나 본문만 찾지 다른부분(게시글번호,게시글 내 댓글 등등)까지 검색에 포함되어있을 필요가 없다고 생각했다.
검색에 나타나면 편할것 같은 한가지 정도 꼽자면 유저 네임 정도인데, 이것도 우리가 인터넷 써보면 카테고리로 유저네임,제목,본문 정해서 검색하지 전체검색에 유저네임이 포함해서 검색하지는 않는다.
그래서 항목늘리기해서 테스트 하면 인덱스로 인한 성능 개선을 확인 해볼 수 있지 않을까? 라는 의문을 잠시 가졌다.
물론 모든 항목에 인덱스를 넣으면 오히려 성능이 떨어지기도 하니 인덱스를 어떻게 구성하냐에 따라 달라질 듯 하다.
하지만 위에서 말했듯이 검색에서 제목이랑 본문 정도만 나오면 될것이라 생각해 테스트 해볼 필요성을 느끼지는 못했다.
인덱스 적용해보면서 찾은 내용 정리
1. 쿼리 WHERE 절에 LIKE 사용시 인덱스를 사용해도 효과를 보기 힘들다. 특히 '%'와 함께 사용하는 경우 인덱스의 효과가 매우 제한적이다.
- 왜 LIKE 쿼리에서 인덱스가 잘 적용되지 않을까???
- LIKE '%keyword%'는 패턴 매칭을 의미하며, keyword 앞뒤에 %가 들어가면 데이터베이스는 해당 컬럼의 값을 처음부터 끝까지 순차적으로 검색해야 하므로 인덱스를 제대로 활용할 수 없다. 이 경우 인덱스가 거의 효과를 못 본다.
2. 쓰기 성능 저하
- 인덱스를 추가하면 쓰기 성능(INSERT, UPDATE, DELETE)에 영향을 미칠 수 있습니다. 데이터 삽입, 수정, 삭제 시 인덱스를 유지해야 하기 때문에 이 작업들이 상대적으로 더 많은 시간이 소요될 수 있습니다. 따라서, 읽기 최적화가 중요한 경우에 인덱스를 적용하고, 쓰기 최적화가 중요한 경우에는 인덱스 사용을 최소화해야 합니다.
3. 인덱스 크기 주의
- 인덱스를 너무 많이 추가하면 디스크 공간을 많이 차지하고, 이로 인해 성능 저하가 발생할 수 있습니다. 따라서 반드시 자주 쿼리에서 사용하는 컬럼에만 인덱스를 적용하는 것이 중요합니다.
4. 단일 인덱스 vs 복합 인덱스
- 단일 인덱스
장점 : 특정 컬럼에 대해서 빠른 검색을 할 수 있습니다. 예를 들어 title이나 content 컬럼을 각각 인덱스화하면, 이 컬럼들에 대해 빠른 검색이 가능합니다.
단점 : 다중 조건(예: WHERE title = ? AND content = ?)을 사용할 때, 복합 조건에 대한 효율성이 떨어질 수 있습니다. 이 경우, 각 컬럼에 대해 별도의 인덱스가 필요하고, DB는 인덱스 간의 조합을 고려해야 하므로 성능이 좋지 않을 수 있습니다. - 복합 인덱스
장점 : 여러 컬럼을 동시에 인덱싱할 수 있어, 다중 조건(복잡한 WHERE 절)에 대해서 성능을 크게 향상시킬 수 있습니다. 예를 들어, title과 content를 동시에 검색해야 하는 경우, 복합 인덱스를 사용하면 두 컬럼에 대한 조건을 효율적으로 처리할 수 있습니다.
단점 : 복합 인덱스는 인덱스에 포함된 컬럼 순서에 따라 검색 성능이 달라지므로, 쿼리에서 자주 사용되는 조건 컬럼이 앞에 오는 것이 좋습니다. 예를 들어 title과 content를 묶은 복합 인덱스에서 title을 먼저 검색하면 효율적이지만, content를 먼저 검색하는 쿼리에서는 효율성이 떨어질 수 있습니다.
이제 할일
엘라스틱 서치 공부하여 검색기능 구현 해보기
ELK 스택 구현해보기
'java 배우기 > TIL' 카테고리의 다른 글
| 게시물 검색 성능 최적 작업 3 (엘라스틱 서치 적용 후 검색) (0) | 2024.11.15 |
|---|---|
| 엘라스틱 서치 적용 하기 (0) | 2024.11.15 |
| 게시물 검색 최적화 작업 2-4 (데이터 량 늘리기) (0) | 2024.11.08 |
| 게시물 검색 최적화 작업 2-3 (Like 부분 수정) (0) | 2024.11.08 |
| 게시물 검색 최적화 작업 2-2 (인덱스 설정 에러) (0) | 2024.11.07 |