From 8916b21449bbf5f03da013962dff4c497468543c Mon Sep 17 00:00:00 2001 From: juhy0987 Date: Thu, 7 May 2026 20:56:26 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[REFAC]:=20GoDoc=20=EC=A0=95=ED=95=A9?= =?UTF-8?q?=EC=84=B1=20=EB=B3=B4=EA=B0=95=20=E2=80=94=20exported=20?= =?UTF-8?q?=EC=8B=9D=EB=B3=84=EC=9E=90=20docstring=20=EC=B2=AB=20=EB=8B=A8?= =?UTF-8?q?=EC=96=B4=20=EC=8B=9D=EB=B3=84=EC=9E=90=EB=AA=85=20=EC=9D=BC?= =?UTF-8?q?=EC=B9=98=20(=EC=9D=B4=EC=8A=88=20#303)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit godoc 컨벤션 위반 검출 스크립트로 5건 정정: 1. internal/storage/parsing_rule.go:23 [MISMATCH] TargetTypeArticle: 첫 단어 "호환성" → "TargetTypeArticle 은 ..." 으로 정정. Deprecated 마커 보존. 2. internal/processor/fetcher/domain/general/handler.go:51 [MISSING] NewGoQueryFetchHandler: godoc 추가 — 1차 fetch + lazy escalate 신호 의도. 3. handler.go:113 [MISSING] NewBrowserFetchHandler: godoc 추가 — chain 마지막 link 의도. 4. internal/processor/fetcher/domain/general/fetcher/browser.go:26 [MISSING] NewBrowserFetcher: godoc 추가 — lazy initialize 의도. 5. internal/processor/fetcher/domain/general/fetcher/goquery.go:19 [MISSING] NewGoqueryFetcher: godoc 추가 — adapter 의도. protobuf generated code (.pb.go) 12건은 본 PR scope 외 (자동 생성 — 직접 godoc 추가 시 다음 protoc 호출에 사라짐, golangci-lint 도 generated 제외). Co-Authored-By: Claude Opus 4.7 (1M context) --- internal/processor/fetcher/domain/general/fetcher/browser.go | 2 ++ internal/processor/fetcher/domain/general/fetcher/goquery.go | 1 + internal/processor/fetcher/domain/general/handler.go | 4 ++++ internal/storage/parsing_rule.go | 3 ++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/internal/processor/fetcher/domain/general/fetcher/browser.go b/internal/processor/fetcher/domain/general/fetcher/browser.go index eabf745d..50f8e292 100644 --- a/internal/processor/fetcher/domain/general/fetcher/browser.go +++ b/internal/processor/fetcher/domain/general/fetcher/browser.go @@ -23,6 +23,8 @@ type BrowserFetcher struct { initialized bool } +// NewBrowserFetcher 는 chromedp 기반 BrowserFetcher 를 생성합니다. +// 첫 Fetch 호출 시점에 lazy initialize — 사용 안 되는 instance 의 Chrome 자원 점유 회피. func NewBrowserFetcher(crawler *cdp.ChromedpCrawler, config core.Config) *BrowserFetcher { return &BrowserFetcher{crawler: crawler, config: config} } diff --git a/internal/processor/fetcher/domain/general/fetcher/goquery.go b/internal/processor/fetcher/domain/general/fetcher/goquery.go index 3bf2d549..2cf809a5 100644 --- a/internal/processor/fetcher/domain/general/fetcher/goquery.go +++ b/internal/processor/fetcher/domain/general/fetcher/goquery.go @@ -16,6 +16,7 @@ type GoqueryFetcher struct { crawler *goquery.GoqueryCrawler } +// NewGoqueryFetcher 는 GoqueryCrawler 를 wrap 한 GoqueryFetcher 를 생성합니다. func NewGoqueryFetcher(crawler *goquery.GoqueryCrawler) *GoqueryFetcher { return &GoqueryFetcher{crawler: crawler} } diff --git a/internal/processor/fetcher/domain/general/handler.go b/internal/processor/fetcher/domain/general/handler.go index 4ad1bee1..13d068d7 100644 --- a/internal/processor/fetcher/domain/general/handler.go +++ b/internal/processor/fetcher/domain/general/handler.go @@ -48,6 +48,8 @@ type GoQueryFetchHandler struct { lazyKeywords []string } +// NewGoQueryFetchHandler 는 정적 HTML 만 처리하는 1차 fetch handler 를 생성합니다. +// lazyKeywords 가 HTML 에 매칭되면 chromedp 로 escalate 신호 (ErrLazyContentNeedsBrowser) 반환. func NewGoQueryFetchHandler(fetcher Fetcher, log *logger.Logger, lazyKeywords ...string) *GoQueryFetchHandler { return &GoQueryFetchHandler{ baseHandler: baseHandler{log: log}, @@ -110,6 +112,8 @@ type BrowserFetchHandler struct { fetcher Fetcher } +// NewBrowserFetchHandler 는 chromedp 헤드리스 브라우저 기반 fetch handler 를 생성합니다. +// chain 의 마지막 link — 여기서 실패하면 job 자체 실패. func NewBrowserFetchHandler(fetcher Fetcher, log *logger.Logger) *BrowserFetchHandler { return &BrowserFetchHandler{baseHandler: baseHandler{log: log}, fetcher: fetcher} } diff --git a/internal/storage/parsing_rule.go b/internal/storage/parsing_rule.go index 548d1a9d..85f2f196 100644 --- a/internal/storage/parsing_rule.go +++ b/internal/storage/parsing_rule.go @@ -18,7 +18,8 @@ const ( TargetTypeList TargetType = "list" ) -// 호환성 — 기존 TargetTypeArticle 명칭이 코드/DB 에 잔존할 수 있어 별칭 유지. +// TargetTypeArticle 은 TargetTypePage 의 호환 별칭입니다 — 기존 코드/DB 에 잔존할 수 있어 유지. +// // Deprecated: TargetTypePage 사용 권장 (도메인 일반화). const TargetTypeArticle = TargetTypePage From 6f3771a10b6fd25e7fd1a420341680482656162d Mon Sep 17 00:00:00 2001 From: juhy0987 Date: Thu, 7 May 2026 21:01:46 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[FIX]:=20=ED=94=BC=EB=93=9C=EB=B0=B1=20?= =?UTF-8?q?=EB=B0=98=EC=98=81,=20PR=20#304=20=E2=80=94=20chain=20=EC=9C=84?= =?UTF-8?q?=EC=B9=98=20=EC=9D=98=EC=A1=B4=20godoc=20=ED=91=9C=ED=98=84=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20(=EC=9D=B4=EC=8A=88=20#303)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gemini medium 2건 반영: - NewGoQueryFetchHandler: '1차 fetch handler' → '정적 HTML 처리를 담당하는' (역할 중심) - NewBrowserFetchHandler: 'chain 의 마지막 link' → '브라우저 렌더 실패 시 chain 위임 없이 job 실패' (동작 중심) 향후 chain 구성 변경 시 godoc 이 stale 되지 않도록 chain 순서 의존 표현 회피. gemini medium #1 (GoQuery vs Goquery 명칭 혼용) 은 본 PR scope 외 — 식별자 rename 은 별도 이슈 영역 (godoc 정합성 vs 식별자 명명 컨벤션 정책 분리). Co-Authored-By: Claude Opus 4.7 (1M context) --- internal/processor/fetcher/domain/general/handler.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/processor/fetcher/domain/general/handler.go b/internal/processor/fetcher/domain/general/handler.go index 13d068d7..b450e690 100644 --- a/internal/processor/fetcher/domain/general/handler.go +++ b/internal/processor/fetcher/domain/general/handler.go @@ -48,8 +48,8 @@ type GoQueryFetchHandler struct { lazyKeywords []string } -// NewGoQueryFetchHandler 는 정적 HTML 만 처리하는 1차 fetch handler 를 생성합니다. -// lazyKeywords 가 HTML 에 매칭되면 chromedp 로 escalate 신호 (ErrLazyContentNeedsBrowser) 반환. +// NewGoQueryFetchHandler 는 정적 HTML 처리를 담당하는 fetch handler 를 생성합니다. +// lazyKeywords 가 HTML 에 매칭되면 chromedp 로의 escalate 신호 (ErrLazyContentNeedsBrowser) 를 반환합니다. func NewGoQueryFetchHandler(fetcher Fetcher, log *logger.Logger, lazyKeywords ...string) *GoQueryFetchHandler { return &GoQueryFetchHandler{ baseHandler: baseHandler{log: log}, @@ -113,7 +113,7 @@ type BrowserFetchHandler struct { } // NewBrowserFetchHandler 는 chromedp 헤드리스 브라우저 기반 fetch handler 를 생성합니다. -// chain 의 마지막 link — 여기서 실패하면 job 자체 실패. +// 브라우저 렌더 실패 시 chain 위임 없이 job 실패로 종결합니다. func NewBrowserFetchHandler(fetcher Fetcher, log *logger.Logger) *BrowserFetchHandler { return &BrowserFetchHandler{baseHandler: baseHandler{log: log}, fetcher: fetcher} }