#!/bin/bash # 검증 스크립트 - runtime-role-reverify-202607140550 set -e echo "==========================================" echo " 검증 체크리스트 실행" echo " 프로젝트: runtime-role-reverify-202607140550" echo "==========================================" echo "" # 색상 정의 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 카운터 PASS=0 FAIL=0 SKIP=0 # 검증 함수 check_pass() { echo -e "${GREEN}[PASS]${NC} $1" ((PASS++)) } check_fail() { echo -e "${RED}[FAIL]${NC} $1" ((FAIL++)) } check_skip() { echo -e "${YELLOW}[SKIP]${NC} $1" ((SKIP++)) } echo "=== 1. 산출물 검증 ===" # D-01: 소스 코드 구조 if [ -d "src/main/java" ] && [ -d "src/test/java" ]; then check_pass "D-01: 소스 코드 구조 완전성" else check_fail "D-01: 소스 코드 구조 완전성" fi # D-02: 설정 파일 if [ -f "pom.xml" ] || [ -f "build.gradle" ]; then check_pass "D-02: 설정 파일 존재성" else check_fail "D-02: 설정 파일 존재성" fi # D-03: 문서 if [ -f "README.md" ]; then check_pass "D-03: 문서 존재성" else check_skip "D-03: 문서 존재성 (README.md 없음)" fi # D-04: 의존성 if [ -f "pom.xml" ]; then if grep -q "" pom.xml; then check_pass "D-04: 의존성 선언 완전성" else check_fail "D-04: 의존성 선언 완전성" fi else check_skip "D-04: 의존성 선언 (pom.xml 없음)" fi # D-05: 빌드 스크립트 if [ -f "pom.xml" ] || [ -f "build.gradle" ] || [ -f "Makefile" ]; then check_pass "D-05: 빌드 스크립트 존재" else check_fail "D-05: 빌드 스크립트 존재" fi echo "" echo "=== 2. 테스트 검증 ===" # T-01: 단위 테스트 if find . -name "*Test.java" -type f 2>/dev/null | grep -q .; then check_pass "T-01: 단위 테스트 존재" else check_skip "T-01: 단위 테스트 존재 (테스트 파일 없음)" fi # T-02: 통합 테스트 if find . -name "*IT.java" -type f 2>/dev/null | grep -q . || [ -d "src/test/integration" ]; then check_pass "T-02: 통합 테스트 존재" else check_skip "T-02: 통합 테스트 존재 (통합 테스트 없음)" fi # T-03: 테스트 자동화 if [ -f "pom.xml" ]; then if grep -q "maven-surefire-plugin" pom.xml || grep -q "maven-surefire-plugin" pom.xml; then check_pass "T-03: 테스트 자동화 설정" else check_skip "T-03: 테스트 자동화 설정 (Surefire 플러그인 없음)" fi else check_skip "T-03: 테스트 자동화 (pom.xml 없음)" fi echo "" echo "=== 3. CI/CD 검증 ===" # C-01: CI 파이프라인 if [ -f ".github/workflows/ci.yml" ] || [ -f ".github/workflows/build.yml" ] || [ -f "Jenkinsfile" ] || [ -f ".gitlab-ci.yml" ]; then check_pass "C-01: CI 파이프라인 정의 파일 존재" else check_skip "C-01: CI 파이프라인 정의 파일 존재 (CI 설정 없음)" fi echo "" echo "=== 4. 운영 리스크 검증 ===" # O-01: 로깅 설정 if [ -f "src/main/resources/logback.xml" ] || [ -f "src/main/resources/logback-spring.xml" ] || [ -f "src/main/resources/log4j2.xml" ]; then check_pass "O-01: 로깅 전략 정의" else check_skip "O-01: 로깅 전략 정의 (로깅 설정 없음)" fi # O-02: 환경별 설정 if ls src/main/resources/application-*.properties src/main/resources/application-*.yml src/main/resources/application-*.yaml 2>/dev/null | grep -q .; then check_pass "O-02: 환경별 설정 분리" else check_skip "O-02: 환경별 설정 분리 (프로파일 설정 없음)" fi echo "" echo "==========================================" echo " 검증 결과 요약" echo "==========================================" echo -e "${GREEN}통과:${NC} $PASS" echo -e "${RED}실패:${NC} $FAIL" echo -e "${YELLOW}건너뜀:${NC} $SKIP" echo "" TOTAL=$((PASS + FAIL + SKIP)) if [ $TOTAL -gt 0 ]; then PASS_RATE=$((PASS * 100 / TOTAL)) echo "통과율: $PASS_RATE%" fi echo "==========================================" # 결과 반환 exit 0