Blog

[SpringCore] 자동주입, 수동주입 올바른 실무 운영 기준

Category
Author
citeFred
citeFred
Tags
PinOnMain
1 more property
자동주입, 수동주입의 여러 방법과 커스텀, 장단점들을 테스트 코드와 함께 실행해보았다. 그럼 어떻게 선택하는 것일까?
Table of Content

“편리한 자동 기능을 기본으로 사용하자”

스프링이 나오고 시간이 갈수록 자동을 선호하는 추세이다.
스프링은 기본적으로 @Component 뿐만 아니라 @Controller, @Service, @Repository 처럼 계층에 맞추어 스캔을 지원하고 있다.
@Component만 넣어주면 되는 과정을 @Configuration 등 설정 정보를 지정하고 @Bean으로 등록하는 등 과정은 번거롭다.
자동 빈 등록을 통해서 기본적으로 OCP, DIP를 지킬 수 있다.

“수동 빈 등록은 언제 사용하는가?”

어플리케이션은 크게 업무로직과 기술지원 로직으로 나뉜다.
업무로직 빈 : 웹을 지원하는 컨트롤러, 비지니스로직, 데이터 계층과 같이 요구사항을 개발되는 부분
기술지원 빈 : 기술적인 문제나 공통관심사(AOP)를 처리할때 사용, DB연결, 공통 로그 처리 등 업무로직을 지원하기 위한 기술 부분
업무 로직 부분은 어느정도 유사한 패턴이 있다. 따라서 자동 주입을 적극 사용하기 편리하다.
기술지원 로직은 특정 목적이 따로 있거나 애플리케이션 전반에 광범위(AOP 등)하게 영향을 미칠 수도 있다. 적용이 정상적인지, 어느 부분에서 문제가 있는지 파악도 어려울 수 있기 때문에 가급적 수동 빈 등록을 통해서 보다 명확하게 범위를 한정하는 것이 좋다.

“비지니스 로직 중에서 다형성을 적극 활용할 때”

업무 로직은 유사한 패턴으로 설계 개발되는 경우가 많지만, 다형성을 활용하여 동적인 선택 등이 고려되는 경우 명시적으로 수동 빈을 설정하여 구분되는 것이 명확할 수 있다.
앞서 DiscountPolicy를 Map을 통해서 저장하고 꺼내 사용하는 경우가 있었다. 구현체를 동적으로 선택하거나 하는 전략적인 개발이 필요 할 때 수동 빈으로 등록하면 코드량이 늘어나더라도 가독성이 늘어날 수 있다.(DiscountPolicy의 구성을 확인 할 수 있는 @Configuration 부분의 코드가 있기 때문)
하지만 이 부분도 프로젝트 성격 및 성향에 따라 다를 수 있다. 고민할 부분으로 남길 수 있다.
Search
 | Main Page | Category |  Tags | About Me | Contact | Portfolio