목록

Default Image
등록 2026.08.31
최근 릴리즈 2026.09.07
3
79

자료 정보

쉬운 설치 쉬운 설치 지원
간단한 소개 게시글에 같은 카테고리, 제목 키워드, 태그, 선택적인 본문 키워드 분석, 최신성, 조회수, 확장변수 를 반영한 관련 글을 자동으로 출력합니다.
설치 경로 ./addons/auto_related_posts
PHP 지원 범위 PHP 8.2 이상
자료 구분 공개 자료 GPL v2
AI 사용 여부 AI로 생성한 코드가 포함되어 있고, 전문 개발자의 검토를 거치지 않았습니다.

버전 내역

  • 1.1.4 2026.09.07 52.5KB 14회 다운로드 현재 글 앞뒤 후보 추가 기능: 기존 최신 글 후보에 현재 글과 가까운 새 글·오래된 글을 추가하여 관련 글 검색 범위를 넓혔습니다.
  • 1.1.3 2026.09.06 51.5KB 11회 다운로드 확장 변수를 사용한 시리즈 전용 설정 기능과, 제목 밑에 지정된 확장 변수 표시 기능이 추가 됐습니다.
  • 1.1.1 2026.09.05 43.7KB 15회 다운로드 1.1.1 애드온 설정 화면 UI 개선
  • 1.0.2 2026.09.04 38.2KB 6회 다운로드 확장변수 관련도 분석 기능이 추가 됐습니다.
  • 0.9.0 2026.08.31 32.8KB 23회 다운로드 0.9.0부터 모바일 전용 2열 카드형 표시 방식을 선택할 수 있습니다.
  • 0.8.0 2026.08.31 189.3KB 10회 다운로드 게시글에 같은 카테고리, 제목 키워드, 태그, 선택적인 본문 키워드 분석, 최신성, 조회수를 반영한 관련 글을 자동으로 출력합니다.

상세 설명

자동 관련 글 추천 애드온

카테고리·태그·제목 키워드의 일치도에 최신성과 조회수를 반영해, 같은 게시판의 관련 글을 자동으로 표시하는 애드온입니다. 필요에 따라 본문 키워드 분석과 확장변수 관련도 분석을 추가로 사용할 수 있습니다.

주요 기능
- 웹진형·리스트형 표시 및 모바일 2열 카드형 지원
- 출력 개수, 제목 길이, 후보 글 검색 개수 설정
- 자동 감지, 본문 아래, 댓글 위, 사용자 지정 출력 위치 지원
- 대표 이미지 표시 여부와 대체 썸네일 색상 설정
- 대상·제외 게시판 설정 및 공지글 포함 여부 선택
- 카테고리·태그·제목 키워드·조회수의 점수 가중치 조절
- 선택적인 본문 키워드 분석
- 확장변수의 실제 값을 완전일치·다중값 겹침·키워드 겹침 방식으로 비교
- 게시판별 확장변수 매핑, 규칙별 가중치 및 확장변수 점수 상한 설정
- 라이믹스 고속 캐시와 전용 DB 테이블을 이용한 2단계 캐시
- 글 작성·수정 화면 및 접근·열람 권한이 없는 게시판에서는 출력하지 않음
- 설정 화면에서 사용법과 확장변수 규칙 입력 예시 제공

본문 키워드 분석과 확장변수 관련도 분석은 기본적으로 사용하지 않습니다. 필요한 기능만 선택해 활성화할 수 있으며, 게시물이 많거나 서버 성능이 낮은 환경에서는 본문 키워드 분석을 비활성 상태로 유지하는 것을 권장합니다.

 

테스트 환경  
PHP 7.2.34 / Rhymix 2.0.24
PHP 8.2 / Rhymix 2.1.28
PHP 8.4 / Rhymix 2.1.36


