명절 연휴는 잘 보내고 계신가요? 저는 휴일이 길지않아 오늘도 일을 하고 있습니다. 하하.

 

본론으로 들어가서 예전에 '총 게시글의 숫자가 많을 경우 게시판 속도에 영향을 준다' 라는 글을 본 기억이 있는데

이게 라이믹스나 최근에도 적용이 되는 말인지 궁금하네요.

 

게시글을 약12만개 생성하여 그 게시판과 다른 게시판의 속도를 측정해보니 저는 체감상 큰 차이는 못느꼈습니다만

그냥 기분탓인지 스킨의 탓인지 아님 실제로 그런건지 정확하게 판단을 못하겠네요.

 

만약 글의 숫자가 게시판 속도에 영향을 준다면 기존에 등록되어있는 12만개의 글을 삭제했을 경우,

SEO 에 주는 영향이 분명히 있을 것이니 삭제는 분명 불이익일거같은데 게시판 속도를 생각하면 삭제를 안할 수도 없을 것인데..

 

사이트 운영의 고수님들은 어떻게 처리하는것이 유리하다고 생각하십니까?

 

1. SEO 를 무시하고 게시글을 전체 삭제한다.

2. 속도와 관계없이 대량의 게시글을 유지한다.

3. 현재 등록된 대량의 게시글을 타 게시판으로 이동한뒤 새로운 게시판을 운영한다.

 

 

