게시판 성능 개선 2

2025. 1. 18. 03:06·운영/게시판

1. 

성능 개선 1 에 이어서 성능 개선 2 입니다

성능 개선 1편에서 성능 개선 결과로 300만개 게시글이 있을때 게시글 리스트 조회가 10초였던 것이 2초 정도 개선됐는데

이것 저것 수정해봐도 여기서 나아지지 않아서 그만하고 시큐리 공부하려 했다

그런데 공부하는 내내 어떻게 해야 개선할 수 있을지 머리속에 짜구 맴돌아서 그만두고 데이터그립 켜서 쿼리 실행했다

 

2.

어디서 오래 걸리나 찾았는데 JPA 쿼리 중에서 전체 게시글 수 조회할 때 2초 걸렸다

이거 개선 하려고 where 문에 걸리는 컬럼으로 인덱스 잡으려고 했는데

like 절에 양 옆으로 %% 이렇게 조회하는 건 인덱스를 잡을 수 없다는걸 알게 됐다

그리고 like 는 성능이 안 나오는 조회방식인 것 같다

like 는 결국 풀스캔 하게 되는 것 같고

FULLTEXT 인덱스 잡아서 하는 방법도 있던데 막상 해보니 오래걸리더라

그리고 다른 글들도 보니 개선했다고 하지만 2 ~ 4 초 걸리는 것 같던데..

 

3. 해결

암튼 개선이 왜 안될까고민하다 문득 전체 게시글 조회에서 왜 where 문이 걸리는거지..? 싶었다

왜냐하면 나의 의도는 querydsl 로 동적쿼리 수행하고 where 절에서 null 이 들어가면 그냥 무시하도록 코드를 짰기 때문이다

그런데 코드 살펴보니 null 반환 하는 로직이 없었다

(1) 그래서 아래와 같이 수정해줘서 우선 like 절 없앴다

(2) LEFT JOIN 을 해서 COUNT 를 조회하는 것에서 이상함을 느꼈다

count 할때 join 하는 테이블의 컬럼을 사용하지도 않고

어차피 board 기준으로 LEFT JOIN 한 COUNT 를 얻을거면 JOIN 을 하지말고 그냥 board COUNT 조회하면 되잖아..?

그래서 바로 카운트 조회하는 코드에서 조인 없앴다

 

(3) 아참, 그리고 리스트 반환 데이터들도 수정해줬었는데 기존은 file VO 테이블도 join 하고 그랬는데 그것들도 없앴다

최종적으로 10000 ms 걸리던 조회를 407 ms 로 개선했다 

 

4. 앞으로

jOOQ 로 from 절에 서브쿼리 넣고 서브쿼리에서 limit 으로 화면상에 페이지번호 보여줄 수 있는 계산에 필요한 카운트 구하는 것만 하면 훨씬 빨라질 수 있는데 배포한 곳이 오라클 환경이라 jOOQ 를 무료로 사용할 수 없었다.

그래서 querydsl 로 from 절에 서브쿼리 넣어보려다가 잘 안됐는데

그러면 아.. native 쿼리 날려야 하나 코드 짜다가 이러면 동적쿼리 사용 못 하는데..?

라면서 코드를 지웠다 썼다 반복하다 어찌저찌 해결했다

1000만개 넣어보면 또 느린부분이 발견될 것 같은데 

우선 인증인가 부분을 어떻게 해보고 싶기도하고

테스트 코드도 짜야하고

코드들 추상화도 계속해서 해야한다 가독성이 너무 안 좋다..

암튼.. 해결은 한 것 같아서 잘 수 있을 것 같다 

'운영 > 게시판' 카테고리의 다른 글

게시판 성능 개선 1  (0) 2025.01.17
Java to Kotlin  (0) 2025.01.05
페이징 개선  (1) 2024.12.29
JPA n + 1 문제 해결  (0) 2024.12.22
서버 게시판 저장 및 수정 로직 수정  (0) 2024.12.18
'운영/게시판' 카테고리의 다른 글
  • 게시판 성능 개선 1
  • Java to Kotlin
  • 페이징 개선
  • JPA n + 1 문제 해결
tokkaiiii
tokkaiiii
java 웹개발 로그
  • tokkaiiii
    tokkaiiii's 개발일지
    tokkaiiii
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • java (1)
      • project tool (1)
        • jira (1)
      • spring (9)
        • security (3)
        • database access (2)
        • batch (4)
      • Kafka (2)
      • CICD (2)
      • Oracle (0)
      • MSA (1)
      • 운영 (7)
        • 게시판 (7)
      • 앱 (1)
        • 플러터 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • tokkaiiii
  • 공지사항

  • 인기 글

  • 태그

    플러터
    앱개발
    Flutter
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
tokkaiiii
게시판 성능 개선 2
상단으로

티스토리툴바