Skip to content

wo-o/ghcr-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go Web Application

간단한 Go 웹 애플리케이션으로 REST API를 제공하며, Docker 컨테이너로 실행되고 GitHub Actions를 통해 자동 빌드 및 배포됩니다.

🚀 기능

  • 웹 인터페이스: 메인 페이지에서 API 엔드포인트 정보 제공
  • REST API: JSON 형태의 API 응답
  • 헬스 체크: 애플리케이션 상태 모니터링
  • Docker 지원: 컨테이너화된 배포
  • GitHub Actions: 자동 CI/CD 파이프라인

📡 API 엔드포인트

엔드포인트 메서드 설명
/ GET 메인 웹 페이지
/api/hello GET 인사 메시지 반환
/api/health GET 애플리케이션 상태 확인
/api/time GET 현재 서버 시간 반환

🛠️ 로컬 개발

요구사항

  • Go 1.21 이상
  • Docker (선택사항)

실행 방법

  1. Go로 직접 실행

    go run main.go
  2. Docker로 실행

    # 이미지 빌드
    docker build -t gh-image .
    
    # 컨테이너 실행
    docker run -p 8080:8080 gh-image
  3. 테스트 실행

    go test -v ./...

애플리케이션이 실행되면 http://localhost:8080 에서 확인할 수 있습니다.

🐳 Docker

멀티스테이지 빌드

Dockerfile은 멀티스테이지 빌드를 사용하여 최적화된 이미지를 생성합니다:

  • 빌드 스테이지: Go 애플리케이션 컴파일
  • 실행 스테이지: Alpine Linux 기반의 경량 이미지

이미지 크기 최적화

  • CGO 비활성화
  • Alpine Linux 사용
  • 불필요한 파일 제외 (.dockerignore)

🔄 CI/CD (GitHub Actions)

워크플로우 기능

  • 자동 테스트: 모든 푸시와 PR에서 테스트 실행
  • Docker 빌드: GitHub Container Registry에 이미지 푸시
  • 보안 스캔: Trivy를 사용한 취약점 검사
  • 메타데이터 추출: 브랜치, 태그, SHA 기반 이미지 태깅

트리거 조건

  • main, develop 브랜치에 푸시
  • v* 태그 생성
  • main, develop 브랜치로의 PR

이미지 태깅 전략

  • 브랜치명 (예: main, develop)
  • PR 번호 (예: pr-123)
  • 시맨틱 버전 (예: v1.0.0, 1.0)
  • Git SHA (예: sha-abc123)

📦 GitHub Container Registry

빌드된 이미지는 GitHub Container Registry에 자동으로 푸시됩니다:

# 이미지 풀
docker pull ghcr.io/[username]/gh-image:latest

# 컨테이너 실행
docker run -p 8080:8080 ghcr.io/[username]/gh-image:latest

🔧 환경 변수

변수명 기본값 설명
PORT 8080 서버 포트

🧪 테스트

프로젝트에는 다음 테스트가 포함되어 있습니다:

  • HTTP 핸들러 테스트
  • JSON 응답 검증
  • 상태 코드 확인
  • 콘텐츠 타입 검증

📄 라이선스

이 프로젝트는 MIT 라이선스 하에 배포됩니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages