헷갈리기 쉬운 상황
순환 의존성: 정상처럼 보이는 한 사례만으로는 동작 범위를 이해하기 어렵습니다. 대표 입력에서는 문제없다가 경계값, 느린 응답, 배포 직후처럼 조건이 달라질 때 결과가 바뀔 수 있습니다.
module cycle은 변경·초기화·test 순서를 양방향으로 묶으므로 dependency inversion이나 책임 이동으로 방향을 하나로 만들어야 합니다.
핵심 원리
변경 이유, 데이터 소유권과 실패 전파가 경계를 결정하는 소프트웨어 구조에서 어느 경계가 결과를 결정하는지 먼저 봅니다. 두 module·package가 서로 import하는지, runtime 초기화 순서가 필요한지, 단순 type 의존인지 나눠 dependency graph에서 cycle을 확인합니다.
| 구분 | 짧은 예시 |
|---|---|
| 기대 결과 | 순환 의존성: 정상 조건에서 사용자가 받아야 할 결과 |
| 실제 결과 | 같은 입력에서 처음 달라진 값·상태·오류 |
| 판별 자료 | 결정 기록, dependency graph, 변경 빈도, 장애 반경과 실제 trace를 함께 검토한다 |
실무에서 확인할 것
일관성 요구와 실패 비용을 먼저 적고 가장 단순한 경계에서 시작해 측정된 압력에 따라 분리한다. 공통 계약을 더 안쪽 module로 옮기거나 소유 방향을 하나로 정합니다. 지연 import나 forward reference는 경계를 바로 세울 수 없을 때만 제한적으로 사용합니다.
대표 사례 하나, 값이 달라지는 경계 하나, 예상 가능한 실패 하나를 같은 순서로 확인합니다. 대표 변경 시나리오, 실패 주입, 부하와 복구 시간으로 설계 가정을 검증한다. 깨끗한 환경에서 build·test를 실행하고 두 module을 서로 다른 순서로 불러도 초기화 값과 dependency resolution이 같게 유지되는지 확인합니다.
공식 문서와 적용 범위
문서의 기본값과 동작은 version에 따라 달라질 수 있습니다. 현재 version, 실제 적용 설정, 자원 제한과 운영 환경에서 다시 확인합니다.