#!/usr/bin/env bash set -euo pipefail MODE="${MODE:-loadtest}" TARGET="${TARGET:-http://localhost:8080}" USERS="${USERS:-200}" DURATION="${DURATION:-30s}" RAMP_UP="${RAMP_UP:-10s}" TIMEOUT="${TIMEOUT:-5s}" WEBSOCKET_TIMEOUT="${WEBSOCKET_TIMEOUT:-15s}" WEBSOCKET_RATIO="${WEBSOCKET_RATIO:-0.05}" WEBSOCKET_MAX_CONNECTIONS="${WEBSOCKET_MAX_CONNECTIONS:-20}" MONITOR_INTERVAL="${MONITOR_INTERVAL:-1s}" WEBSOCKET_COMMAND="${WEBSOCKET_COMMAND:-Get-Location}" SEARCH_START_USERS="${SEARCH_START_USERS:-100}" SEARCH_STEP_USERS="${SEARCH_STEP_USERS:-100}" SEARCH_MAX_USERS="${SEARCH_MAX_USERS:-2000}" MAX_FAILURE_RATE="${MAX_FAILURE_RATE:-1.0}" MAX_P95="${MAX_P95:-1s}" INSECURE="${INSECURE:-false}" SCRIPT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_ROOT}/.." && pwd)" RUNTIME_ROOT="${PROJECT_ROOT}/runtime" BIN_ROOT="${RUNTIME_ROOT}/bin" CACHE_ROOT="${RUNTIME_ROOT}/cache" GO_CACHE="${CACHE_ROOT}/go-build" GO_TMP="${CACHE_ROOT}/go-tmp" LOADTEST_BIN="${BIN_ROOT}/teraclone-loadtest" mkdir -p "${BIN_ROOT}" "${GO_CACHE}" "${GO_TMP}" find_go_executable() { if command -v go >/dev/null 2>&1; then command -v go return fi local candidates=( "/usr/local/go/bin/go" "${HOME}/go/bin/go" ) for candidate in "${candidates[@]}"; do if [[ -x "${candidate}" ]]; then echo "${candidate}" return fi done echo "go 실행 파일을 찾을 수 없습니다. Go를 설치하거나 PATH에 추가해주세요." >&2 exit 1 } GO_EXE="$(find_go_executable)" export GOCACHE="${GO_CACHE}" export GOTMPDIR="${GO_TMP}" "${GO_EXE}" build -o "${LOADTEST_BIN}" ./cmd/loadtest ARGS=( "-mode" "${MODE}" "-target" "${TARGET}" "-users" "${USERS}" "-duration" "${DURATION}" "-ramp-up" "${RAMP_UP}" "-timeout" "${TIMEOUT}" "-ws-timeout" "${WEBSOCKET_TIMEOUT}" "-ws-ratio" "${WEBSOCKET_RATIO}" "-ws-max-conns" "${WEBSOCKET_MAX_CONNECTIONS}" "-monitor-interval" "${MONITOR_INTERVAL}" "-ws-command" "${WEBSOCKET_COMMAND}" "-search-start-users" "${SEARCH_START_USERS}" "-search-step-users" "${SEARCH_STEP_USERS}" "-search-max-users" "${SEARCH_MAX_USERS}" "-max-failure-rate" "${MAX_FAILURE_RATE}" "-max-p95" "${MAX_P95}" ) if [[ "${INSECURE}" == "true" ]]; then ARGS+=("-insecure") fi "${LOADTEST_BIN}" "${ARGS[@]}"