결론부터 말하면 편리한 자동 기능을 기본으로 사용하자.
스프링이 나오고 나서 점점 자동화 되는 기능을 선호하는 추세이고 설정 정보를 계층에 맞추어 일반적인 애플리케이션 로직을 자동으로 스캔할 수 있도록 지원한다. 번거로움을 줄일 수 있는 이런 과정을 선호하는 이유는 편리함도 있지만 관리할 빈이 많아서 설정 정보가 커지면 설정 정보를 관리하는 것 자체가 부담이 될 수 있기 때문이다.
그렇다면 수동 빈 등록은 언제 사용하면 좋을까?
업무 로직과 기술 지원 로직으로 나누어서 생각을 해보자.
업무 로직 빈 : 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포지토리등이 모두 업무 로직이다. 보통 비지니스 요구사항을 개발할 때 추가되거나 변경된다.
→ 숫자들이 엄청 중요하고 패턴이 있는 경우가 흔한데 이럴 경우 자동 빈 등록을 통해서 쉽게 처리한다.
기술 지원 빈 : 기술적인 문제나 공통 관심사(AOP)를 처리할 때 주로 사용된다. 데이터베이스 연결이나, 공통 로그 처리 처럼 업무 로직을 지원하기 위한 하부 기술이나 공통 기술들이다.
→ 업무 로직에 비해서 그 수가 적지만 애플리케이션 전반에 걸쳐서 광범위하게 영향을 미친다. 또한 문제가 발생했을 때 어디가 문제인지 명확하게 드러나지 않기 때문에 수동빈을 사용하여 명확하게 들어내는 것이 좋다.
그런데 비지니스 로직 중에서도 다형성을 적극 활용한다면 수동빈을 사용했을 경우 얻는 이점도 있다.
내가 개발한 코드가 아닌데 추상화가 넘쳐나는 코드는 코드를 해석함에 있어서 매우 어려움이 따른다. 따라서 전용 설정정보를 통해서 빈을 수동으로 등록 하게 되면 코드를 보고 직관적으로 이해하기가 쉬워진다.
→ 코드 해석이 쉬워지면서 새로운 빈 등록을 함에 있어서 편하게 수정할 수 있다.
정리해서 말하면
- 편리한 자동 기능을 기본으로 사용하자.
- 직접 등록하는 기술 지원 객체는 수동으로 등록하자.
- 다형성을 적극 활용하는 비지니스 로직은 수동 등록을 고민해보자.