Spring - JSP를 사용하는 스프링 부트 (Spring Boot) 프로젝트 만들기

스프링 부트(Spring Boot)로 프로젝트를 만들면서 JSP를 사용해야 하는 경우는 어떤 경우일까요? 바로 레거시 웹 프로젝트를 스프링 기반으로 업그레이드(변경) 해야 하는 경우입니다. 예전에 자바로 만들어진 웹 프로젝트들은 Thymeleaf, Velocity와 같은 템플릿 엔진을 사용하지 않고 JSP(Java Server Page)로 만든 경우도 흔합니다. 이러한 이유로 최신의 기술(스프링 혹은 스프링 부트)을 사용하려고 한다면 스프링 부트에 JSP를 사용할 수 있도록 설정을 해주어야 합니다.

JSP를 사용하는 스프링 부트 (Spring Boot) 프로젝트 만들기

현재 스프링 부트에서 추천하는 템플릿 엔진은 Thymeleaf, Freemarker, Mustache 등입니다. 그래서 손쉽게 몇 번의 클릭만으로 사용이 가능합니다. 그에 비해 JSP는 많이 사용되지 않고 권장되지 않습니다.

 

 스프링 부트에서 JSP를 사용하기 위해서는 기본 프로젝트 구성을 수정해야 합니다. 처음 프로젝트를 만드는 과정부터 폴더 구조 만들기, 라이브러리 추가까지 JSP를 사용할 수 있도록 하는 방법에 대해 알아보겠습니다.

스프링 부트 프로젝트 만들기

start.spring.io로 스프링 부트 프로젝트 만들기

스프링 부트를 기반으로 하는 프로젝트를 만드는 가장 간단한 방법은 스프링 부트 프로젝트를 만들어주는 공식 사이트 기능을 사용하는 것입니다. https://start.spring.io/를 사용하는 방법은 많은 정보들이 있기 때문에 별도로 설명은 하지 않겠습니다.

 

 위에서 제시한 프로젝트 구성은 참고용으로 보시고, 실제 프로젝트 구성은 본인이 구성하고자 하는 설계에 따라 변경해서 사용하시기 바랍니다. 예시 이미지의 기본 구성은 Gradle을 기반으로 프로젝트를 빌드하고, Java 1.8 버전을 사용하게 구성하였습니다. 또한 스프링을 기반으로 하기 때문에 Spring Web 의존성을 추가하였습니다.

 

start.spring.io로 프로젝트 다운로드하기

 공식 사이트를 이용해 프로젝트 구성을 정의한 뒤 GENERATE 버튼을 눌러 기본 구조가 완성된 프로젝트를 다운로드 받아주세요. EXPLORE를 이용하면 현재 설정한 구성을 기반으로 정의되는 프로젝트 구조를 확인할 수 있습니다.

JSP 컴파일을 위한 라이브러리 추가

JSP(Java Server Page)도 템플릿 엔진이기 때문에 사용하기 위해서는 별도의 라이브러리가 필요합니다. JSP를 지원하는 대표 엔진은 apache의 tomcat입니다.

implementation "org.apache.tomcat.embed:tomcat-embed-jasper"

 다운로드한 프로젝트 내에 있는 build.gradle 파일의 dependencies 부분에 org.apache.tomcat.embed:tomcat-embed-jasper 라이브러리를 추가해주세요. 만약 gradle 대신 maven을 사용하고 계신다면 아래의 구문을 사용하시면 됩니다.

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
  <scope>provided</scope>
</dependency>

 

 

JSP를 사용하기 위한 프로젝트 구조 변경

스프링 부트에서 Thymeleaf를 사용하면 다운로드한 그대로 프로젝트 구조를 사용해도 문제가 없지만, 별도의 템플릿 엔진이나 JSP를 사용하기 위해서는 webapp와 WEB-INF 폴더를 포함한 구조로 프로젝트 구성을 변경해야 합니다.

 

 webapp 폴더는 스프링에서 웹을 정의하는 root 폴더이며, WEB-INF는 J2EE 사양에 따라 정의된 표준 폴더 구조입니다. 웹 애플리케이션과 폴더 구조와 관련된 내용은 이 링크를 확인해서 보시면 더 자세하게 설명되어있습니다. 즉 스프링 부트를 이용해 스프링 프로젝트를 만들고 JSP를 사용하고 싶다면 webapp 폴더와 WEB-INF 폴더를 만들어야 합니다.

