본문으로 건너뛰기
SDETRole
SDETRole

용어집 · 성능

소크 테스트(내구성 테스트)

영어: Soak testing

다른 이름: soak test, endurance testing, 내구성 테스트, 지속성 테스트

정의

평상시 수준의 부하를 몇 시간 이상 지속적으로 걸어 메모리 누수, 자원 고갈, 점진적인 성능 저하를 찾아내는 성능 테스트입니다.

소크 테스트(soak testing, 내구성 테스트·endurance testing이라고도 함)는 시스템에 평상시 수준의 부하를 오랜 시간, 보통 몇 시간에서 때로는 하루 이상 지속적으로 거는 테스트입니다. 부하 자체는 특별할 것이 없고, 핵심은 지속 시간입니다. 많은 결함이 천천히 커지기 때문에 10분짜리 부하 테스트에서는 보이지 않습니다. 요청 천 건당 몇 메가바이트씩 새는 메모리, 풀로 반환되지 않는 커넥션, 디스크를 채워 가는 로그 파일 같은 것들입니다.

무엇을 찾아내는가

  • 메모리 누수. 힙 사용량이 꾸준히 증가하고 가비지 컬렉션 후에도 내려오지 않다가, 결국 메모리 부족(out-of-memory)으로 비정상 종료됩니다.
  • 자원 고갈. 열린 뒤 해제되지 않는 데이터베이스 커넥션, 파일 핸들, 스레드, 소켓.
  • 점진적인 지연 시간 증가. 6시간째의 p95가 1시간째보다 눈에 띄게 나빠지며, 원인은 대개 커지는 캐시, 테이블 비대화(bloat), 단편화입니다.
  • 예약 작업의 간섭. 야간 배치, 백업, 인증서 갱신, 로그 로테이션이 실제 트래픽과 충돌합니다.
  • 스토리지 증가. 로그, 임시 파일, 큐 적체로 디스크가 차오릅니다.

예시 (k6)

export const options = {
  stages: [
    { duration: '10m', target: 80 },
    { duration: '8h', target: 80 },
    { duration: '10m', target: 0 },
  ],
  thresholds: {
    http_req_duration: ['p(95)<600'],
    http_req_failed: ['rate<0.005'],
  },
};

default 함수는 부하 테스트에서 쓰는 것과 같은 현실적인 사용자 여정입니다. 차이는 길게 유지되는 안정 구간(stage)뿐입니다.

결과를 읽는 법

소크 테스트는 통과/실패 임계값만이 아니라 추세로 판단합니다. 메모리, 커넥션 수, 지연 시간 백분위수, 오류율을 전체 실행 기간에 걸쳐 그래프로 그려 보십시오. 평평한 선이면 통과입니다. 꾸준히 올라가는 기울기는 무언가 비정상 종료되기 전에 실행이 끝났더라도 결함입니다. 운영 환경은 8시간보다 훨씬 오래 돌아가기 때문입니다.

흔한 실수

  • 소크 테스트를 스트레스 테스트 수준의 부하로 실행하면, 두 가지 질문이 섞여 실패 원인이 불분명해집니다.
  • 클라이언트 측 지표만 보는 것. 누수는 서버의 메모리와 커넥션 풀 그래프에서 먼저 드러납니다.
  • 실행 중에 서비스를 재시작하거나 오토스케일링으로 교체하는 환경을 쓰는 것. 바로 찾으려는 누적 현상을 감춰 버립니다.
  • 느리다는 이유로 건너뛰는 것. 빼 버리기보다 야간이나 주말에 실행하도록 일정을 잡으십시오.

SDETRole 전체에서 검색할 내용을 입력하세요.

Pagefind 전문 검색 · 브라우저에서 실행됩니다 검색 페이지 열기 →