학원생 수강 시절, 스프링으로 간단히 예제를 잡는 과정에서 예상치못한 실수를 하여 에러를 냈습니다..ㅠㅠ
간단한 것이었는데 에러메시지 검색해볼 생각도 안하고 혼자 잡아보다가 고생했었던 에러메시지를 공유하고자 합니다.
메시지는 memberController라는 빈을 생성하고자하는데 @Autowired할 때 빈생성에서 에러가 난다는 메시지였습니다. 처음에는 @Autowired의 문제점인 circular reference에 관한 상황이 여기서 발견되는건가 싶어서 신기해했지만..
이유는 다름아닌 @Service 어노테이션때문이었습니다...
스프링 프레임워크는 기본적으로 스프링컨텍스트 내에 Bean이라는 스프링이 관리하는 객체들을 싱글톤으로 관리하고 있습니다. 즉 @Autowired로 주입해주는 그 인스턴스는 다른 클래스에서 주입받는 녀석과 같은 주소값을 가지는 녀석이죠.
이러한 스프링 Bean을 만드는 과정에서 어노테이션 1개가 사용됩니다.
바로 @Component라는 어노테이션이죠. 사실 스프링 MVC를 활용하여 레거시 프로젝트를 할 때 @Controller, @Service, @Repository 요 세가지정도만 많이 사용하게되는데, 사실 이 세가지 어노테이션 안에는 @Component 어노테이션이 포함되어 있습니다.
즉, 컨트롤러, 서비스, 레파지토리(다오) 는 모두 스프링 빈으로 등록되는 객체입니다. 그래야 @Autowired를 활용해서 주입이 가능한 스프링 빈이 되는 것입니다.
결론적으로 말씀드리면...
실수로 서비스 클래스에 @Service를 선언하는 것을 까먹었습니다.!!
이런 실수 하지 마시라고 공유드립니다~!