--- kind: REFERENCE slug: count-the-frameworks-own-autoconfigurations title: 프레임워크가 기여하는 자동설정까지 세지 않으면 스위치가 아니다 topic: assembly-ownership project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: reference:count-the-frameworks-own-autoconfigurations verifiedOn: # 이 기록은 이번 회차에 실행 확인을 하지 않았다 --- # 프레임워크가 기여하는 자동설정까지 세지 않으면 스위치가 아니다 ## 목적 프로젝트 코드만 게이트하고 프레임워크가 기여하는 자동설정을 남겨 두어, 꺼진 능력이 여전히 자원을 잡는 것을 막는다. ## 규칙 1. 프로젝트 조건은 프레임워크 자동설정을 막지 못한다 후보 집합에 들어온 자동설정은 자기 조건으로 판단한다. 프로젝트의 마스터 스위치는 그 판단에 참여하지 않는다. 2. 후보 집합을 좁히는 필터가 따로 필요하다 AutoConfigurationImportFilter 는 어떤 프로젝트 조건보다 먼저 동작하므로 이 일을 할 수 있는 유일한 자리다. 3. 그 필터는 권한이 아니라 도구다 후보를 빼는 일과 능력이 켜졌는지 판정하는 일은 다르다. 판정 권한은 루트 하나가 갖는다. 4. 자원 필요 여부는 능력 질문으로 묻는다 커넥션 풀 같은 공유 자원은 한 능력의 사유물이 아니다. 그것을 필요로 하는 능력이 하나라도 활성인지를 묻는다. ## 적용 조건 프레임워크가 같은 기술에 대해 자기 자동설정을 갖는 모든 능력. 데이터소스, 메시징, 캐시가 대표적이다. ## 예외 프레임워크 자동설정이 이미 프로젝트 조건과 같은 속성을 보도록 설계되어 있으면 필터가 필요 없다. ## 예시 JPA 가 꺼진 배포에서 프레임워크의 데이터소스 자동설정을 후보에서 빼는 필터가 spring.factories 에 등록되어 있다. 풀이 필요한지는 JPA 가 켜졌는지가 아니라 커넥션을 필요로 하는 능력이 하나라도 활성인지로 묻는다. 이 저장소는 여섯 조건의 논리합으로 판정한다. ## 관계 - **풀이 필요한지는 JPA가 켜졌나가 아니라 커넥션이 필요한 capability가 있나로 묻는다** 이 규칙을 채택한 결정이다. - **꺼짐은 조건의 반복이 아니라 구조여야 한다** 같은 목표의 짝 규칙이다.