문제상황

분명히 이클립스로 돌렸을 때는 잘 돌아가는 프로젝트가 jar로 패키징 하자마자 404를 막 뱉어낸다.
jar 파일을 뜯어봤지만 누락된 파일은 없다.

결론

ModelAndView 생성시 경로 시작지점에 /를 포함시키면 이런 문제가 발생한다.

삽질

Spring은 좋은 프레임워크다.
인터페이스 기반으로 유연하고 느슨하게 조립할 수 있으므로 코드도 깔끔해지고 같은 동작도 현재 프로젝트의 구조에 맞춰 다양한 방식으로 구현할 수 있다.

문제는 이 다양한 방식이라는 것이 오류가 발생했을 때 사람을 환장하게 만든다는 것이다.
특히 코드에 바로 드러나지 않는 부분이 많아서 오류가 터진 라인과 실제 잘못된 부분이 한참 떨어져 있는 경우가 그러하다.
여기에 Annotation과 XML설정 문제까지 겹쳐지면 모니터 속에 지옥도가 펼쳐진다.

Spring이 TDD를 잘 지원한다지만 테스트 단위를 넘나드는 오류는 결국 지난 커밋과 이번 변경사항 사이를 개발자가 알고 있어야 찾아낼 수 있다.

내가 변경한 부분은 분명 RequestMapping을 하나 추가하고 거기에 맞춰서 new ModelAndView를 반환한 것 뿐이었다. 그것도 이클립스에서는 동작함을 확인할 수 있었다.

그런데 왜 안 될까.

원인은 알 수 없지만 결국 내가 찾아낸 문제는 이것이었다.

new ModelAndView("webtemplate/main");

위 코드는 동작한다.

new ModelAndView("/webtemplate/main");

위 코드는 이클립스에서는 동작하지만 jar 파일로 만들었을 때 404 에러가 발생한다.

원인을 모르겠다.