타운 여러분들 새해 복 많이 받으십시요!

  • Lv30
    사이트의 게시글은 자산과도 같다고 생각합니다. 그 자산으로 인해 새로운 방문자들이 유입되는 건데 속도라는 것 때문에 자산을 없앤다는건 저는 상상하기도 힘든...

    2번을 목표로 하겠지만 사이트이용에 중대한 문제가 될 정도로 속도에 영햐을 받는다면 3번 등의 다른 방법을 강구할 것 같습니다.
  • Lv30 Lv5
    그렇네요, 사이트에 있는 게시글은 자산이니 소중하게 생각해야되는게 정답이네요
  • Lv37

    서버 사양이나 튜닝 상태, 사이트 이용 패턴에 따라 다르지만 12만 개쯤 되면 슬슬 차이가 보이기 시작할 거예요.

     

    그런데 그 이유가 참 황당합니다.

     

    게시판 목록 20개 정도를 불러오는 속도는 글이 10만 개든 1000만 개든 거의 차이가 없습니다. 개별 게시물을 불러오는 속도도 마찬가지입니다. XE 기반으로 게시판 하나에 글이 300만 개 이상 쌓여있는 사이트도 알고 있는데요, 여전히 빠릅니다. 글이 많이 쌓일수록 속도가 느려지는 이유는 다른 데 있습니다.

     

    XE에는 아주 유용하면서도 서버 관리자 입장에서는 빡치는 기능이 하나 있는데요, 게시판 1페이지의 글 20개를 불러오려고 하면 그 밑에 페이지 링크를 표시하기 위해 SELECT COUNT(*) 쿼리가 동시에 들어갑니다. 결국 해당 게시판에 있는 글의 숫자를 모두 세어야 하지요. 글이 수십만 개씩 되면 이 카운트 쿼리로 인한 부하가 상당히 높아집니다. 혼자서 테스트할 때랑 수백 명이 동시에 쿼리할 때랑 또 다릅니다. 글이 많고 동접수도 많은 커뮤니티 사이트라면 이게 치명적인 수준까지 올라갑니다. 카운트 쿼리만으로 CPU 코어를 10개 이상 잡아먹는 경우도 봤어요.

     

    게다가 이런 카운트 쿼리는 페이지 링크가 정말 필요한 게시판 목록뿐 아니라 최신글/인기글 위젯 등 "특정한 조건으로 상위 n개를 추출하는" 부분이라면 대부분 다 들어갑니다. 위젯 만드는 분들이 상위 n개를 추출하는 쿼리를 작성하면서 별 생각 없이 <page> 태그를 복붙해서 넣었기 때문인데요... 필요하지도 않은 정보를 왕창 불러와서 폐기하는 셈이지요. (위젯 개발자님들!! 1페이지만 추출할 때는 <page> 태그를 사용하지 마세요!!!)

     

    예전에는 MyISAM 테이블을 사용하면 SELECT COUNT(*) 쿼리는 항상 빠르다는 얘기가 있었습니다. 그러나 카운트 쿼리 부하를 걱정할 만한 규모의 사이트라면 MyISAM 테이블을 사용하지도 않을뿐더러... XE는 게시판마다 테이블이 따로 있는 것도 아니고, 게다가 status 등의 조건이 추가로 들어가기 때문에 전혀 해당사항이 없습니다.

     

    따라서 글이 많이 쌓여 있는 게시판이라면 카운트 쿼리를 제거하는 것이 가장 중요합니다. 스킨에서 제거하더라도 코어에서 자동으로 쿼리를 실행해 버리기 때문에 소용없습니다. 게시판에 페이지 링크가 없어서도 안 되는 일이고요. 그렇다면 한 번만 쿼리해서 그 결과를 기억(캐싱)해 놓고 가능한 오랫동안 재사용해야 하는데요, 계속해서 새 글이 등록되고 삭제되는 와중에 캐싱 기법을 활용하면서 정확한 카운트를 유지하는 것도 쉬운 일이 아닙니다.

     

    다행히!!! 슈퍼 캐시 모듈의 페이징 캐시, 오프셋 쿼리 기능이 바로 이 문제를 해결해 줍니다.

     

    흔히 알려진 전체화면 캐시 기능은 나중에 심심해서 추가한 거고요... 슈퍼 캐시 모듈의 진짜진짜 핵심 기능은 바로 이 페이징 캐시와 오프셋 쿼리입니다. 실제로 이 부분이 가장 먼저 개발되었고 가장 정교하게 설계되어 있습니다. 전체화면 캐시는 로그인하지 않은 방문자의 접속 속도에만 영향을 주지만, 페이징 캐시와 오프셋 쿼리는 로그인한 회원들에게도 혜택이 돌아갑니다. 어떤 혜택이냐고요? 카운트 쿼리 때문에 CPU 코어를 10개 이상 잡아먹는 사이트 말씀드렸었죠? 갑자기 CPU 코어 10개가 남아돌더군요. 서버의 CPU 점유율이 1/3로 내려갔습니다.

     

    이상... 슈퍼 캐시 모듈 광고글이었습니다 ㅋㅋㅋ

     

    P.S. 타임라인(통합게시판) 모듈을 사용하면 슈퍼 캐시도 소용없습니다.

  • Lv37 Lv5
    이해하기 쉽게 설명해주신 좋은글 감사합니다. 어쩐지 타임라인 모듈은 어떻게 해도 느려진다했더니 그게 원인이라니 이제 앓던 이가 다 빠진 기분입니다. 게시글 12만개에서도 속도 영향 없던게 슈퍼캐시 덕분이었다니 다시 한번 슈퍼캐시 위력을 실감합니다 최고!
  • Lv37 Lv30

    설명해주신 부분중 타임라인 게시판의 문제점을 극복하는 방법이 편의기능제공과 사이트의 안정적인 운영의 균형을 위해 적절한 타협이 필요할 수 있다고 생각이 되어졌네요. 물론 저희 사이트는 아직 2만개 수준이라....

    나중에 통합게시판(타임라인)의 게시글 숫자가 문제가 된다면 타임라인에서 설정에 최근일까지만 불러오도록 해서 많은 글을 불러오지 않도록 하는 것도 좋을 것 같다는 생각을 해 봤습니다.

    사실 통합게시판의 주된 이용 목적이 최근에 올라온 글을 한번에 모두 보기 위한 경우가 대부분이라서요.

    최근 30일 90일 특정하여 불러오게 설정한게 도움이 전혀 안된다면 이 생각은 폐기해야 겠지만요.

  • Lv30 Lv37

    네, 타임라인에서 최근 글만 불러오도록 하면 카운트 속도 향상에는 도움이 될 수 있습니다. 그러나 조건을 많이 추가할수록 오히려 부하가 높아지는 부분도 있으니 적절한 균형을 찾으셔야 해요.

  • Lv37 Lv5
    슈퍼캐시.. 엄청난 녀석이군요!
    당장 알아보러 갑니다..!
  • ? Lv8
    좋은 댓글들 감사합니다. 사이트 운영에 많은 참고가 되네요.