스프링에서 RESTful 적용기

기본

스프링으로 RESTful 스타일의 웹 개발을 하려다 보니 /project/* 또는 /app/* 같이 어떠한 뎁스를 하나 주지 않으면 static 리소스들의 접근도 디스패처 서블릿이 다 먹어 버리는 문제가 있었습니다. 지저분하다고 생각했지만 그냥 쓰고 있었는데, 토비님의 스프링 3.0.4 를 이용해서 UrlRewriteFilter없이 깔끔한 URL을 만들기 포스트를 보고 적용해 보니 더이상 URL에 뎁스를 하나 더 주지 않아도 돼서 너무 좋았습니다.

그런데 기쁨도 잠시 를 추가하고 나니 웹 애플리케이션에 접근이 전혀 안됐습니다. 매핑 정보가 없다는 에러 로그가 계속 나타나더라구요. 분명히 static 리소스들에는 접근이 가능한데 말이죠. 톰캣을 리스타트 해보니 매핑 정보에 디폴트 서블릿이 /** 빼고는 매핑되는게 전혀 없었습니다. 원인을 찾아보니 가 핸들러를 하나 추가하면서 스프링에서 디폴트로 등록해 주는 핸들러나 어탭터가 등록이 안돼서 그렇더군요.

사용하는 핸들러가 DefaultAnnotationHandlerMapping 밖에 없어서 설정 파일에 슥 추가해 주고, 톰캣을 리스타트 시켰더니 로그에 매핑 정보들이 드디어 나타났습니다.

아니 그런데 또 접근이 안되더군요. 원인이 뭘까 생각해 보다가 로그를 가만히 보니 매핑 순서가 디폴트 서블릿이 /** 먼저 잡히고 그 다음 /index 등등이 잡히는게 원인 같아 보였습니다. 설정 파일에서 DefaultAnnotationHandlerMapping을 위로 옮겨보니 맨 마지막에 디폴트 서블릿 매핑이 잡혀서 잘 구동이 됐습니다. 이얏호!

그러다가 문뜩 생각난

구글링 해보니 박성철님의 스프링 설정 이 구체적으로 뭘까?란 포스트가 눈에 들어왔습니다. 읽어보니 @mvc 관련 핸들러, 어탭터를 등록해 주더라구요. 아까의 삽질을 상기 시키며 위에 추가하고 수동으로 등록한 핸들러, 어탭터를 제거하고 톰캣을 띄워보니 잘 돌아갑니다. 아~ 깔끔하구만 ㅋ