-
Notifications
You must be signed in to change notification settings - Fork 0
Refact : 네이버 도메인 외 타 사이트 뉴스 리포트 생성 분기 처리 #37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Test Results1 tests 1 ✅ 0s ⏱️ Results for commit 1126e9b. ♻️ This comment has been updated with latest results. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
디자인 패턴 수업에서 배웠던 개념을 실제 프로젝트에서 이렇게 적용한 사례를 보게 되어 흥미롭게 봤습니다!! 특히 두 개의 패턴을 함께 적용한 사례는 실제 코드로 처음 접해서 인상 깊었습니다
전략 패턴은 "상황에 따라 알고리즘을 바꿔 끼우는 방식",
팩토리 메서드 패턴은 "구체 클래스를 직접 생성하는 코드를 감추는 방식" 정도로만 이해하고 있는데요..! 이런 얕은.. 배경 지식을 바탕으로 코드를 읽어봤습니다.
전략 패턴은 NewsExtractorStrategy 인터페이스를 중심으로
뉴스 도메인별로 처리 가능한지 판단하는 canExtract()와 실제 기사를 추출하는 extract() 메서드를 전략화한 구조라고 이해했습니다.
그리고 impl 패키지 아래에 있는 클래스들이 실제 전략 구현체로
도메인에 따라 로직이 다르게 정의된 것을 확인했습니다..
NewsExtractorFactory는 등록된 전략 중 canExtract(url)이 true인 구현체를 골라서
해당 전략의 extract()를 실행하는 역할을 맡고 있어서, 다양한 뉴스 도메인을 유연하게 처리할 수 있는 구조로 보였고 지금 같이 뉴스 종류가 많은 상황에서 확장성 면에서도 상당히 좋아 보였습니다!
또한 AbstractNewsExtractor 클래스에는 각 전략에서 공통으로 사용할 수 있는
HTML 파싱, 텍스트 정제, 날짜 추출 등등등.. 로직이 잘 정리되어 있어서 중복을 줄이고 유지보수에도 도움이 되겠다는 생각이 들었습니다.
크롤링 관련 세세한 부분까지 완전히 이해한 건 아니지만 전체적인 흐름과 구조는 잘 전달받을 수 있었습니다! (혹시라도.. 제가 잘못 이해한 부분이 있다면 알려주세요))
다만 ReportServiceImpl 코드를 보면서 한 가지 궁금했던 점이 있었는데요
이미 전략 패턴으로 뉴스 도메인별 처리를 유연하게 할 수 있도록 구성되어 있음에도
해당 클래스에서는 isNaverNewsDomain()을 기준으로 네이버 뉴스만 별도로 분기해서 처리하고 있더라고요. 혹시 네이버 뉴스만 별도로 처리하는 특별한 이유가 있을까요? (그냥 just 궁금)
예를 들어 프롬프트를 다르게 주거나 분석 방식이 다른 건지 궁금했습니다!!
|
말씀해주신 부분이 맞습니다..! 새벽에 급하게 하다보니 기존 로직 부분을 수정하지 않았었네요... 꼼꼼하게 봐주셔서 감사합니다!! 추가로.. 오마이뉴스 도메인 기사들이 카테고리별로 html 형태가 많이 달라서 처음에 만들고 테스트할 땐 잘되어서 된 줄 알았는데 다시 보니 카테고리 별 html 형태가 많이 다른 것 같습니다.. 마감기한이 얼마 남지 않아 일단 제외하는 형태로 수정했습니다 ㅠㅠ 추가로 전략 패턴으로 각 사이트의 추출 로직을 캡슐화하고, 팩토리 패턴으로 적절한 도메인을 선택하는 조합을 생각하고 구현했습니다! |
관련 이슈
#35
작업한 내용
PR Point 및 참고사항, 스크린샷
기존에 단일 뉴스 사이트(네이버뉴스)만 지원하던 구조에서, 다양한 뉴스 사이트(연합뉴스, 뉴시스, 뉴스1, 노컷뉴스, 오마이뉴스)를 지원하려 리팩을 고민하는 시점에서... 각 사이트마다 HTML 구조가 달라서 사이트별로 다른 추출 로직이 필요했습니다.
이런 상황에서 이전에 얼핏 본 전략 패턴(Strategy Pattern)을 도입하면 각 뉴스 사이트별로 독립적인 추출 전략을 구현할 수 있고, 팩토리 패턴(Factory Pattern)을 조합하면 런타임에 적절한 추출기를 선택할 수 있어 해당 패턴을 공부하며 구현하느라 좀 늦었습니다..(생각보다 도메인 별 html구조가 많이 다르기도 했고..) ㅠㅠ 엉성할 수도 있어서 이상하면 말씀해주세용..
아래는 참고한 블로그입니다.