간단한 Go 웹 애플리케이션으로 REST API를 제공하며, Docker 컨테이너로 실행되고 GitHub Actions를 통해 자동 빌드 및 배포됩니다.
- 웹 인터페이스: 메인 페이지에서 API 엔드포인트 정보 제공
- REST API: JSON 형태의 API 응답
- 헬스 체크: 애플리케이션 상태 모니터링
- Docker 지원: 컨테이너화된 배포
- GitHub Actions: 자동 CI/CD 파이프라인
| 엔드포인트 | 메서드 | 설명 |
|---|---|---|
/ |
GET | 메인 웹 페이지 |
/api/hello |
GET | 인사 메시지 반환 |
/api/health |
GET | 애플리케이션 상태 확인 |
/api/time |
GET | 현재 서버 시간 반환 |
- Go 1.21 이상
- Docker (선택사항)
-
Go로 직접 실행
go run main.go
-
Docker로 실행
# 이미지 빌드 docker build -t gh-image . # 컨테이너 실행 docker run -p 8080:8080 gh-image
-
테스트 실행
go test -v ./...
애플리케이션이 실행되면 http://localhost:8080 에서 확인할 수 있습니다.
Dockerfile은 멀티스테이지 빌드를 사용하여 최적화된 이미지를 생성합니다:
- 빌드 스테이지: Go 애플리케이션 컴파일
- 실행 스테이지: Alpine Linux 기반의 경량 이미지
- CGO 비활성화
- Alpine Linux 사용
- 불필요한 파일 제외 (.dockerignore)
- 자동 테스트: 모든 푸시와 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에 자동으로 푸시됩니다:
# 이미지 풀
docker pull ghcr.io/[username]/gh-image:latest
# 컨테이너 실행
docker run -p 8080:8080 ghcr.io/[username]/gh-image:latest| 변수명 | 기본값 | 설명 |
|---|---|---|
PORT |
8080 |
서버 포트 |
프로젝트에는 다음 테스트가 포함되어 있습니다:
- HTTP 핸들러 테스트
- JSON 응답 검증
- 상태 코드 확인
- 콘텐츠 타입 검증
이 프로젝트는 MIT 라이선스 하에 배포됩니다.