두 환경 사이의 모든 PHP·Rhymix 조합을 테스트 한 것은 아니므로, “PHP 7.2~8.4 및 Rhymix 2.0.24~2.1.36의 모든 조합을 완전 지원한다” 를 의미하지 않습니다. 

폭넓은 테스트 환경을 거치지 않아서 지원 범위는 소극적으로 좁혔습니다. 

 

 

arp_01.jpg

image.png






## 변경 내역

- 1.1.4 : 현재 글 앞뒤 후보 추가 기능: 기존 최신 글 후보에 현재 글과 가까운 새 글·오래된 글을 추가하여 관련 글 검색 범위를 넓혔습니다.

 

- 1.1.3  

시리즈 관련 글 기능 추가 : 지정한 확장변수의 시리즈 식별값과 회차를 기준으로, 같은 게시판에서 가까운 이전·이후 회차를 표시합니다. 관련도 점수와 후보 글 검색 개수에 관계없이 게시판 전체를 대상으로 조회합니다.
 - 관련도 점수, 후보 글 개수 영향을 받지 않고 게시판 전체 기준으로 합니다. 
 - 시리즈 캐시는 애드온 설정내 캐시 설정 기준을 따르지 않고, 새 회차 등록 또는 기존 수정시 글이 열람되면 시리즈 목록 변경을 캐시에 갱신 합니다. 

제목 아래 확장변수 표시 기능 추가 : 지정한 확장변수 1개를 관련 글 제목 아래에 표시할 수 있습니다. 가격 등의 숫자 값에 단위와 천 단위 쉼표를 적용할 수 있으며, 데스크톱에서는 왼쪽 정렬, 모바일 카드에서는 대표 이미지 기준 가운데 정렬로 표시합니다.

 

image.png

 

 

- 1.1.1 : 애드온 설정 화면 UI 개선


- 1.0.2 : 확장변수 관련도 분석 기능 추가

- 0.9.0 : 모바일 전용 2열 카드형 표시 방식을 선택할 수 있습니다.
스크린샷 2026-08-31 235747.jpg


- 0.8.0 : 최초 업로드 버전

index Lv. 3
sotheb

