본문 바로가기
99% 에러잡기 시리즈/Github

[Github 99% 에러해결하기] Github Action 티스토리 블로그 RSS 406 Error - Not Acceptable 에러

by TLOWAC 2024. 4. 10.

🏃🏻 들어가며

이력서와 포트폴리오를 업데이트하며, 기존에 제작했던 Github Profile README 의 구성도 업데이트를 하게 되었습니다.

"README 를 꾸미는데 사용할 도구로 괜찮은게 없을까" 찾는 과정에서 다양한 템플릿을 지원하는 lowlighter/metrics 를 발견하게 되었고, 이를 사용해 README 업데이트 작업을 진행하였습니다. 

 

 

이 과정에서 티스토리 RSS 를 활용해 lowlighter/metrics 의 "블로그 포스팅 리스트" 템플릿을 설정하는 과정에서 발생한 406 에러에 대한 해결 과정을 담고 있는 포스팅 입니다.

다양한 템플릿을 지원하는 metrics

 


 

⚒️ lowlighter/metrics 작업

lowlighter/metrics 템플릿은 하나의 svg 파일을 생성하거나 여러개의 svg 파일을 생성하여 README 에 배치할 수 있습니다.

저는 필요한 템플릿을 모두 구성하고 하나의 svg 파일을 생성하여 정상적으로 동작하는지 테스트 후 템플릿 배치 변경을 위해 여러개의 svg 파일을 생성하여 재배치하는 방향으로 진행하고자 하였습니다.

 

1차 : Github Action 제작

기본적인 템플릿 제작은 별도의 Generator 페이지 가 있어 손쉽게 템플릿 구성과 그에 필요한 Github Action 코드를 만들 수 있었습니다.

# Generator 페이지에서 생성된 Github Action 코드
# Visit <https://github.com/lowlighter/metrics#-documentation> for full reference
name: Metrics
on:
  # Schedule updates (each hour)
  schedule: [{cron: "0 * * * *"}]
  # Lines below let you run workflow manually and on each commit
  workflow_dispatch:
  push: {branches: ["master", "main"]}
jobs:
  github-metrics:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - uses: lowlighter/metrics@latest
        with:
          token: ${{ secrets.METRICS_TOKEN }}

          # Options
          user: tlowac
          template: classic
          base: header, activity, community, repositories
          base_hireable: yes
          config_display: large
          config_padding: 1, 8 + 10%
          config_timezone: Asia/Seoul
          plugin_activity: yes
          plugin_activity_days: 14
          plugin_activity_filter: all
          plugin_activity_limit: 5
          plugin_activity_load: 298
          plugin_activity_visibility: all
          plugin_followup: yes
          plugin_followup_archived: yes
          plugin_followup_indepth: yes
          plugin_followup_sections: repositories
          plugin_languages: yes
          plugin_languages_analysis_timeout: 15
          plugin_languages_analysis_timeout_repositories: 7.5
          plugin_languages_categories: markup, programming
          plugin_languages_colors: github
          plugin_languages_limit: 8
          plugin_languages_recent_categories: markup, programming
          plugin_languages_recent_days: 14
          plugin_languages_recent_load: 300
          plugin_languages_sections: most-used
          plugin_languages_threshold: 0%
          plugin_rss: yes
          plugin_rss_limit: 4
          plugin_rss_source: https://helicopter55.tistory.com/rss

 

 

2차 : README.md 수정

앞서 제작한 Github Action 이 실행되고 Profile Repo 의 Root 경로에는 github-metrics.svg 가 결과물로 생성되게 됩니다.

( 별도의 파일명을 사용할 수 있으며, 템플릿을 쪼개서 각각의 파일을 만들어 사용할 수도 있습니다. )

 

이렇게 생성된 github-metrics.svg 를 README.md 에 불러와 사용하면 됩니다.

<p align="center">
	<img src="/github-metrics.svg" alt="Metrics" width="400">
</p>

 

 

3차 : 결과물 확인

생성된 lowlighter/metrics 템플릿이 정상적으로 Github Profile README 에 반영된것을 확인 할 수 있었습니다.

변경전(왼쪽) / 변경후(오른쪽)

 

 


 

💥 이슈 발생

여기까지 확인을 했다면 사실상 Github Action 을 쪼개고 템플릿 배치만 수정하여 README 를 업데이트하면 작업이 끝날것으로 예상을 했습니다. 하지만, 항상 한번에 끝나는건 없는것 같습니다 :)

 

