JSP를 사용하는 Spring Boot 프로젝트에서는 기본적으로 JSP가 자동 설정되지 않기 때문에, 뷰(View) 파일의 경로와 확장자를 직접 지정해주는 설정이 필요합니다.
Spring Boot는 기본적으로 Thymeleaf 등의 템플릿 엔진을 우선적으로 지원하고 있으며, JSP는 자동 설정 대상이 아닙니다.

src/main/webapp 디렉토리를 추가합니다.
이 폴더는 톰캣(Tomcat)과 같은 서블릿 컨테이너가 웹 애플리케이션의 루트로 인식하는 기본 위치입니다.

webapp 폴더 아래에 WEB-INF 디렉토리를 추가합니다.
src/main/webapp/WEB-INFWEB-INF 폴더 하위에 배치합니다.WEB-INF는 브라우저가 직접 접근할 수 없는 보호된 경로로, 서버 측에서만 렌더링되도록 하기 위함입니다.WEB-INF 폴더가 있어야 하는 것은 아닙니다.webapp 하위의 어느 디렉토리에나 둘 수 있으며, spring.mvc.view.prefix 설정에 맞기만 하면 됩니다.spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
spring.mvc.view.prefix는 JSP 파일이 위치한 경로를 지정합니다.src/main/webapp) 를 기준으로 설정되며, /WEB-INF/views/로 지정하면 src/main/webapp/WEB-INF/views/ 폴더 안의 JSP 파일을 사용하게 됩니다.spring.mvc.view.suffix는 뷰 이름 뒤에 자동으로 붙는 확장자를 의미하며,.jsp로 지정하면 컨트롤러에서 return "hello"라고만 해도 hello.jsp 파일이 자동으로 찾아집니다.예를 들어, 컨트롤러에서 다음과 같이 작성하면:
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("msg", "Hello, Spring Boot + JSP!");
return "hello"; // → /WEB-INF/views/hello.jsp
}
요청을 처리한 뒤 src/main/webapp/WEB-INF/views/hello.jsp 파일이 렌더링됩니다.
application.properties에서 /WEB-INF/views/만 설정해도 JSP 파일을 찾을 수 있는 이유?JSP 경로 설정을 /WEB-INF/views/라고만 했는데도, 실제로는 src/main/webapp/WEB-INF/views/에 있는 파일을 잘 찾아갑니다.
그 이유는 Spring Boot가 내부적으로 사용하는 서블릿 컨테이너(Tomcat)의 동작 방식과 관련이 있습니다.
src/main/webapp 폴더에 두는 것이 표준입니다.src/main/webapp/WEB-INF/views/news.jsp
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
@GetMapping("/news")
public String showNews() {
return "news"; // 뷰 이름
}
위 컨트롤러가 반환하는 "news"는 다음 설정을 기준으로 실제 파일 경로가 만들어집니다.
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
최종 렌더링 경로는 다음과 같습니다.
/WEB-INF/views/news.jsp
→ 실제 파일 위치: src/main/webapp/WEB-INF/views/news.jsp