사용자 피드백 13

  • 감사합니다. 적용해보니 너무 좋네요^^

  • 잘 작동합니다. 활용도 매우 높은 자료 감사드립니다.

     

    아직 게시글이 많지 않아 속도저하(서버부하)에 대한 테스트는 불가한 상태지만 현재는 쾌적하게 잘 되고 있어요.

    향후 게시글 유의미하게 증가될 때 지속적으로 점검 해보겠습니다.

     

    아래는 현재로도 좋지만 UX 측면에서 개선되면 좋겠다 싶은 내용인데 여유되시면 부탁드립니다.

     

    1. 제목 외 확장변수 출력 가능
       - 다소 큰 작업 같은데 없으면 아쉬울 듯 합니다.
       - 최소 한개라고 출력되면 좋겠습니다.


    2. 출력 위치 "댓글 바로 아래" 추가
       - 이 위치도 많이 쓰일 듯 합니다.

  • @hatali

    제 개인 홈은 확장변수를 사용하지 않아서 생각을 못했는데,  확장변수를  집계로 추가하는 것은 다른 값들보다 복잡성이 있어 보이네요.  주말에 생까해 보겠습니다.

  • @index

    거듭 감사드립니다. 어떤 자료든 확장변수 있고 없고는 크게 느껴지더라구요.

  • @index

    업데이트 감사드립니다.

     

    확장변수 때문에 일이 많이 커진 것 같습니다.

    제 설명이 좀 부족했던 것 같습니다.

    아래 그림처럼 제목 외 확장변수 값(가격 등)을 출력하고 싶어서 부탁 드렸습니다. ㅠㅠ

     

    1.png

  • @hatali

    ㅎㅎ 그건 다소 개인적인데요~ ^^
    제목 밑에 지정된 확장 변수 항목 하나 넣을 수 있게 하고 모바일에서 제목과 확장변수 가운데 정렬 하게 수정해 보겠습니다.

  • @index

    아 너무 감사드립니다 

  • @index

    와~ 벌써 업데이트 해주셨네요. 정말 능력자이시네요.

     

    확장변수 단위와 천단위 쉼표까지 해주시고, 쾌적하게 잘 작동됩니다. ^^

    너무 감사드립니다. 

  • 애드온 설정 화면을 보시면 느껴지겠지만, 디자인을 못해서 기능 구현에 정보 과부하가 걸려 UI는 그다지 보기 좋지 않습니다. 
    시간 될때 디자인은 다시 구상해 보고 수정하겠습니다.

  • 안녕하세요

     

    좋은 애드온 감사합니다

     

    다름이 아니라 개선할점이 하나 보여서 의견 및 수정된 소스코드 전달 드립니다.

     

     

    일단 관련글 애드온이 최근글만 가져오는 로직이라 시리즈물이 나중에 되면 문제가 될 수 있습니다

     

    따라서 최신글 뿐만 아니라 해당 글 앞뒤로 글들을 후보군에 등록하는 로직을 추가하였습니다.

     

     

    image.png

     

     

    수정 사항은 아래와 같습니다

     

     

    기존의 같은 게시판 최신 글 후보 조회 로직은 그대로 유지하고, 현재 글을 기준으로 가까운 앞뒤 글을 추가 후보로 가져오는 기능만 추가했습니다.

     

    추가된 설정

    • use_adjacent_candidates

      • 현재 글 앞뒤 후보 사용 여부

      • 기본값 Y

    • adjacent_candidate_count

      • 현재 글보다 새 글과 오래된 글을 각각 몇 개씩 가져올지 설정

      • 기본값 120, 범위 1~300

    • 기존 candidate_count는 최신 글 후보 수로 그대로 사용

    예를 들어 adjacent_candidate_count = 120이면 현재 글 기준으로 새 글 120개와 오래된 글 120개를 각각 조회합니다.

     

    후보군 구성 변경

    $latest_candidates = self::getCandidateDocuments(
        $module_srl,
        $candidate_limit + 1
    );
    
    $adjacent_candidates = $use_adjacent_candidates
        ? self::getAdjacentCandidateDocuments(
            $module_srl,
            $document_srl,
            self::getDocumentValue($oDocument, 'list_order'),
            $adjacent_candidate_limit
        )
        : array();
    
    $candidates = self::mergeCandidateDocuments(array(
        $latest_candidates,
        $adjacent_candidates,
    ));

    최종 후보군은 다음과 같습니다.

    
     
    최신 글 후보
    + 현재 글보다 가까운 새 글 후보
    + 현재 글보다 가까운 오래된 글 후보
    - document_srl이 같은 중복 후보

     

     

    앞뒤 글 조회 방식

    현재 글의 list_order를 기준으로 범위 조회합니다.

    
     
    -- 현재 글보다 새 글
    WHERE module_srl = ?
      AND status = 'PUBLIC'
      AND list_order < 현재글_list_order
    ORDER BY list_order DESC
    LIMIT 설정값
    
     
    -- 현재 글보다 오래된 글
    WHERE module_srl = ?
      AND status = 'PUBLIC'
      AND list_order > 현재글_list_order
    ORDER BY list_order ASC
    LIMIT 설정값

    따라서 깊은 페이지의 OFFSET을 사용하거나 게시판 전체 글을 불러오지 않습니다. 현재 문서 객체에서 list_order를 구하지 못할 때만 현재 문서의 list_order를 한 번 조회합니다.

     

     

    중복 제거 로직

    최신 후보와 앞뒤 후보가 겹칠 수 있으므로 document_srl 기준으로 한 번만 남깁니다.

    
     
    private static function mergeCandidateDocuments($candidate_groups)
    {
        $documents = array();
        $seen = array();
    
        foreach((array) $candidate_groups as $group)
        {
            foreach((array) $group as $row)
            {
                $row = self::normalizeDocumentRow($row);
                $document_srl = isset($row['document_srl'])
                    ? (int) $row['document_srl']
                    : 0;
    
                if($document_srl <= 0 || isset($seen[$document_srl]))
                {
                    continue;
                }
    
                $seen[$document_srl] = true;
                $documents[] = $row;
            }
        }
    
        return $documents;
    }

     

    캐시 변경

    앞뒤 후보 설정이나 현재 글의 위치가 바뀌었을 때 기존 추천 캐시가 잘못 재사용되지 않도록 캐시 시그니처에 다음 값을 추가했습니다.

    
     
    'use_adjacent_candidates',
    'adjacent_candidate_count',
    
     
    $values['document_list_order']
        = (string) self::getDocumentValue($oDocument, 'list_order');

    기존 캐시와 구분하기 위해 내부 캐시 버전도 변경했습니다.

    
     
    const CACHE_VERSION = 14;

    에서:

    
     
    const CACHE_VERSION = 15;

    관련도 점수 계산, 출력 개수, 카테고리·제목·태그·본문·확장변수 점수 로직은 변경하지 않았습니다. 후보군을 만드는 부분만 확장한 것입니다.

     

  • @블리스세븐

    네~ 의미 있는 개선이네요. 제 개인 홈에서만 사용하다 보니 이 부분도 생각하지 못했습니다.
    그런데, 추천해 주신 앞뒤 후보 추가 방식에서도 사이에 글이 많으면 놓치는 경우가 발생하는데, 
    시리즈의 경우 확장변수나 태그를 별도 조회하는 방식을 적용하면 후보글이나 앞뒤글 구분 없이 전체글 기준으로 별도 지정할 수 있을 것 같고, 시리즈 회차에 맞춰서 표시 할 수 있을 것 같은데요. 이런 방식은 어떠세요?
     

  • @index

    일단 커뮤니티에 경우 유저들이 태그를 사용하지않아서 크게 의미가 없긴해요 

    블로그로 쓰시는 분들에겐 유용할듯합니다

    그리고 커뮤니티의 전체글들의 수가 상당해서 전체글을 다 조회하는건 서버에 부담을 주게 됩니다

     

    지금 최신글 + 해당 글 앞뒤로 추가로 후보를 뽑는 방식이 가장 부담이 없는듯합니다

     

     

    지금 제가 추가한 로직은 커뮤니티 해당 글 앞뒤로 넉넉하게 가져올수있어서 누락없이 작동합니다

     

    물론 시리즈물의 작성하는 텀이 정말 길다면 문제겠지만 일반적인 유저는 텀이 아주 길지는 않습니다

    게다가 앞뒤로 글을 가져오는 로직이야 300개의 값을 주면 해당 글 앞뒤로 300개씩 총 600개를 가져오기 떄문에 누락은 거의 없습니다

    정말 텀이 길다면 그런 특별한 경우까지 다 커버하기엔 서버에 부하가 너무 클듯해요 그냥 그정도의 글까진 후보로 안가져와도 될듯 합니다

     

    일반적인 경우에선 특정 글 앞뒤의 글들을 후보로 가져오는 로직으로 충분히 커버가 됩니다

     

     

    사실 좀 더 나아간다면 특정 게시판의 글을 동일한 게시판이 아니라도 가져오는 로직도 추가해볼까 고민중이긴 합니다

     

    왜냐면 정보글이 써지는 게시판과 잡담이 써지는 게시판이 분리되어있는 경우

     

    잡담 게시판의 글에서 관련글들이 추출될떄 정보글에서 가져올수있으면 좋을듯합니다

  • @블리스세븐

    네~ 옵션으로 추가해 보겠습니다. 
    이미 구현한 시리즈 옵션은 끄고 켤 수 있어 환경에 맞춰 선택 하도록 놔두겠습니다.