👩🏻💻개발공부
백앤드 성능 테스트 전, 기초 지식 정리!
리미32
2025. 6. 14. 13:51
728x90
안녕하세요! API를 만들고, 서버를 운영하며 과연 제가 만든 API는 성능이 어떨까 궁금해졌습니다.
그래서!!! 성능테스트를 하기로 마음 먹었습니다.
오늘은 성능테스트에 대해서 공부한 겸, 공부한 내용을 정리해볼까합니다.
성능 테스트를 왜 할까?
개발을 하다 보면 “우리 서버는 몇 명까지 감당할 수 있을까?” “어떤 API가 병목일까?“와 같은 고민을 하게 됩니다.
이를 확인하기 위해 필요한 것이 바로 성능 테스트입니다.
성능을 어떻게 측정할까?
1. Latency (지연 시간)
- 요청자가 보낸 요청이 응답을 받을 때까지 걸리는 시간
- 예: 고속도로의 제한 속도에 비유할 수 있어요.
2. Throughput (처리량)
- 서버가 단위 시간 안에 처리한 요청의 수 (RPS: Request Per Second)
- 예: 고속도로 차선 수, 즉 동시에 몇 대의 차가 지나갈 수 있는지
테스트 도구 소개
1. wrk / wrk2
wrk -t4 -c10 -d5s http://localhost:8080/api/test
- -t: 쓰레드 수
- -c: 동시 접속 수
- -d: 지속 시간
- Latency, RPS 확인 가능
- wrk2는 개선된 버전으로, 고정된 요청 속도 유지에 강점이 있음
2. JMeter (Apache)
- 다양한 프로토콜 지원 (HTTP, FTP, DB 등)
- 단점: 복잡한 UI, 메모리 많이 씀, 고성능 테스트 시 어려움
3. k6 (Grafana)
- JavaScript 기반 스크립트
- 장점: 간결한 문법, 낮은 메모리 사용
- 단점: 대규모 트래픽 테스트는 유료 or Kubernetes 필요
4. nGrinder (네이버)
- 자바 유사 스크립트 지원, 한글 GUI
- 장점: 직관적이고 친절한 설계
- 단점: Controller/Agent 분리, IDE 미지원
실제 테스트 종류
테스트명 설명
스모크 테스트 | 최소 부하로 시스템 정상 동작 여부 확인 |
스파이크 테스트 | 갑작스러운 사용자 증가 시 안정성 확인 |
부하 테스트 | 목표 부하까지 시스템 성능 유지 여부 확인 |
스트레스 테스트 | 시스템 최대치를 초과한 상황에서의 동작 관찰 |
내구 테스트 | 장시간 일정 부하를 주어 시스템 안정성 확인 |
중단점 테스트 | 임계점까지 점진적 부하 증가로 한계점 측정 |
테스트는 계획 수립하기
1. 단건 성능 테스트
- 특정 API를 1회 실행
- 실행된 SQL 수, 각 쿼리 속도, 총 응답 시간 체크
2. 동시성 부하 테스트
- API를 100~1000회 동시에 호출
- 평균/최대 응답 시간, 에러율, 리소스 고갈 여부 확인
- DB connection pool, 서버 CPU 모니터링 (CloudWatch, Grafana 연동 추천)
3. DB 쿼리 자체 테스트
- API 내 SQL을 직접 실행
- 인덱스 적용 여부, 쿼리 실행 계획(Explain), 복합 조건에서 성능 확인
4. 충돌 테스트 (동시성)
- 여러 API가 같은 데이터에 insert/update 시도
- 데이터 무결성, deadlock 발생 여부 검증
5. 시나리오 기반 통합 테스트
- 회원가입 → 로그인 → 데이터 저장 등 실 사용 흐름 전체 테스트
- API 간 병목, 상호 영향 여부 분석
테스트 결과 분석하기
성능 테스트를 통해 우리가 궁금한 건 결국 “서버가 얼마나 많은 요청을 어느 속도로 안정적으로 처리할 수 있는가?”입니다.
예를 들어,
- Throughput이 낮아지면 병목 지점이 발생했다는 뜻!
- Latency가 증가하면 사용자가 대기하게 됩니다.
예시 결과 해석
“100명의 사용자가 5초 동안 요청을 보내자, 평균 응답 시간은 210ms, 최대 응답 시간은 740ms였다.”
→ 최대 지연 시간이 300ms 이상이면 사용자 이탈률이 높아진다고 알려져 있으므로, 개선 필요!
서버 성능을 올리려면?
- 서버 대수 늘리기
- nginx, mongoDB는 고성능 서버 → 병목은 주로 nodejs 서버
- 요청을 처리하는 부분을 더 늘려야 한다.
- 코드 최적화
- 불필요한 로직 제거
- 비효율적인 쿼리 개선
테스트 계획 세우기
1. 응답 시간 목표 설정
최대 0.3초 (300ms)를 넘지 않게 하자!
1초 이상 지연 → 이탈률 7%
3초 이상 지연 → 이탈률 40%
2. 최대 사용자 수 추정
예: 평소 100명 접속 → 200명도 문제 없이 처리 가능하도록 여유 있게!
API 성능 테스트는 단순히 수치로 끝나는 것이 아니라, 실제 서비스 품질을 결정짓는 중요한 작업입니다.
- 어떤 테스트를, 어떤 도구로, 어떤 기준으로 진행할지 명확히 정하고
- 결과를 바탕으로 병목을 찾아 개선하는 과정까지가 성능 테스트의 핵심입니다.
다들 API 성능 측정 파이팅입니다!
728x90