- 각 계층 사이에는 항상 경계가 있고, 계층 경계를 넘는 의존성은 항상 안쪽 방향으로 향해야 함
- 오랜시간 여러명에 의해 코드를 유지보수하다보면 안쪽에서 바깥쪽으로 향하게 되는 경우가 많아짐

접근 제한자
- package-private(default) 제한자를 통해, 동일 패키지에서만 모듈(계층)이 접근가능하도록 설정
- 해당 모듈(계층)의 진입점만 public으로 설정해 외부에서 접근이 가능하도록 설정
- package-private의 경우 몇 개 정도의 클래스로만 이루어진 작은 모듈에서 가장 효과적
- 패키지 내의 클래스가 특정 개수를 넘어가기 시작하면 하위 패키지를 만들어 분류를 하는 것이 일반적인데, package-private의 경우 하위 패키지에서도 접근할 수 없게 된다.
컴파일 후 체크
- 코드가 컴파일된 후 런타임에 체크를 수행
- 주기적으로 특정 의존성 규칙을 위반했는지를 확인
- ArchUnit과 같은 도구를 사용
- 의존성 방향이 기대한 대로 잘 설정이 되어 있는지를 체크할 수 있는 API를 제공
빌드 아티팩트
- 각 모듈(계층)에 대해 전용 코드베이스와 빌드 아티팩트로 분리된 빌드 모듈(JAR)을 생성
- 각 모듈의 빌드 스크립트(Maven, Gradle)에서 아키텍처에서 허용하는 의존성만을 지정
- Domain 관련 모듈은 다른 계층의 모듈은 필요없으니 Import를 하지 않음

장점
- 빌드 도구가 순환 의존성을 허용하지 않음
- 자바 컴파일러의 경우 순환 의존성을 신경쓰지 않음
- 다른 모듈에서 어떠한 작업을 하고 있든 간에, 작업 중인 모듈을 실행시킬 수 있음
- 테스트 시에 용이
- 여러 개의 빌드 모듈은 각 모듈을 격리한 채 변경할 수 있음
- 각 모듈을 자체 코드 레포지토리에 넣어 다른 팀이 모듈을 유지보수할 수 있도록 해줌
'Architecture(아키텍처)' 카테고리의 다른 글
| [만들면서 배우는 클린 아키텍처] 12. 아키텍처 스타일 결정하기 (0) | 2024.07.20 |
|---|---|
| [만들면서 배우는 클린 아키텍처] 11. 의식적으로 지름길 사용하기 (0) | 2024.07.20 |
| [만들면서 배우는 클린 아키텍처] 09. 애플리케이션 조립하기 (0) | 2024.07.20 |
| [만들면서 배우는 클린 아키텍처] 08. 경계 간 매핑하기 (1) | 2024.07.20 |
| [만들면서 배우는 클린 아키텍처] 07. 아키텍처 요소 테스트하기 (0) | 2024.07.20 |