[Spring] Spring Boot에서 JSP 경로 설정

artp·2025년 5월 20일

spring

목록 보기
2/11
post-thumbnail

JSP를 사용하는 Spring Boot 프로젝트에서는 기본적으로 JSP가 자동 설정되지 않기 때문에, 뷰(View) 파일의 경로와 확장자를 직접 지정해주는 설정이 필요합니다.

Spring Boot는 기본적으로 Thymeleaf 등의 템플릿 엔진을 우선적으로 지원하고 있으며, JSP는 자동 설정 대상이 아닙니다.

webapp 폴더 생성

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

WEB-INF 폴더 생성 (필수는 아니나 보안상의 이유로 권장됨)

webapp 폴더 아래에 WEB-INF 디렉토리를 추가합니다.

  • src/main/webapp/WEB-INF
  • JSP 파일은 보통 이 WEB-INF 폴더 하위에 배치합니다.
  • 클라이언트가 직접 접근할 수 없는 보호된 경로로, 서버 측에서만 렌더링되도록 하기 위함입니다.
  • WEB-INF는 브라우저가 직접 접근할 수 없는 보호된 경로로, 서버 측에서만 렌더링되도록 하기 위함입니다.
  • 보안상 JSP 파일은 일반적으로 이 폴더 하위에 배치하는 것이 권장됩니다.
    • 하지만 JSP 자체가 동작하기 위해 반드시 WEB-INF 폴더가 있어야 하는 것은 아닙니다.
    • JSP 파일은 webapp 하위의 어느 디렉토리에나 둘 수 있으며, spring.mvc.view.prefix 설정에 맞기만 하면 됩니다.

application.properties 파일에 다음과 같은 설정을 추가

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
  • spring.mvc.view.prefixJSP 파일이 위치한 경로를 지정합니다.
    이 경로는 웹 애플리케이션의 루트(= 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)의 동작 방식과 관련이 있습니다.

1. 서블릿 컨테이너가 기본적으로 찾는 폴더 구조

  • JSP 기반 프로젝트에서는 JSP와 정적 리소스를 src/main/webapp 폴더에 두는 것이 표준입니다.
  • Tomcat과 같은 서블릿 컨테이너는 webapp 폴더를 웹 애플리케이션의 루트로 자동 인식합니다.
  • 따라서 실제 경로가 다음과 같아도,
src/main/webapp/WEB-INF/views/news.jsp
  • 아래처럼 설정하면 올바르게 동작합니다.
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

2. Spring MVC가 뷰 경로를 조립하는 방식

@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
profile
donggyun_ee

0개의 댓글