feat(seo): 사이트맵 증분 저장소 + 리소스 리스너 재배선
사이트맵을 리소스 단위로 영속화(sitemap_urls)해 진정한 증분 갱신과 도메인 재쿼리 없는 파일 재작성을 구현했다. 리소스 공개/비공개/삭제 시 해당 항목만 색인이 갱신되고, 관리자=full·스케줄러=auto·리소스 변경=증분으로 동작한다. - sitemap_urls 마이그레이션 + SitemapUrl 모델. loc(2048) 를 unique 에 직접 넣으면 InnoDB 키 길이를 초과하므로 loc_hash(sha256) 컬럼을 identity 로 사용 - SitemapUrlRepository(멱등 upsert / remove / 스트리밍) + SitemapIndexer (+ 제3자용 sitemap.index.collect_for_resource 필터 훅) - 4 리스너 재배선: 공개→색인 / 비공개·삭제→색인 해제 + 재생성 잡 디바운스 디스패치. 3 기여자가 resource_type/resource_id 를 함께 emit 해 전체·증분 identity 를 일치 - 재생성 모드를 SitemapGenerationMode Backed Enum 으로 통일(Command→Job→Manager) - seo:generate-sitemap 에 --rebuild / --mode 옵션 추가
This commit is contained in:
1 parent
1a6fca0d6b
commit
1629684156
34 files changed
+2027
-23
No files matched your search
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
/**
|
||||
* 사이트맵 재생성 모드 Enum
|
||||
*
|
||||
* SitemapManager::regenerate 와 GenerateSitemapJob, seo:generate-sitemap 커맨드가
|
||||
* 공유하는 재생성 모드 도메인입니다.
|
||||
*
|
||||
* - Full: 저장소 상태와 무관하게 각 기여자를 스트리밍해 sitemap_urls 를 전량 대체한 뒤 파일 재작성.
|
||||
* - Auto: 저장소가 비어 있으면 Full, 아니면 Incremental 로 동작(스케줄러 기본).
|
||||
* - Incremental: 기여자 재쿼리 없이 저장소의 현재 델타만으로 파일 재작성.
|
||||
*/
|
||||
enum SitemapGenerationMode: string
|
||||
{
|
||||
/**
|
||||
* 전체 재생성 (관리자 수동 = 항상 Full)
|
||||
*/
|
||||
case Full = 'full';
|
||||
|
||||
/**
|
||||
* 자동 판정 (빈 저장소=Full / 채워짐=Incremental)
|
||||
*/
|
||||
case Auto = 'auto';
|
||||
|
||||
/**
|
||||
* 증분 재생성 (저장소 델타만 파일로 반영)
|
||||
*/
|
||||
case Incremental = 'incremental';
|
||||
|
||||
/**
|
||||
* 저장소 상태를 반영해 실제 실행 모드(Full 또는 Incremental)로 해석합니다.
|
||||
*
|
||||
* Auto 는 저장소가 비어 있으면 Full, 아니면 Incremental 로 해석됩니다.
|
||||
*
|
||||
* @param int $visibleCount 저장소의 공개 URL 수
|
||||
* @return self 실제 실행 모드 (Full | Incremental)
|
||||
*/
|
||||
public function resolve(int $visibleCount): self
|
||||
{
|
||||
return match ($this) {
|
||||
self::Full => self::Full,
|
||||
self::Incremental => self::Incremental,
|
||||
self::Auto => $visibleCount === 0 ? self::Full : self::Incremental,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user