ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Alo 재입고 알림봇 개발_5(Self-hosted runner)
    Dev🚀 2025. 9. 13. 17:21

    이전글:

    https://jungheeho.tistory.com/102

     

    Alo 재입고 알림봇 개발_4(HTML fallback 보강)

    이전글:https://jungheeho.tistory.com/101 Alo 재입고 알림봇 개발_3이전글:https://jungheeho.tistory.com/100 Alo 재입고 알림봇 개발_2이전글:https://jungheeho.tistory.com/99 Alo 재입고 알림봇 개발_1🌱 개발 배경- 평소에

    jungheeho.tistory.com


    지금 “재고 확인 실패”가 계속 뜨는 건 GitHub Actions 서버(IP 대역)가 Alo/Shopify WAF(봇 차단 시스템)에 걸린 상태라서, JSON도 403, HTML도 불완전 응답을 내주기 때문.

    🔑 Self-hosted runner로 해결해보자

    • GitHub Actions는 전 세계적으로 공유되는 고정된 클라우드 IP → 쇼핑몰 입장에서 너무 많은 트래픽이 찍히니 차단.
    • 내 PC/집 인터넷은 일반 사용자의 브라우저 요청처럼 보이기 때문에 차단될 확률이 훨씬 낮음.
    • 결국 GitHub 대신 내 PC / NAS / 라즈베리파이 같은 장치를 러너로 등록하면 → 같은 워크플로우가 내 집 IP에서 실행됨.

    🛠️ Self-hosted runner 등록 방법

    1. 레포 설정 들어가기
      • GitHub → 해당 저장소 → Settings → 왼쪽 사이드바에서 Actions → Runners
    2. 새 러너 추가
      • New self-hosted runner 클릭
      • OS 선택 (Linux / macOS / Windows)
    3. 터미널에서 명령 실행
      GitHub이 안내해주는 명령어를 그대로 복사해서 내 PC에서 실행:
    # 예시 (Linux)
    mkdir actions-runner && cd actions-runner
    curl -o actions-runner-linux-x64-2.321.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.321.0/actions-runner-linux-x64-2.321.0.tar.gz
    tar xzf ./actions-runner-linux-x64-2.321.0.tar.gz
    
    # GitHub에서 발급해준 토큰으로 등록
    ./config.sh --url https://github.com/<유저명>/<레포명> --token <등록토큰>

       
         4. 러너 실행

    ./run.sh

    → 이제부터 내 PC에서 워크플로우가 실행됨.

         5. 백그라운드 서비스로 등록

    • Linux라면 systemd 서비스 등록 가능.
    • Windows라면 run.cmd 대신 svc install 해서 서비스로 등록.

     

    🚦 고려할 점

    • 내 PC를 러너로 쓰려면 켜져 있어야 실행됨.
    • 집에서 돌린다면 전기/발열 부담 거의 없음(10~20분마다 잠깐 실행).
    • 라즈베리파이 같은 소형 기기에 러너 설치해두면 24/7 운영에 딱 좋음.
    • 회사 노트북 같은 데에 설치하면 절전 모드 들어가면 안 돌아가니 주의.

    ✅ 정리

    • 지금처럼 GitHub Actions 기본 러너는 WAF 때문에 계속 실패 알림이 나옴.
    • Self-hosted runner로 옮기면 내 집 IP라서 정상 HTML/JSON 응답을 받을 가능성이 매우 높음.

     


     

    이제 self-hosted runner를 등록했으니, GitHub Actions 워크플로우에서 그 러너를 쓰도록 설정만 바꾸면 됨.

    1️⃣ 워크플로우 yml 수정하기

    지금 alo_checker.yml 안에는 이렇게 되어 있을 것임:

     

    jobs:
      check-stock:
        runs-on: self-hosted  	# 이렇게 수정

     

    2️⃣ 러너 실행 상태 유지

    러너를 실행해야 Actions가 내 PC에서 작업을 돌림.
    등록 후 실행은:

    cd ~/actions-runner
    ./run.sh

    터미널 창이 켜져 있어야 러너가 살아있습니다.

    3️⃣ 실행 확인

    1. yml 수정해서 커밋/푸시
    2. GitHub → Actions 탭 → 워크플로우 실행
    3. 실행 로그에 Running job on self-hosted runner 같은 문구가 뜨면 성공

    현재는 ./run.sh를 터미널에서 직접 띄워둬야만 runner가 살아있습니다.
    그래서 노트북을 끄거나 재부팅하면 runner 프로세스가 종료됨.

     

    🤖 이걸 자동화하는 방법 (Mac 기준)

    다행히 GitHub에서 svc.sh 스크립트를 제공해서, 로그인할 때 자동으로 runner가 실행되게 만들 수 있습니다.

     

    1. 러너 폴더로 이동:

     
    cd ~/actions-runner

    2. 서비스 등록:

    ./svc.sh install
    ./svc.sh start

    3. 상태 확인:

     
     
    ./svc.sh status

     

    이제부터는:

    • 맥을 재부팅하고 로그인하면 runner가 자동으로 백그라운드에서 실행됩니다.
    • 더 이상 매번 터미널 열고 ./run.sh 안 쳐도 돼요.
    • 중지하고 싶으면:
    ./svc.sh stop
    ./svc.sh uninstall

     

    🚨 오류 발생

    mkdir: /Users/runner: Permission denied

    즉, GitHub Actions 기본 워크플로우(yml)는 GitHub-hosted runner(ubuntu-latest) 기준으로 작성된 거라서, 내 Mac self-hosted runner에서는 /Users/runner 같은 경로를 만들 권한이 없어서 깨진 겁니다.

    왜 이런 일이 생겼나?

    • actions/setup-python@v4 액션은 GitHub-hosted runner 전용으로, Python 버전을 다운로드해서 /Users/runner/... 캐시에 깔려고 해요.
    • 하지만 self-hosted runner는 내가 직접 만든 환경 → /Users/runner 같은 경로 없음 → 권한 오류 발생.

     


     

    <정리>


    🔄 1. 기존 방식 (GitHub-hosted runner)

    • runs-on: ubuntu-latest 로 설정 → 깃허브가 제공하는 클라우드 VM에서 실행.
    • 특징:
      • 내가 노트북을 꺼놔도 24/7 동작.
      • 무료 플랜에서는 월 2,000분 제한.
      • Actions 서버 IP가 고정이라, Alo/Shopify 같은 사이트에서 봇 트래픽 차단에 걸릴 확률 높음.
      • 실행 환경은 매번 초기화 → 상태 파일/캐시 관리가 귀찮음.

    🖥️ 2. Self-hosted runner (내 로컬)

    • runs-on: self-hosted → 내 맥북/라즈베리파이/NAS에서 워크플로우 실행.
    • 특징:
      • 실행 환경 = 내 컴퓨터.
        → requests, bs4 등 라이브러리 설치 유지됨.
      • 내 집/개인 네트워크 IP로 요청하니, 403 차단에 걸릴 확률 낮음.
      • 실행 시간은 내 장치가 켜져 있을 때만. 잠자거나 꺼지면 워크플로우도 멈춤.
      • 내 CPU/RAM을 사용 → 발열/배터리 소모 있음.
      • 월 2,000분 제한 없음 (내 장치니까 무제한).

    ⚡ 실행 흐름 비교

    구분GitHub-hostedSelf-hosted
    실행 위치 깃허브 클라우드 VM 내 노트북/라즈베리파이
    네트워크 깃허브 공용 IP → 차단 잘 됨 내 집/회사 IP → 사람처럼 보임
    유지시간 24/7 (내 PC 꺼도 됨) 내 장치 켜져 있어야만 실행
    리소스 깃허브 서버 내 PC CPU/RAM
    발열 없음 있음 (주기마다 파이썬 돌림)
    무료 플랜 제한 월 2,000분 없음
    상태/캐시 매 실행 초기화 내 디스크에 유지 가능

    🔍 내 로컬에서 달라진 점

    • 예전에는 내 로컬에서 테스트만 하고, 실제 자동화는 깃허브 서버가 알아서 했음.
    • 지금은 ./run.sh 켜둔 동안에는 내 로컬 맥북이 깃허브 서버 역할을 대신합니다.
    • 즉:
      • 내 맥북에서 직접 10~20분마다 요청 보내는 중.
      • 발열은 “내 CPU가 직접 워크플로우를 돌리기 때문”.
      • 장점은 Alo 서버 입장에서는 “그냥 일반 맥북 유저”처럼 보여서 막히지 않음.

    ✅ 요약

    • 달라진 점 = 실행 위치와 네트워크
      • 기존: 깃허브 서버 (IP 차단 잘 됨, 내 노트북 신경 안 써도 됨)
      • 지금: 내 노트북 (IP 차단 거의 안 됨, 대신 내 리소스/발열 관리 필요)

    👉 그래서 선택은 안정성 vs 편의성

    • 안정성이 중요하면 → Self-hosted 유지 (다만 발열 해결 위해 라즈베리파이 같은 저전력 기기로 이전).
    • 편의성이 중요하면 → 다시 GitHub-hosted 쓰고, 프록시/랜덤 주기 같은 우회 로직 강화.

     

    반응형
Designed by Tistory.