testcasecraft-arg-service
5.4K
소프트웨어 개발의 끝단에서 품질을 책임지는 QA(Quality Assurance)는 단순한 오류 검출이 아닙니다. 그것은 거친 원석과도 같은 코드를 다듬고, 디지털 블록의 마지막 조각을 끼워 맞춰 비로소 제품을 빛나게 하는 '장인(Craftsman)'의 과정입니다.
TestcaseCraft는 이러한 장인 정신을 담았습니다. QA 엔지니어의 섬세한 시각과 숙련된 경험이 디지털 환경에서 온전히 발휘될 수 있도록, 가장 직관적이고 현대적인 도구를 제공합니다. 당신의 손끝에서 소프트웨어의 완성을 경험하세요.
TestcaseCraft는 테스트 케이스 설계부터 실행, 결과 분석까지의 전체 라이프사이클을 통합 관리하는 All-in-One QA 플랫폼입니다.
Spring Boot와 React로 구축된 견고한 아키텍처 위에, FastAPI 기반의 RAG(검색 증강 생성) 서비스를 더해 단순한 관리를 넘어선 '지능형 테스트 환경'을 제공합니다.
테스트 자산을 체계적으로 구조화하여 관리의 복잡함을 줄입니다.
테스트 계획부터 실행 결과까지, 완성으로 가는 모든 발자취를 기록합니다.
단순 반복 업무를 넘어, AI와 함께 더 깊이 있는 테스트를 수행합니다.
TestcaseCraft는 유연한 설정을 위해 다양한 환경 변수 주입 방식을 지원합니다.
프로젝트 루트에 .env 파일을 생성하여 설정을 관리합니다. Docker Compose가 실행 시 자동으로 이 파일을 로드합니다.
# 1. .env 파일 작성 (하단의 Configuration 참조)
# 2. 컨테이너 실행
docker compose up -d --build
일시적인 테스트나 설정 오버라이딩이 필요할 때 유용합니다. .env 파일보다 우선순위가 높습니다.
PROTOCOL=https DOMAIN=mydomain.com SERVER_PORT=443
docker compose up -d --build
운영 환경(prod), 개발 환경(dev) 등 설정을 분리하여 관리할 때 사용합니다.
docker compose --env-file myenvfile.env up -d --build
⚠️ 트러블슈팅 ⚠️
1.0.7 이전 버전 사용자는 1.0.8 이상 버전으로 업그레이드시 아래 스크립트를 실행해야함.
docker compose exec postgres psql -U testcase_user -d testcase_management -c "ALTER TABLE users ADD COLUMN IF NOT EXISTS email_verified BOOLEAN NOT NULL DEFAULT false;"
컨테이너가 정상적으로 실행된 후, 아래 정보를 통해 각 서비스와 데이터베이스에 접속할 수 있습니다.
| Service | URL | Description |
|---|---|---|
| Application | http://localhost:8080 | 메인 웹 애플리케이션 |
| App API Docs | http://localhost:8080/swagger-ui.html | 백엔드 API 명세서 (Swagger) |
| RAG API Docs | http://localhost:8001/docs | AI/RAG 서비스 API 명세서 |
| MinIO Console | http://localhost:9001 | 파일 스토리지 관리 콘솔 |
| Health Check | http://localhost:8080/actuator/health | 서비스 상태 확인 |
시스템 최초 접속 시 사용되는 관리자 계정입니다.
⚠️ 보안 주의: 최초 로그인 후 반드시 비밀번호를 변경하시기 바랍니다.
adminadmin123개발, 디버깅 또는 외부 도구(DBeaver 등) 연결 시 사용하는 계정 정보입니다.
| Component | Host Port | Username | Password | Note |
|---|---|---|---|---|
| PostgreSQL (Main) | localhost:5434 | testcase_user | testcase_password | 주요 데이터 저장소 (v18) |
| PostgreSQL (RAG) | localhost:5433 | rag_user | rag_dev_password_123 | 벡터 DB (pgvector + v18) |
| MinIO | localhost:9000 / 9001 | minioadmin | minioadmin_dev_password_789 | S3 호환 스토리지 |
✨ .env sample
# Protocol Configuration (http or https)
PROTOCOL=http
# Server Configuration
HTTP_PORT=8080
HTTPS_PORT=443
DOMAIN=localhost
SERVER_PORT=8080
SERVER_SSL_ENABLED=false
# SSL Configuration (only used when PROTOCOL=https)
SSL_KEYSTORE_PATH=/app/ssl/keystore.p12
SSL_KEYSTORE_PASSWORD=changeit
SSL_KEYSTORE_TYPE=PKCS12
# Database Configuration
POSTGRES_DB=testcase_management
POSTGRES_USER=testcase_user
POSTGRES_PASSWORD=testcase_password
DATABASE_URL=jdbc:postgresql://postgres:5432/testcase_management
# JWT Configuration (512-bit key required for HS512)
JWT_SECRET=512-bit key required for HS512
# SessionTime
JWT_EXPIRATION=604800000
JWT_REFRESH_EXPIRATION=2592000000
# Spring Boot Configuration
SPRING_PROFILES_ACTIVE=prod
# JPA Configuration
# Use validate to avoid Hibernate attempting to recreate existing indexes on startup
SPRING_JPA_HIBERNATE_DDL_AUTO=update
SPRING_JPA_SHOW_SQL=false
# Logging Configuration
LOGGING_LEVEL_COM_TESTCASE=INFO
LOGGING_LEVEL_ROOT=WARN
# Frontend API Configuration
REACT_APP_API_BASE_URL=http://:localhost:8080
DOCUMENT_PARSER=pymupdf4llm
# Upstage API Key
UPSTAGE_API_KEY=up
TESTCASE_INIT_ENABLED=false
# MinIO Configuration
MINIO_SECRET_KEY=minioadmin_dev_password_789
# RAG Database Configuration
POSTGRES_RAG_PASSWORD=rag_dev_password_123
✨ Docker Compose sample(docker-compose.yml)
services:
# Spring Boot Application
app:
image: xmlangel/testcasecraft:latest
container_name: testcasecraft
environment:
# Spring Profile
- SPRING_PROFILES_ACTIVE=prod
# Protocol and Domain Configuration
- PROTOCOL=${PROTOCOL}
- DOMAIN=${DOMAIN}
# Server Configuration
- SERVER_PORT=${SERVER_PORT}
# SSL Configuration (only when HTTPS)
- SERVER_SSL_ENABLED=${SERVER_SSL_ENABLED}
- SERVER_SSL_KEYSTORE=${SSL_KEYSTORE_PATH}
- SERVER_SSL_KEYSTORE_PASSWORD=${SSL_KEYSTORE_PASSWORD}
- SERVER_SSL_KEYSTORE_TYPE=${SSL_KEYSTORE_TYPE}
# Database Configuration
- DATABASE_URL=${DATABASE_URL}
- DATABASE_USERNAME=${POSTGRES_USER}
- DATABASE_PASSWORD=${POSTGRES_PASSWORD}
# JWT Configuration
- JWT_SECRET=${JWT_SECRET}
- JWT_EXPIRATION=${JWT_EXPIRATION}
- JWT_REFRESH_EXPIRATION=${JWT_REFRESH_EXPIRATION}
# Application Configuration
- SPRING_JPA_HIBERNATE_DDL_AUTO=${SPRING_JPA_HIBERNATE_DDL_AUTO:-update}
- SPRING_JPA_SHOW_SQL=false
- LOGGING_LEVEL_COM_TESTCASE=INFO
- LOGGING_LEVEL_ROOT=WARN
- RAG_API_URL=http://rag-service:8000
- TESTCASE_INIT_ENABLED=${TESTCASE_INIT_ENABLED:-false}
# MinIO Configuration (TestCase Attachments)
- MINIO_ENDPOINT=minio:9000
- MINIO_ACCESS_KEY=minioadmin
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
- MINIO_TESTCASE_BUCKET=testcase-attachments
- MINIO_SECURE=false
# Mail Configuration (optional - can be empty for development)
- MAIL_USERNAME=${MAIL_USERNAME:-}
- MAIL_PASSWORD=${MAIL_PASSWORD:-}
- MAIL_HOST=${MAIL_HOST:-localhost}
- MAIL_PORT=${MAIL_PORT:-587}
# Frontend API Configuration
- REACT_APP_API_BASE_URL=${REACT_APP_API_BASE_URL:-http://localhost:8080}
ports:
- "${HTTP_PORT}:${SERVER_PORT}"
- "${HTTPS_PORT}:${SERVER_PORT}"
volumes:
- ./logs:/app/logs
- ./ssl:/app/ssl:ro
networks:
- testcasecraft-network
depends_on:
postgres:
condition: service_healthy
minio:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -f -k ${PROTOCOL}://localhost:${SERVER_PORT}/actuator/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
platform: linux/amd64
# FastAPI RAG Service
rag-service:
image: xmlangel/testcasecraft-rag-service:latest
container_name: testcasecraft-rag-service
environment:
# Database
DATABASE_URL: postgresql://rag_user:${POSTGRES_RAG_PASSWORD}@postgres-rag:5432/rag_db
# MinIO (Docker Compose MinIO 사용)
MINIO_ENDPOINT: minio:9000
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: ${MINIO_SECRET_KEY}
MINIO_BUCKET: rag-documents
MINIO_SECURE: "false"
# Document Parser Configuration
# Options: upstage, pymupdf, pymupdf4llm, pypdf2, auto
# Using pymupdf4llm for LLM-optimized markdown extraction (no API key required)
DOCUMENT_PARSER: ${DOCUMENT_PARSER:-pymupdf4llm}
# Upstage API (not used when using pymupdf4llm)
UPSTAGE_API_KEY: ${UPSTAGE_API_KEY:-your_upstage_api_key}
# Application
APP_ENV: development
LOG_LEVEL: DEBUG
ports:
- "8001:8000"
networks:
- testcasecraft-network
depends_on:
postgres-rag:
condition: service_healthy
minio:
condition: service_healthy
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
# PG18 App DB
postgres:
image: postgres:18
container_name: testcasecraft_postgres_spring
environment:
POSTGRES_DB: testcase_management
POSTGRES_USER: testcase_user
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- "5434:5432"
volumes:
- ./data/postgres:/var/lib/postgresql
- ./init-scripts:/docker-entrypoint-initdb.d
networks:
- testcasecraft-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U testcase_user -d testcase_management"]
interval: 10s
timeout: 5s
retries: 5
# PG18+pgvector extension (RAG DB)
postgres-rag:
image: pgvector/pgvector:pg18
container_name: testcasecraft-postgres-rag
environment:
POSTGRES_DB: rag_db
POSTGRES_USER: rag_user
POSTGRES_PASSWORD: ${POSTGRES_RAG_PASSWORD}
ports:
- "5433:5432"
volumes:
- ./data/postgres-rag:/var/lib/postgresql
- ./postgres-init:/docker-entrypoint-initdb.d
networks:
- testcasecraft-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U rag_user -d rag_db"]
interval: 10s
timeout: 5s
retries: 5
# MinIO Object Storage
minio:
image: minio/minio:latest
container_name: testcasecraft-minio-rag
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY}
ports:
- "9000:9000" # API
- "9001:9001" # Console
volumes:
- ./data/minio:/data
networks:
- testcasecraft-network
command: server /data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 10s
timeout: 5s
retries: 5
networks:
testcasecraft-network:
name: testcasecraft-network-spring
driver: bridge
화면의 이미지들은 아래와 같습니다.
최신 릴리즈 노트는 xmlangel/testcasecraft Releases 에서 확인가능
Content type
Image
Digest
sha256:571ae0551…
Size
4 GB
Last updated
5 months ago
docker pull xmlangel/testcasecraft-rag-service