====== NewstoHR.py: 데일리 뉴스레터 자동 생성 스크립트 ====== ''NewstoHR.py''는 **Dream of E&C 자동화 시스템**의 핵심 구성 요소 중 하나입니다. 이 스크립트는 매일 아침 HR지원실 직원들에게 맞춤형 정보를 담은 이메일 뉴스레터를 자동으로 생성하고 발송함으로써, 정보 습득의 효율성을 높이고 업무 생산성 향상에 기여합니다. 이 스크립트는 다양한 외부 데이터 소스(예: OpenAI, 네이버 뉴스, 한국은행 경제통계시스템)로부터 정보를 수집하고, 이를 가공하여 하나의 정돈된 HTML 이메일 본문으로 종합하는 복잡하면서도 효율적인 자동화 파이프라인을 구축하고 있습니다. ---- ===== 1. 시스템 개요 및 목적 ===== ''NewstoHR.py'' 스크립트는 정보 과부하 시대에 필수적인 맞춤형 정보 제공을 목표로 합니다. HR지원실 직원들이 매일 필요한 최신 시사, 경제, 지식 정보를 별도의 검색 없이 한눈에 파악할 수 있도록 돕는 것이 주된 목적입니다. ---- ===== 2. 주요 기능 및 실행 순서 ===== ''NewstoHR.py'' 스크립트의 핵심 로직은 ''main()'' 함수를 중심으로 다음과 같은 체계적인 순서로 동작합니다. - **공휴일 확인**: ''pytimekr'' 라이브러리를 사용하여 스크립트 실행일이 대한민국의 공휴일인지 여부를 확인합니다. 공휴일인 경우, 불필요한 뉴스레터 발송을 방지하고 시스템 리소스를 절약하기 위해 스크립트가 즉시 종료됩니다. 이는 비업무일에 대한 고려 사항입니다. - **콘텐츠 생성 (OpenAI GPT)**: ''get_gpt_content()'' 함수는 OpenAI의 최신 언어 모델인 ''gpt-4o-mini''를 호출하여 다음과 같은 4가지 주제의 짧고 유익한 콘텐츠를 생성합니다. * 오늘의 명언 (''quote'') * 실용 영어 한 문장 (''english'') * 교훈적 사자성어 (''idiom'') * 최신 시사/경제 용어 (''term'') * **중복 방지 로직**: 이전에 생성되었던 내용은 ''gpt_history.json'' 파일에 기록되어 관리됩니다. 새로운 콘텐츠를 요청할 때, 이 기록을 참조하여 중복되지 않는 신선한 내용을 받을 수 있도록 프롬프트가 동적으로 구성됩니다. 이는 뉴스레터의 정보 가치를 지속적으로 유지하는 데 중요합니다. - **뉴스 스크래핑**: ''scrape_naver_news()'' 함수는 ''requests''와 ''BeautifulSoup4'' 라이브러리를 활용하여 네이버 뉴스의 속보 섹션에서 실시간 기사를 스크랩합니다. 이 과정에서 기사 제목, 요약 내용, 원본 링크, 그리고 대표 이미지 URL 등의 핵심 정보를 수집합니다. * 정치, 경제, 사회, IT/과학 등 주요 섹션의 뉴스를 포괄적으로 수집하여 다양한 분야의 최신 이슈를 전달합니다. - **경제 지표 수집**: ''get_economic_stats()'' 함수는 한국은행(BOK) 경제통계시스템의 공식 API를 호출하여 실시간 경제 지표 데이터를 가져옵니다. * 주요 수집 지표에는 최신 환율(미국 달러, 일본 엔, 유로), 국내 주식 시장의 코스피 지수, 그리고 주요 회사채 수익률 등이 포함되어, 거시 경제 동향을 한눈에 파악할 수 있도록 돕습니다. - **이메일 본문 생성**: ''build_html_content()'' 함수는 강력한 ''Jinja2'' 템플릿 엔진을 사용하여 최종 이메일 본문을 구성합니다. * 지금까지 수집하고 생성된 모든 데이터(GPT 콘텐츠, 네이버 뉴스 기사 목록, 경제 지표 등)가 ''newsletter_template.html'' 파일에 정의된 HTML 구조에 정확하게 삽입되어, 시각적으로 매력적이고 정보 전달력이 높은 이메일 본문이 완성됩니다. - **수신자 목록 로드**: ''get_email_list_from_yaml()'' 함수는 보안 및 관리의 용이성을 위해 별도로 정의된 ''email_list.yaml'' 파일에서 뉴스레터를 수신할 대상자들의 이메일 주소 목록을 안전하게 읽어옵니다. 이 파일은 쉽게 업데이트될 수 있도록 구성되어 있습니다. - **이메일 발송**: ''send_newsletter()'' 함수는 표준 ''smtplib'' 라이브러리를 사용하여 네이버 SMTP 서버에 안전하게 접속합니다. * 생성된 HTML 본문과 로드된 수신자 목록을 기반으로 각 대상자에게 맞춤형 데일리 뉴스레터를 자동으로 발송합니다. 발송 과정에서의 오류 처리 메커니즘도 포함되어 있습니다. ---- ===== 3. 기술 스택 및 주요 라이브러리 ===== ''NewstoHR.py'' 스크립트 개발에 사용된 주요 Python 라이브러리 및 그 역할은 다음과 같습니다. * ''openai'': OpenAI의 인공지능 모델(예: ''gpt-4o-mini'')과의 상호작용 및 콘텐츠 생성을 위해 사용됩니다. * ''requests'': 웹 페이지의 HTML 콘텐츠를 가져오기 위한 HTTP 요청을 처리하는 데 사용됩니다. * ''beautifulsoup4'': ''requests''로 가져온 HTML 콘텐츠를 파싱(parsing)하고, 필요한 데이터를 추출하는 웹 스크래핑 핵심 라이브러리입니다. * ''jinja2'': 수집된 데이터를 미리 정의된 HTML 템플릿에 동적으로 삽입하여 최종 이메일 본문을 생성하는 데 사용되는 강력한 템플릿 엔진입니다. * ''pytimekr'': 대한민국 공휴일을 정확하게 확인하고, 스크립트 실행 여부를 결정하는 데 활용됩니다. * ''pyyaml'': 수신자 목록과 같은 설정 정보를 YAML 형식의 파일에서 쉽고 안전하게 읽어오는 데 사용됩니다. * ''pandas'': 한국은행 API를 통해 수집된 경제 지표 데이터를 효율적으로 처리하고 정제하는 데 유용하게 사용됩니다. * ''smtplib'': 이메일 발송을 위해 SMTP(Simple Mail Transfer Protocol) 서버와의 통신을 관리하는 표준 라이브러리입니다. ---- ===== 4. 실행 환경 및 추가 정보 ===== ---- ==== 1) 스크립트 실행 자동화 ==== 이 ''NewstoHR.py'' 스크립트는 ''Automail.sh''라는 셸 스크립트에 의해 주기적으로 실행되도록 설정되어 있습니다. 일반적으로 ''Linux'' 시스템의 ''cron'' 스케줄러를 통해 매일 아침 지정된 시간에 자동으로 실행되어 뉴스레터 발송 프로세스를 시작합니다. ---- ==== 2) 개발 및 유지보수 ==== ''NewstoHR.py''는 모듈화된 구조로 설계되어 있어, 새로운 콘텐츠 소스 추가나 기존 로직 변경 시 유연하게 대응할 수 있습니다. 향후 사용자 피드백을 반영하여 콘텐츠의 다양성을 높이거나, 개인화 기능을 강화하는 방향으로 지속적인 업데이트가 이루어질 예정입니다.