Skip to content

Repository files navigation

Sitewatch

Go의 장점인 goroutine, channel, context timeout, 표준 net/http, 단일 바이너리 배포를 연습하기 위한 병렬 웹사이트 헬스체커입니다.

Sitewatch는 URL 목록을 읽어서 여러 웹사이트를 동시에 요청하고, 각 사이트의 상태 코드, 응답 시간, 성공/실패 여부를 표로 보여주는 CLI 도구입니다. 배포 전 서비스 상태를 빠르게 확인하거나, 여러 URL이 살아 있는지 스크립트/CI에서 점검할 때 사용할 수 있습니다.

하는 일

  • 파일에 적힌 여러 URL을 병렬로 검사합니다.
  • http:// 또는 https://가 없는 URL은 자동으로 https://를 붙입니다.
  • URL별 응답 상태 코드와 응답 시간을 출력합니다.
  • 모든 URL이 정상 응답이면 exit code 0, 하나라도 실패하면 exit code 1을 반환합니다.
  • 동시 요청 수와 URL별 timeout을 CLI 옵션으로 조절할 수 있습니다.

ping과 다른 점

ping은 서버까지 네트워크 패킷이 도달하는지 확인하는 도구입니다. Sitewatch는 실제 웹 요청을 보내서 웹사이트나 API가 HTTP/HTTPS 레벨에서 정상 응답하는지 확인합니다.

구분pingSitewatch
확인 대상IP/호스트 연결URL별 웹 응답
프로토콜ICMPHTTP/HTTPS
알 수 있는 것서버까지 도달 가능한지웹앱/API가 정상 상태 코드를 주는지
상태 코드확인 불가200, 301, 404, 500 등 확인
경로 확인불가/health, /api/status 같은 경로 확인 가능
실무 활용네트워크 연결 확인배포 후 웹 서비스 상태 확인

예를 들어 서버가 켜져 있으면 ping은 성공할 수 있지만, 웹 애플리케이션이 500 에러를 내거나 /health endpoint가 실패하는 상황은 잡지 못합니다. Sitewatch는 이런 웹 서비스 레벨의 문제를 확인하는 데 초점을 둡니다.

실행

go run ./cmd/sitewatch check examples/urls.txt --concurrency 10 --timeout 3s

빌드해서 실행하려면:

go build -o sitewatch.exe ./cmd/sitewatch
./sitewatch.exe check examples/urls.txt --concurrency 10 --timeout 3s

URL 파일 형식

examples/urls.txt처럼 한 줄에 하나씩 URL을 적습니다.

https://go.dev
example.com
https://github.com
  • 빈 줄은 무시합니다.
  • #로 시작하는 줄은 주석으로 무시합니다.
  • http:// 또는 https://가 없으면 https://를 자동으로 붙입니다.

옵션

  • --concurrency: 동시에 검사할 URL 개수입니다. 기본값은 10입니다.
  • --timeout: URL 하나당 최대 대기 시간입니다. 기본값은 3s입니다.

아래처럼 옵션 위치는 자유롭게 둘 수 있습니다.

go run ./cmd/sitewatch check --concurrency=5 --timeout=2s examples/urls.txt
go run ./cmd/sitewatch check examples/urls.txt --concurrency 5 --timeout 2s

구조

cmd/sitewatch/main.go 실행 진입점
internal/sitewatch/app.go 전체 흐름 조립
internal/sitewatch/config.go CLI 인자 파싱
internal/sitewatch/source.go URL 파일 읽기/정규화
internal/sitewatch/checker.go 병렬 HTTP 체크
internal/sitewatch/output.go 결과/사용법 출력
internal/sitewatch/types.go 공용 타입

main.go에 모든 코드를 몰아넣지 않고 역할별로 나눠서 SRP를 연습할 수 있게 구성했습니다.

Go가 여기서 잘 맞는 이유

  • 많은 URL을 동시에 확인하는 작업은 goroutine으로 간단하게 처리할 수 있습니다.
  • context.WithTimeout으로 느린 요청을 안전하게 끊을 수 있습니다.
  • net/http가 표준 라이브러리에 포함되어 외부 패키지 없이 시작할 수 있습니다.
  • 빌드하면 실행 파일 하나로 배포할 수 있어 CLI 도구에 잘 맞습니다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages