예제대로 수월하게 진행을 하고있는데 파라미터를 수집하는 과정에서 갑자기 이런 오류가 발생했다. 뭐가 원인일까 console을 보는데... 천천히 읽어보니까
INFO org.springframework.web.context.ContextLoader(initWebApplicationContext271) - Root WebApplicationContext: initialization started
가장 먼저 이 부분이 보였다. 교재에서도 web.wml의 상단에 가장 먼저 구동되는 것이 Context Listener 라 하였고 console에서도 ContextLoader가 실행이 됐는데 그 이후에
DEBUG org.springframework.web.context.support.XmlWebApplicationContext(prepareRefresh629) - Refreshing Root WebApplicationContext
와 같은 버그가 발생한 것으로 보아 web.xml에서 그것도 Context Listener 이 부분에 무슨 문제가 있다고 짐작을 했다. 그리고 다시 폭풍 검색...
프로젝트에 메이븐이 빠져서 발생하는 오류라는 글도 있어서 해봤지만 해결 X! 🤔
jresystemLibrarary의 버전이 잘못되어서 오류가 발생했다는 글도 있어서 확인해봤지만 X!!
기본 설정의 문제라 설정파일을 다시 코딩 후 update project 해주면 된다는 글도 있었지만..... 역시나 X!!!
그러던 중 어떤 글에서
이 부분을 읽게 되고 설마 하는 마음에
Context Listener 부분을 주석처리 하니까 실행이 됐다!?
SampleDTO 객체 안에 name과 age 속성도 제대로 수집이 됐다....!
책에 보면 예제 프로젝트의 로딩 구조가 나온다. 프로젝트 구동 시 관여하는 XML은 web.xml
, root-context.xml
, servlet-context.xml
파일이 있다.
이 중 web.xml은 Tomcat 구동과 관련된 설정이고, 나머지 두 파일은 스프링과 관련됐다.
프로젝트의 구동은 web.xml에서 시작하고 그 중에서도 Context Listener가 제일 먼저 실행이 되는데 이런 식으로 로그가 출력이 되어야 하는데
나는 이때 DEBUG가 발생했었다!!
원래라면
ContextLoaderListener
가 동작하면서root-context.xml
이 처리되고 파일에 있는 빈(Bean) 설정들이 동작을 하면서 스프링 영역안에 생성되고 객체들 간의 의존성이 처리가 된 후에DispatcherServlet
이라는 서블릿이 동작해야하는 순서이다.
왜? DEBUG가 발생한걸까? root-context.xml에 아무것도 없어서? Bean 설정들이 동작을 해야하는데 내가 경로를 설정해준 곳에는 아무것도 들어있지 않으니까 처리를 하지 못한 게 아닐까? 하는 생각이 들었다. 또 다시 검색...
@Controller에도 없는걸보면 확실히 문제가 발생한 SampleDTO 객체가 없어서 그런 것 같기도 하고 ..... 아무리 검색해도 나오지않고 교재에도, 강의 영상에서도 이 문제에 대한 언급이 없다.... ㅠㅠㅠ 나중에라도 원인을 알게되면 추가로 포스팅하겠따....
+++
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/security-context.xml
</param-value>
</context-param>
</web-app>
이 부분이 web.xml 가장 하단부에 중복으로 추가가 되어있어서 발생했던 오류다!
이런 경우 보통 설정된 것이 서버에 제대로 반영이 안되어서 문제가 생기는 경우가 많다고 하는데
나 같은 경우에는 처음 오류가 발생했을때 예제 파일에 있는 web.xml 을 그대로 복사해와서 실행해보고 (이때 해당 챕터의 문서가 아니라 조금 진행이 된 예제 파일의 문서를 가지고 왔었다... 2챕터를 가지고 와야하는데 7챕터를 가지고 왔던 걸로 기억)
여전히 오류가 발생해서 뭐지? 하다가 오류가 발생하는 Context Listener 부분을 아예 주석 처리하고 실습을 진행했다.
집에서 복습할 때는 해당 오류가 발생하지 않았음!!