generated from Learning-Is-Vital-In-Development/study-template
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
391 additions
and
27 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
--- | ||
marp: true | ||
_class: lead | ||
--- | ||
|
||
<!-- footer : 93p --> | ||
# Ch 4. 성능 테스트 패턴 및 안티패턴 | ||
|
||
> 1. 유형별 베스트 프랙티스 안내 | ||
> 2. 성능 테스트에 좋지 않은 영향을 끼치는 일반적인 안티패턴과 리팩터링하는 방법 | ||
--- | ||
<!-- header : 4.1 성능 테스트 유형--> | ||
<!-- footer : 93p --> | ||
|
||
> "그래도 뭐라도 하는 게 아무것도 안 하는 것 보단 낫지" 않냐는 그릇된 믿음은 | ||
> 위험한 반쪽자리 진실이다. | ||
- 가장 흔히 저지르는 실수 : 구체적인 내용을 정하지 않고 **뭉뚱그려** 성능 테스트를 수행하는 것. | ||
- 성능 테스트 기획 Tip : 테스트로 확인하고 싶은 *정량적 질문 리스트*와 그 테스트가 대상 *애플리케이션 입장에서 중요한 이유*를 적어보자! | ||
|
||
--- | ||
|
||
<!-- footer : 98p --> | ||
### 질문 예시 | ||
|
||
1. **응답시간 테스트 (Latency Test)**: 종단 트랜잭션에 걸리는 **시간**은? | ||
2. **처리율 테스트 (Throughput Test)**: 현재 시스템이 처리 가능한 동시 트랜잭션 **개수**는? | ||
3. **부하 테스트 (Load Test)**: **특정 부하**를 시스템이 감당할 수 있는가? | ||
4. **스트레스 테스트 (Stress Test)**: 이 시스템의 **한계점** *breaking point* 은 어디까지인가? | ||
5. **내구성 테스트 (Endurance Test)**: 시스템을 **장시간 실행**할 경우 성능 이상 증상이 나타나는가? | ||
6. **용량 계획 테스트 (Capacity Planning Test)**: **리소스를 추가한 만큼** 시스템이 확장되는가? | ||
7. **저하 테스트 (Degradation Test)**: 시스템이 **부분적으로 실패할 경우** 어떤 일이 벌어지나? | ||
|
||
---- | ||
|
||
1. **응답시간 테스트 (Latency Test)** | ||
- UX상에서 직관적이고 중요한 지표 | ||
- 평균값의 함정에 빠질 수 있다. | ||
2. **처리율 테스트 (Throughput Test)** | ||
- 지연시간 테스트와 함께 수행 -> 일반적인 상황애서 어느정도의 처리율을 유지하고 있는가? | ||
3. **부하 테스트 (Load Test)** | ||
- 부하가 걸릴 가능성이 높은 서비스의 특정 부분에 집중 ex> 광고 캠페인 | ||
4. **스트레스 테스트 (Stress Test)** | ||
- 일반적이지 않은 상황에서 시스템이 어느정도까지 견딜 수 있는지 점진적으로 검증 | ||
- Maximum TPS를 시스템의 한계로 본다. | ||
|
||
---- | ||
<!-- header : ''--> | ||
<!-- footer : ''--> | ||
## 궁금증 : 부하 테스트 vs 스트레스 테스트? | ||
|
||
- **부하 테스트**: 시스템이 예상 사용량(**임계치**)을 처리할 수 있는지 확인 | ||
- 부하 상태에서 시스템의 성능을 측정하고, 이를 통해 성능 임계치를 결정하는 것 | ||
- **스트레스 테스트**: 시스템이 **극한의 부하나 조건**에서 어떻게 작동하는지 확인 | ||
- CPU, 에러 발생, 응답시간 등이 어떻게 작동하는지 검증 | ||
|
||
![이해에 좋은 그래프](https://blog.imqa.io/content/images/2020/04/image-11.png) | ||
|
||
---- | ||
|
||
<!-- header : 4.2 기본 베스트 프랙티스--> | ||
<!-- footer : 100p--> | ||
## 성능테스트 시 필요한 태도! | ||
|
||
- 검증할 부분이 무엇인지, 어떻게 측정할지 생각하기 | ||
- 쉬운 부분보다 중요한 부분에 집중하기 | ||
- 중요한 부분을 먼저 하기 | ||
|
||
> it is sometimes tempting to report on an easy measure, rather than the right measure. | ||
---- | ||
|
||
## 기본 베스트 프랙티스 | ||
|
||
- 운영 환경과 되도록 비슷하게 구축되어야 한다. (현실에선 자주 무시되는 부분...!) | ||
- 인프라, 데이터셋 등 | ||
- 성능 비기능 요건 NFR을 구성원들과 잘 협의해야 한다. | ||
- 소프트웨어개발주기 *SDLC* 의 일부에 포함 시켜 상시로 성능회귀테스트를 진행한다. _performance regression testing_ | ||
- 자바에서 특정해 발생하는 이슈에 주의한다. | ||
- 메서드가 호출되지 않거나, 너무 복잡하고 커서 컴파일 분석을 할 수 없는 경우 | ||
|
||
---- | ||
|
||
<!-- header : 4.3 성능 테스트 안티패턴--> | ||
<!-- footer : 102p--> | ||
## 성능 테스트 안티패턴 | ||
|
||
- 지루해서 필요이상으로 복잡한 코드를 개발 | ||
- 이력서 부풀리려고 불필요한 기술 덧대기 | ||
- 또래 압박으로 충분한 논의 없이 진행 | ||
- 이해가 부족한데 무조건 새로운 툴로 진행하려는 것 | ||
- 성능 지표 측정이나 팀 내 공유를 하지 않고 개선하려는 것 | ||
|
||
> 문제가 터지고 나서야 : "그동안 UAT에 만족하며 안일하게 살았구나, 운영 환경에서 큰 문제가 생겼을 때 신속하게 대응할 준비를 전혀 안했구나.." | ||
--- | ||
<!-- header : ''--> | ||
<!-- footer : ''--> | ||
## References | ||
|
||
- 자바 최적화 Ch. 4 | ||
- [Optimizing Java Ch 4.](https://www.oreilly.com/library/view/optimizing-java/9781492039259/ch04.html) | ||
- https://blog.imqa.io |
Oops, something went wrong.