오전부터 내적 분노를 일으켰던 하나의 에러.
NoSuchBeanDefinitionException: No bean named 'XXXX' is defined
대체 왜그러는데요. 뭐가 문젠데.
사실 이 에러는 전에도 많이 봐왔던 에러다.
쉽게 말해서 해당 'XXXX' 이름으로 정의된 bean파일을 찾지 못했다는 것이다.
해당 파일이 진짜로 없거나, 환경설정 중 어떤 것이 잘못 되면 이런 오류가 난다.
나는 해당 파일을 @Repository 라는 어노테이션을 사용하여 지정해주었다.
근데, 어노테이션으로 파일 이름을 지정한 것이 bean파일일까?
배웠던 건데도 다시 보니 개념이 정확하지 않아 처음으로 돌아갔다.
먼저, 빈이란 Spring IoC 컨테이너가 관리하는 자바 객체를 뜻한다.
스프링에서는 이 객체라는 개념이 매우 중요한데
각 객체들이 프로그램의 흐름을 결정하고 객체를 직접 생성하고 조작하기도 한다.
그래서 스프링 내에서 관리되는 이러한 객체를 Bean 이라고 하는 것이다.
그리고 이러한 Bean객체를 Controller에 등록하기 위해 어노테이션을 사용한다.
그러니까 내가 사용했던 @Repository 외에도 @Component, @Controller 따위의 다른 어노테이션을 사용하여 빈 객체를 등록하는 것이다.
그렇다면 다른 어노테이션 중 왜 @Repository를 사용했지?
구글링 결과 결론적으로는 그냥 명시적으로 구분해주기 위해서 란다.
부모 어노테이션인 @Component를 붙여도 상관이 없다.
또한, Bean 객체는 데이터 변경이 없는 객체에 한해 사용해야 한다는 점이 있다.
컨트롤러 : @Controller (프레젠테이션 레이어, 웹 요청과 응답을 처리함)
로직 처리 : @Service (서비스 레이어, 내부에서 자바 로직을 처리함)
외부I/O 처리 : @Repository (퍼시스턴스 레이어, DB나 파일같은 외부 I/O 작업을 처리함)
(여기서 왜 @Repository를 쓰는지 알게됐다는.. 외부 작업 처리를 위해 썼었구나!)
그럼 결론적으로, 해당 이름으로 정의된 Bean 객체가 없어서 오류가 났다는 뜻인데..
난 분명 이름을 지정했는데 왜 오류가 나나 고민하던 내 눈에 보인건 오타 알파벳 한 자였다.
그래서 그걸 고쳤더니 잘 돌아간다.
...
이 김에 개념 다시 한번 체크하고 간 걸로 만족하련다.
참고로 xml파일 설정을 잘못하거나 메이븐 빌드 오류가 났을 수도 있다고 한다.
개인 프로젝트라면 한번씩 다 체크해봐야 한다.
1)SERVICE단에서 오류가 발생했다면? Impl자바 파일의 @Service어노테이션과 Controller자바 파일의 @Resource이름을 확인할 것(대소문자 구분)
2)resource폴더가 deploy 되지 않았다? 프로젝트 > Properties > Deployment Assembly 선택 후
/src/main/resource - WEB-INF/classes
를 추가해주자.
3)dispatcher-servlet.xml설정 오류라면?
<context:component-scan base-package="베이스패키지명">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
...
요 부분이 제대로 적혀 있는지 확인해보자.
4)그래도 안되면 프로젝트 clean, 메이븐 clean 해보자.
암튼 이클립스는 코딩보다 설정하는 부분이 훨씬 어렵게 느껴져 학습이 필요한 듯 하다.
암튼 그렇게 오전에 작은 소동은 마무리되었다.
첫 일기인데 뭔가 정보글이 되어버린 것 같지만 앞으로도 코딩하면서 기상천외하고(?) 어이없는 일들이 일어날 때 마다 작성을 해볼까 한다.
'코딩일기' 카테고리의 다른 글
어떤 개발자가 되고 싶으신가요? (1) | 2025.01.25 |
---|---|
[일상]23년 3월 13일 코딩일기..는 아니고 그냥 기록(애드센스 승인됐다!) (16) | 2023.03.13 |
댓글