본문 바로가기

Spring 3.0 - 4.3

[에러] 톰캣 404에러 - Controller 부분 확인하기

 

진짜 이런 실수 하면 내 정체가 뭔가 싶다 ^^....

웹서버 톰캣으로 가동하고 localhost 쳐서 들어가려는데 계속 404에러가 뜨는거다...

web.xml 설정이라던지, 스프링에서 톰캣 등록할 때 톰캣 설치된 위치 제대로 확인하고 해당 위치에 있는 톰캣으로 넣어줬고, 주소는 잘못된 게 당연히 없었는 줄 알았는데..............주소가 잘못됐었다 ㅎ..

 

 

에러 원인

25번째 줄의 RequestMapping이 주석해제 되어있는 상태였다.

이 상태에서 localhost:8080/musicchart/song 을 치고 들어가려니까 계속 404가 떴다.

당연하다. 이 프로젝트의 ContextRoot가 musicchart 인데 RequestMapping 으로 또 musicchart를 쳐서 들어올 수 있게끔 해놨기 때문이다.

그럼 왜 RequestMapping을 해놨냐고? 웹서버 없이 spring-test 라이브러리로 Api 호출 테스트 해보려고 HomeControllerTest.java 로 테스트코드를 작성했고, 거기서 HomeController.java로 매핑시켜주려고 적어놓은 부분이 25번째 줄이였다.

 

왜 저렇게 @RequestMapping으로 들어와야 했냐 하면,

테스트코드에서 spring의 빈 객체 주입을 이용하기 위해 2개의 파일을 참조하는 상태였다.

하지만 두 파일에 전부 url mapping ( /musicchart 로 들어오면 HomeController 로 이어준다던지) 하는 부분이 없었기 때문에 (이건 의도적으로 없앤거임 Controller 단에서 url mapping부분 제어하려고ㅇㅇ) 테스트 코드만으로 Context Root를 알 수 없었고, 그래서 @RequestMapping 으로 url mapping을 해준것이였다.

 

 

이래야만 테스트코드를 진짜 Controller로 연결할 수 있음)

 

 

 

 

해결방법

주석처리하니까 당연히 된다. 사실 이 방법도 왜 계속 안될까 고민하다가 이런건 계속 고민하는 것보다 원래 정석대로 똑같은 짓을 또 하면 거기서 차이가 보인다. 새 프로젝트를 생성해서 톰캣을 가동시켜보니 잘 나오길래 바로 HomeController.java (작동이 안됐던 기존코드) 와의 소스 부분에서 차이가 보여 답을 알아낼 수 있었다.