Skip to content

fix: 크롤링 예외처리 개선 및 봇 탐지 방지#16

Merged
dh0304 merged 10 commits into
devfrom
fix/crawl-fail
Jul 8, 2025
Merged

fix: 크롤링 예외처리 개선 및 봇 탐지 방지#16
dh0304 merged 10 commits into
devfrom
fix/crawl-fail

Conversation

@dh0304

@dh0304 dh0304 commented Jul 8, 2025

Copy link
Copy Markdown
Contributor

관련 이슈

#14 #11

Cursor AI를 통해 개선했습니다.
이전과 마찬가지로 스프링 배치 -> AWS Lambda 호출 및 응답과 관련된 코드만 개선했습니다.
이전에 정리하지 못한 코드를 개선했습니다.

withins Repository 후속 작업을 위해 PR 선 반영할게요!


🚀 크롤링 예외처리 개선

🎯 주요 개선사항

  • HOF 패턴 → Decorator 패턴으로 전환
  • 에러 처리 개선: AWS Lambda의 응답을 stacktrace로 받을 수 있게 구성, 중복 에러 메시지 제거
  • 봇 탐지 방지: HTTP 헤더 및 브라우저 설정 최적화

📊 변경 통계

🎨 아키텍처 개선

1. HOF 패턴 → Decorator 패턴 전환

Before (HOF 패턴):

private uploadResultSafely = withErrorHandling(
    async (results: any[], targetDate: TargetDate, jobName: string): Promise<string> => {
        return await this.s3Uploader.uploadCrawlingResults(results, targetDate.value, jobName);
    },
    OPERATION_CONTEXT.S3_UPLOAD
);

After (Decorator 패턴):

@HandleErrors(OPERATION_CONTEXT.S3_UPLOAD, ERROR_MESSAGES.S3_UPLOAD_FAILED)
async uploadResults(results: any[], targetDate: TargetDate, jobName: string): Promise<string> {
    return await this.s3Uploader.uploadCrawlingResults(results, targetDate.value, jobName);
}

2. ES2022 Error.cause

AppError

export class AppError extends Error {
    constructor(
        message: string,
        public readonly context: string,
        cause?: Error,  // ES2022 표준 활용
        public readonly metadata?: Record<string, unknown>
    ) {
        super(message, { cause });  // 🔥 ES2022 Error.cause 문법
        this.name = 'AppError';
        Object.setPrototypeOf(this, new.target.prototype);
    }
}

Lambda 응답 구조 개선:

// 에러 발생 시 구조화된 디버깅 정보 제공
{
    "success": false,
    "message": "크롤링 실패",
    "error": {
        "message": "connect ECONNREFUSED 127.0.0.1:9222",  // 기술적 상세 정보
        "context": "브라우저 초기화",                        // 비즈니스 컨텍스트
        "stack": "Error: connect ECONNREFUSED..."          // 스택 트레이스
    }
}

🛡️ 봇 탐지 방지 강화

브라우저 설정 최적화

// JobExecutor.ts - createPage 메서드
await page.setExtraHTTPHeaders({
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
});

새로운 워크플로우:

  • deploy-test.yml: 테스트 전용 Lambda 배포

@dh0304 dh0304 linked an issue Jul 8, 2025 that may be closed by this pull request
@dh0304 dh0304 merged commit 8b0467a into dev Jul 8, 2025
1 check passed
@dh0304 dh0304 deleted the fix/crawl-fail branch July 8, 2025 17:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

대한의료사회복지사협회 크롤링 실패

1 participant