스프링 부트에서 사용하는 JSP 웹 프로젝트 구조

 위에서 제시한 구조와 같이 프로젝트 폴더 구조를 변경하시면 웹 프로젝트의 기본 폴더 구조를 적용하게 됩니다. 예시 구조에서는 파일 구분을 위해 WEB-INF 폴더 밑에 view 폴더를 추가하였습니다. view 폴더는 JSP 파일들만 넣어서 사용하기 위해 정의한 구조로, 개인 혹은 프로젝트의 성격에 따라 사용하면 되는 내용입니다.

JSP를 사용하기 위한 뷰 리졸버 (ViewReslover) 설정 변경

스프링 부트 프로젝트 구조가 변경이 일어났기 때문에 스프링 부트에서 사용하는 뷰 리졸버(ViewResolver)의 설정 값을 변경해야 합니다. 정확히는 ViewResolver의 경로(Path)를 수정해야 합니다.

스프링 부트의 뷰 리졸버 (ViewResolver) 경로 변경

 스프링 부트는 환경 요소 값을  application.properties 파일을 통해 설정할 수 있습니다. application.properties는 src > main > resources 폴더에 위치합니다.

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

 위의 값으로 application.properties 파일에 값을 설정하면 ViewResolver의 경로 값을 변경할 수 있습니다. 프로젝트 구조를 변경할 때 사용한 폴더를 기준으로 설정하시면 됩니다.

 

 이 설정까지 완료가 되었다면 스프링 부트 프로젝트에서 JSP를 사용하기 위한 준비는 끝났습니다. 프로젝트를 만들고 JSP 라이브러리를 추가하고, 표준 웹 프로젝트 구조를 반영하고 구조에 따라 프로젝트 설정을 변경하면 Spring Boot + JSP 프로젝트가 완성됩니다.

 

 

JSP를 사용하는 스프링 부트 (Spring Boot) 프로젝트 확인하기

JSP를 사용하는 스프링 부트 (Spring Boot) 프로젝트 만들기를 통해 프로젝트를 만들었다면, 이제는 잘 동작하는지 확인해볼 차례입니다. 임시로 Controller와 JSP 파일을 만들어 프로젝트가 정상적으로 동작하는지 확인해보겠습니다.

Controller 추가하기

@Controller
public class HelloController {

    @GetMapping("/")
    public String hello() {
        return "index";
    }
}

@Controller, @GetMapping 에노테이션을 이용해 / 로 요청이 들어오면 index 파일로 접근하도록 하는 Controller 클래스를 만들었습니다.

HelloController 클래스

index.jsp 추가하기

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Spring Boot Application</title>
</head>
<body>Hello, Spring Boot App</body>
</html>

별다른 내용 없이 화면이 정상적으로 보이는지 확인하기 위한 JSP 파일을 만들었습니다. JSP에서 HTML만 사용한다고 문제가 되는 부분은 없습니다.

index JSP

프로젝트 실행 화면

스프링 부트 프로젝트 with JSP 실행 화면

프로젝트를 실행해서 / 경로로 접근하면 index.jsp를 보여주는 화면을 확인하실 수 있습니다. 예시로 정의한 프로젝트 내용은 파일로 첨부하였습니다. 필요하신 분은 아래의 첨부 파일을 다운로드 받아서 사용하시면 됩니다.

demo.zip
0.07MB

끝맺음

공식 사이트도 잘 만들어져 있고, 인터넷 상에도 많은 정보가 있기 때문에 스프링 부트 프로젝트를 만드는 방법은 어렵지 않습니다. 처음이라 어려울 수 있지만, 익숙하지 않기 때문에 어렵다고 느껴지는 것일 뿐 스프링 부트를 이용해 웹 프로젝트를 만드는 일은 생각보다 간단합니다.

 

 만약 JSP를 사용하지 않고 스프링 부트를 이용해 웹 프로젝트를 만든다면, 스프링 부트 프로젝트 만들기 단계만 진행하셔도 몇 분 안에 웹 프로젝트를 만들 수 있습니다. 아직 웹 프로젝트를 혼자서 구축해본 경험이 없다면 이 글을 통해서 조금이나마 도움이 되셨기를 바라봅니다.

반응형

댓글

Designed by JB FACTORY