본문 바로가기
Java & Kotlin/Spring

[Spring] IDE에서 잘 접근되던 페이지가 서버에서는 접속되지 않을 때

by heekng 2022. 4. 30.
반응형

IDE에서 잘 접근되던 페이지가 서버에서는 접속되지 않을 때

간간히 활동하고 있던 Holix라는 커뮤니티에서 나온 질문

spring boot로 만든 게시판 프로젝트를 ncloud에 올려서 빌드를 했더니 400 에러 뜨면서 MethodArgumentTypemismatchException이 발생하네요
로컬에선 잘 되는데 클라우드에 올리면 에러가 생깁니다 왜 이런가요 ??

문제

질문자의 상황은 인텔리제이에서는 template 디렉토리 아래의 html이 잘 접근되는데 클라우드 서버에서 실행하면 에러가 발생하는 현상이였다.

문제가 발생한 이유

질문자의 현재 상황

@GetMaping("~~~")
public String ... {
    ...
    return "/aaa/bbb"
}

위 코드를 보고 첫번째로 든 생각은 왜 return하는 html의 경로가 /로 시작하지..? 였다.

기본적으로 Springboot web 프로젝트를 구성함에 있어 추가하는 종속성에는 spring-boot-starter-web 이 있다.
해당 종속성을 추가하면 Springboot에서 default로 설정해주는 항목이 있는데 그중 ViewResolver 설정 spring.thymeleaf.prefix=classpath:/templates/spring.thymeleaf.suffix=.html 이다.

각각의 뷰템플릿에 따라 설정은 달라질 수 있다.

참고문서: docs.spring.io
결국 return "/aaa/bbb"return "classpath:/templates//aaa/bbb.html"의 형태가 되어 경로를 찾지 못하는 것이다.

당장의 답변에는

라는 답변으로 당장의 문제는 해결되었다.

하지만

문제는 해결되었지만 찝찝한 점이 남아있다.
로컬에선 잘 되는데 클라우드에 올리면 에러가 생깁니다 라는 점인데…
로컬에서 잘 된다는 말은 IDE에서 잘 돌아간다는 의미이고, 서버에서 실행할 때에는 java -jar ~~과 같이 실행했다는 답변을 받았다.

질문자의 클라우드서버 설정 문제는 아닐까?

혹시나 하여 return path/로 시작하게 설정하고 Intellij가 아닌 터미널에서 build하여 jar를 실행해보았다.

Error resolving template

질문자의 에러와 동일하지는 않지만 Intellij에서는 정상적으로 나오던 페이지가 jar파일로 실행시에는 에러가 발생했다.

Intellij에서 실행하는 것과 직접 build 후에 jar파일을 실행하는 것에는 한가지 차이점이 있다.
Intellij에서 실행할 때에는 jar파일을 실행해서 run하지 않는다는 것.

실제로 확인해보면 Intellij에서 실행할 때에는 build/bin 디렉토리가 존재하질 않는다.
그럼 jar파일을 실행하는 것과 어떤 점이 다를까?

여기에 친절하게 설명해준 글을 찾게 되었다.

물론 모두 이해하지는 못했다..ㅎㅎ

해결하지 못한 의문점

질문자의 경우에는 return 하는 경로를 @RequestMapping 경로로 받아 나타나는 에러였다.
보통 해당 상황에서는 파일 또는 경로가 존재하지 않는다고 나타나야할 것 같은데 특수한 상황에는 redirect:와 같이 작동하는 것으로 추측된다.
그리고 질문자의 환경은 thymeleaf가 아닌 mustache였다. 이 부분도 의심해 봐도 되려나..?

물론 추측이다. 확실하지 않다.

조금 더 알아보아야겠다.

반응형