본문 바로가기

Spring

스프링부트 코틀린 프로젝트에 jsp 띄우기

이번에 프로젝트에 jsp 파일을 연동하는 설정이 필요했다. 

그런데 이 프로젝트 설정에서부터 쉽지 않았기에 간단하게나마 해결 과정을 기록하고자 한다.

 

프로젝트 구성

프로젝트는 멀티 모듈 프로젝트이고, 애플리케이션을 실행시키는 bootstrap 모듈과 connector 모듈 두 가지가 존재한다.

 

문제상황

먼저 문제점은 설정을 다 마쳤음에도 jsp 페이지를 포워드하는 컨트롤러를 호출할 때 404 에러를 뱉어낸다는 것이었다.

컨트롤러 함수 호출까지는 정상적으로 되나 그 이후 jsp 파일을 못 찾는 현상이었다.

 

jsp 파일 404 키워드로 구글링을 해서 첫 몇 페이지는 모두 읽어보고 적용해 보고 많은 시간 삽질을 했다.

 

jsp 의존성 추가 및 설정

connector 모듈 build.gradle

dependencies {
    // jsp 관련 의존성 추가
    implementation("org.apache.tomcat.embed:tomcat-embed-jasper")
    implementation("org.glassfish.web:jakarta.servlet.jsp.jstl")
    implementation("jakarta.servlet:jakarta.servlet-api")
    implementation("jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api")
}

jsp 관련 의존성을 추가하였고, 이외 bootstrap 모듈에도 스프링 웹 등 필요 의존성을 추가하였다.

 

yml 파일 설정

spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp

 

해결 과정

  1. WAR 빌드 설정: JSP 파일을 사용하기 위해 프로젝트를 WAR로 빌드해야 했다. 따라서 bootstrap 모듈의 build.gradle.kts에 id("war") 플러그인을 추가했다.
  2. 실행 방법: 프로젝트를 실행할 때는 반드시 Gradle 탭에서 project > tasks > application > bootRun을 통해 실행해야 한다. 평소처럼 IDE의 우측 상단의 실행 버튼으로 실행하면 jsp 파일을 찾지 못하고 404 에러가 발생했다.
  3. JSP 파일의 위치: JSP 파일은 bootstrap 모듈 내의 webapp/WEB-INF/jsp 경로에 위치시켜야 했다. 처음에는 connector 모듈에 JSP 파일을 넣었으나, 경로를 찾지 못해 404 에러가 발생했다.

 

 

프로젝트 구조 예시:

 
project-root
│
├── bootstrap
│   ├── src
│   │   ├── main
│   │   │   ├── kotlin
│   │   │   │   └── com
│   │   │   │       └── example
│   │   │   │           └── Application.kt (main 함수)
│   │   │   └── webapp
│   │   │       └── WEB-INF
│   │   │           └── jsp
│   │   │               └── yourJspFile.jsp
│   │   └── resources
│   │       └── application.properties
│   └── build.gradle.kts
│
├── connector
│   ├── src
│   │   ├── main
│   │   │   ├── kotlin
│   │   │   │   └── com
│   │   │   │       └── example
│   │   │   │           └── controller
│   │   │   │               └── YourController.kt
│   └── build.gradle.kts
└── build.gradle.kts