애플리케이션 조립

모든 의존성은 안쪽으로, 애플리케이션의 도메인 코드 방향으로 향해야 도메인 코드가 바깥 계층으로부터 안전하다!

설정 컴포넌트

  • 유스케이스는 인터페이스만 알아야 하고, 런타임에 이 인터페이스의 구현을 제공받아야 한다.

  • 이를 위해 모든 클래스에 대한 의존성을 가지는 Configuration Component가 존재해야 한다.

💐 역할

  • 웹 어댑터 인스턴스 생성

  • HTTP 요청이 실제로 웹 어댑터로 전달되도록 보장

  • 유스케이스 인스턴스 생성해 웹 어댑터에게 제공

  • 영속성 어댑터 인스턴스 생성해 유스케이스에게 제공

  • 영속성 어댑터가 실제 DB에 접근할 수 있도록 보장

  • 설정 파라미터 소스에 접근 가능해야 한다 </aside>

클래스패스 스캐닝

  • 애플리케이션 컨텍스트: 스프링 프레임워크를 이용해 애플리케이션을 조립한 결과물, 애플리케이션을 구성하는 모든 객체(Bean)를 포함

  • 클래스패스 스케닝: 애플리케이션 컨텍스트를 조립하기 위한 방법

  • @Component 어노테이션을 붙이고 모든 필드를 인자로 받는 생성자가 존재하는 클래스는 애플리케이션 컨텍스트에 추가된다.

  • 클래스에 프레임워크 특화적인 어노테이션을 붙여야 하므로 결합도가 높아진다. 이는 라이브러리나 프레임워크 개발할 경우 사용자가 의존성에 엮이게 되어 좋지 않다.

스프링 Config

  • @Configuration 어노테이션 사용해 이 클래스가 스프링의 클래스패스 스캐닝에서 발견해야 할 설정 클래스임을 알림

  • 모든 빈을 가져오는 대신, 설정 클래스만 선택

  • @EnableJpaRepositories 어노테이션 사용 시 정의해두었던 모든 스프링 데이터 repository interface의 구현체를 제공

  • configuration 클래스도 모듈마다 작성할 수 있다

  • 특정 모듈을 위한 설정 클래스를 만들면, 특정 모듈만 포함하고 다른 모듈의 빈은 모킹해 애플리케이션 컨텍스트 생성이 가능해 테스트에 용이

Last updated