63 lines
3.0 KiB
Markdown
63 lines
3.0 KiB
Markdown
---
|
|
kind: PROJECT_DECISION
|
|
slug: performance-measurement-is-not-a-release-gate
|
|
title: 성능 측정은 릴리스 게이트에 넣지 않는다
|
|
topic: what-a-gate-does-not-prove
|
|
project: clean-architecture-backend-template
|
|
status: 게시 전
|
|
sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916
|
|
rootTreeNode: decision:performance-measurement-is-not-a-release-gate
|
|
decisionStatus: ADOPTED
|
|
decidedOn: 2026-08-30
|
|
source:
|
|
- src/grpc/grpc-testkit/build.gradle
|
|
- src/adapter/outbound/persistence-jpa/build.gradle
|
|
- final/document.md#a20
|
|
- final/document.md#a05
|
|
- final/document.md#10-5
|
|
---
|
|
|
|
# 성능 측정은 릴리스 게이트에 넣지 않는다
|
|
|
|
## 결정문
|
|
|
|
성능 레인은 릴리스 게이트에 포함하지 않고, 기계 의존적인 측정을 게이트 판정의 입력으로 삼지 않는다.
|
|
|
|
## 판단 이유
|
|
|
|
두 가족이 같은 결론에 다른 경로로 도달했다.
|
|
|
|
gRPC 는 처음부터 성능 태그를 기본 레인에서 빼고 이유를 적었다. 불안정한 게이트는 꺼진다는 것이다. 꺼진 게이트는 없는 게이트보다 나쁘다. 목록에 남아 있어서 누군가 그것이 지키고 있다고 믿게 하기 때문이다.
|
|
|
|
JPA 는 사고로 배웠다. 성능 레인이 릴리스 게이트에 걸려 있었고, 그 레인은 기본값이 꺼짐인 불리언 뒤에 있었으며, 유일한 임계값 단언은 임계값이 단언되지 않고 있다는 것이었다. 인증됨이라는 말이 아무 숫자도 비교되지 않은 실행을 가리켰다.
|
|
|
|
수정은 레인을 없애는 것이 아니라 이름을 사실로 바꾸는 것이었다. 그 레인이 진짜로 검증하는 것은 동작 계약이고, 그것은 어떤 기계에서도 참이므로 플래그가 필요 없다.
|
|
|
|
두 경우 모두 조건을 남겼다. 진짜 성능 게이트는 전용 러너와 워밍업과 표본 수와 기록된 기준선을 필요로 하고, 그것이 생기면 별도 레인으로 만든다.
|
|
|
|
## 영향
|
|
|
|
감수하는 것
|
|
|
|
성능 회귀가 릴리스에서 자동으로 잡히지 않는다. 지연이나 처리량이 나빠져도 게이트는 초록이다.
|
|
|
|
성능 측정이 필요하면 별도 인프라를 만들어야 한다. 지금은 그 인프라가 없다.
|
|
|
|
얻는 것
|
|
|
|
게이트의 초록불이 기계 사양에 좌우되지 않는다.
|
|
|
|
불안정한 게이트를 끄고 싶어지는 동기가 사라진다. 그리고 꺼진 게이트가 목록에 남아 지키는 척하는 상태도 없다.
|
|
|
|
동작 계약은 여전히 검증된다. 커넥션 수요와 포화 시 보고와 대기 동작은 기계와 무관하게 참이다.
|
|
|
|
## 근거
|
|
|
|
- **certified라 불리던 레인이 threshold를 하나도 비교하지 않고 있었다**
|
|
이 결정을 만든 사례다.
|
|
- **아무도 돌리지 않는 레인의 게이트는 마지막으로 돌린 사람이 본 것을 보고한다**
|
|
꺼진 게이트가 목록에 남는 문제를 다룬 규칙이다.
|
|
- **컨테이너가 필요한 특수 레인의 실제 결과를 실행으로 확인하지 않았다**
|
|
성능 레인을 포함해 아직 돌리지 않은 것들에 대한 질문이다.
|
|
|