구조도 검사 대상으로 만들기
팀이 정한 계층 경계가 문서에만 있으면 코드 변경 중 위반을 놓치기 쉽다. ArchUnit은 클래스와 패키지가 어떤 관계를 가져야 하는지 실행 가능한 규칙으로 표현한다. 개별 함수의 반환값을 확인하는 테스트와 달리 프로그램의 정적인 구조를 검사의 대상으로 삼는다.
바이트코드에서 관계 읽기
분석할 클래스를 가져오면 바이트코드에서 얻은 정보를 자바 코드 구조로 다룰 수 있다. 이를 바탕으로 패키지 사이 의존이나 계층 접근, 순환 관계 등을 검사한다. 규칙이 적용되는 범위를 잘못 고르면 중요한 클래스가 분석에서 빠질 수 있으므로 가져오는 대상과 제외 조건을 명확히 한다.
설계 규칙의 유지
ArchUnit이 좋은 아키텍처를 자동으로 선택해 주는 것은 아니다. 어떤 관계를 허용할지는 시스템의 목적에 맞게 팀이 정한다. 너무 세부적인 구현 구조를 고정하면 필요한 리팩터링도 어렵게 만들 수 있다. 런타임 동작과 외부 구성에서 생기는 관계는 정적 검사와 구분하고 실제 통합 테스트로 보완한다.