1차 : 에러 로그 확인 Unexpected error > 406 Error - Not Acceptable

README 에서 “RSS feed” 템플릿에서 “Unexpected error” 가 발생한것을 발견하였습니다.

Gihub Action 은 “Passed” 로 표시되어 있더라도 로그상에서 티스토리 블로그의 rss 데이터를 불러오는 과정에서 에러가 발생하는것을 확인 할 수 있었습니다.

 


 

이슈 해결

1차(실패) : 블로그 포스팅 리스트 표시를 위한 Github Action 변경

예전에 gautamkrishnar/blog-post-workflow 를 사용하여 Github Action 을 구성했을때 티스토리 rss 데이터가 정상적으로 불러와졌던 기억이 있어 블로그 포스팅 템플릿만 대체할 생각으로 주석 처리해놓았던 코드를 되살려 Github Action 을 실행 해보았습니다.

 

하지만, 기대와는 다르게 여기서도 동일하게 406 Error - Not Acceptable 에러가 발생했습니다.

 

 

2차 : 찾게된 알맞은 검색 키워드

여러가지 키워드를 사용해 검색하는 과정에서 발견한 대부분의 글들은 Java + Spring 에서 발생하는 xml 파싱 406 에러에 대한 내용이었습니다. 명확한 해결책을 찾을 수 없어 삽질을 반복하고 있을때 gautamkrishnar/blog-post-workflow 프로젝트의 이슈를 발견하게 되었습니다.

 

 

3차 : gautamkrishnar/blog-post-workflow 406 Error 이슈 히스토리

당시에 제가 맞딱뜨린 이슈의 상황과 해당 이슈가 거의 유사했고 감사하게도 해당 이슈에 대한 히스토리와 동작이 되는 코드를 확인 할 수 있었습니다.

 

https://github.com/gautamkrishnar/blog-post-workflow/issues/19

 

[Bug]: Response 406 when asking for rss stream · Issue #19 · gautamkrishnar/blog-post-workflow

Describe the bug When I use the provided configuration and the cronjob runs I get a 406 Not Acceptable response in the github action as an error. To Reproduce Steps to reproduce the behavior: Imple...

github.com

 

accept-header 에 대한 문제 제기

 

로컬 환경에서 accept-header 를 “text/xml” 로 변경하여 테스트를 했을때 정상 동작

 

해당 사항을 반영하여 accept_header 를 수정할 수 있게 변경하였다.

 

 

실제로 해당 issue 에 연결된 PR 과 merge 된 코드를 확인해보았습니다.

Github Action 상에서 accept_header 를 입력할 수 있게 수정된것을 확인할 수 있었습니다.

 

 

4차 : 티스토리 RSS Response Header 의 Content-Type 확인

실제 티스토리 블로그의 RSS 의 Response Headers 를 확인해보았을때 "Content-Type : text/xml;charset=UTF-8" 인것을 확인할 수 있어 방향성에 대한 어느정도 확신을 갖게 되었습니다.

 

 

5차 : accept_header : "text/xml" 옵션 추가

  • 기존 : lowlighter/metrics
  • 변경 : gautamkrishnar/blog-post-workflow

블로그 포스팅 리스트 표시를 위한 Github Action 을 변경하고 accept_header : “text/xml” 와 user_agent 를 추가하고 실행해 보았습니다.

그 결과 Github Action 도 정상적으로 동작하고 블로그 포스팅 리스트도 노출되는것을 확인하였습니다! XD

gautamkrishnar/blog-post-workflow 에 user_agent 와 accept_header 를 추가
gautamkrishnar/blog-post-workflow 블로그 포스팅 GIthub action 정상 동작 확인

 


 

🚀 결과물!

블로그 포스팅 리스트가 정상적으로 노출!

 


 

마무리하며

Github Action 을 lowlighter/metrics에서gautamkrishnar/blog-post-workflow 로 변경하고 accept_header 을 수정하며 문제를 해결 할 수 있었습니다.

 

이 과정에서 lowlighter/metrics 에서도 accept_header 를 수정할 수 있는지 확인해보았는데 아쉽게도 해당 기능은 지원하지 않는것 같았습니다. 나중에 기회가 되면 해당 issue 로 contribution 하는것도 고려해 보아야겠습니다 :)

lowlighter/metrics 의 RSS Feed 템플릿 Github Action 옵션 정보

 

 

 

 

긴글을 끝까지 읽어주셔서 감사합니다.

이만 글을 줄입니다.

 

 

 

 

 

댓글