우회 원천
개요
시스템이 무너질 때 사람들은 종종 복잡한 원인을 먼저 찾는다.
하지만 실제로는 소수의 편한 길이 반복적으로 문제의 시작점이 된다.
이 문서는 하네스를 약하게 만드는 대표적인 shortcut source를 정리한다.
1. fallback
fallback은 얼핏 보면 안정성을 높이는 장치처럼 보인다. 하지만 구조 통제 관점에서는 가장 흔한 우회 통로다.
위험한 예:
- provider가 없어도 기본값으로 동작
- unknown input을 조용히 삼킴
- 실패 대신 default path로 진행
- validation 실패 시 임시 복구 경로 사용
이런 구조는 시스템이 잘못된 상태를 통과 가능한 상태로 바꾼다.
2. singleton과 global access
global singleton은 합법 경로를 우회하는 가장 짧은 길이 된다. 처음에는 편의 장치지만 곧 구조를 무력화한다.
대표 문제:
- 어디서나 접근 가능하다
- 호출 경로 추적이 어렵다
- 테스트와 production 모두에서 shortcut이 된다
- 계약보다 구현체를 직접 만지게 만든다
전역 경로는 하네스 관점에서 거의 항상 의심해야 한다.
3. helper / util / convenience API
helper 자체가 문제는 아니다. 문제는 helper가 실제로는 경계 우회 통로가 되는 경우다.
위험한 신호:
- 규칙상 금지된 접근을 helper가 대신한다
- facade보다 helper가 더 자주 호출된다
- helper가 내부 구현 세부를 직접 노출한다
- convenience라는 이름으로 예외 경로를 합법처럼 포장한다
합법 경로보다 편한 helper가 생기는 순간, 팀은 결국 그 helper를 구조처럼 사용한다.
4. test shortcut
많은 시스템이 production에서는 경계를 말하고, 테스트에서는 그 경계를 푼다.
예:
- 테스트에서만 direct import 허용
- fixture에서만 내부 객체 직접 생성
- story에서만 provider 없이 렌더링
- integration test에서만 validation 생략
문제는 테스트가 결국 팀의 학습 자료가 된다는 점이다. 테스트에 shortcut이 있으면 그 shortcut은 쉽게 복제된다.
5. debug path와 temporary backdoor
디버그 편의를 위한 경로는 거의 항상 오래 남는다. 처음엔 임시지만, 나중에는 문제 해결의 습관이 된다.
위험한 패턴:
- 임시 setter 공개
- bypass flag 추가
- 검증 생략용 토글
- 내부 상태 직접 수정 endpoint
temporary는 상태가 아니라 의도다. 구조 안에 들어간 순간 temporary가 아니다.
6. 왜 shortcut이 반복되는가
shortcut은 대부분 다음 이유로 반복된다.
- 합법 경로보다 짧다
- 초기 비용이 낮다
- 즉시 결과가 보인다
- 실패가 늦게 드러난다
그래서 shortcut을 비난하는 것만으로는 충분하지 않다. 필요한 것은 shortcut을 닫고, 합법 경로를 더 짧게 만드는 것이다.
7. 좋은 구조의 대응 방식
fallback을 줄인다
실패를 숨기는 대신 실패를 드러낸다.
global path를 없앤다
진입점과 계약을 통해서만 접근하게 만든다.
helper를 합법 경로 안으로 넣는다
편의 API가 필요하다면 경계를 우회하지 않는 방향으로 제공한다.
테스트도 같은 경계를 따른다
shortcut을 학습 자산으로 남기지 않는다.
실무에서 보는 위험 신호
- “이건 테스트에서만”이라는 말이 자주 나온다
- helper가 공식 인터페이스보다 더 유명하다
- fallback으로 문제를 덮는 경우가 많다
- unknown input이 실패보다 복구로 이어진다
- 전역 객체가 여러 레이어에서 호출된다
이 신호가 보이면, 그 지점은 rule 후보이기 전에 architecture 정리 후보다.
요약
하네스를 약하게 만드는 shortcut source는 대체로 비슷하다.
- fallback
- singleton
- convenience helper
- test shortcut
- debug backdoor
이들의 공통점은 하나다.
합법 경로보다 더 짧고 더 조용하다.
따라서 하네스 친화적 아키텍처는 shortcut을 설득하는 대신 없애거나 비싸게 만들고, 합법 경로를 더 짧게 만든다.