개발/Spring

Spring Boot로 JSP 배포하기(java 8로 버전 다운그레이드)

맥모닝프로 2024. 8. 31. 19:37

Spring Boot를 통한 JSP 배포시 이슈 사항

  • Spring Boot를 통해서는 Jar 프로젝트로 만들 수 없음
    • Jar 프로젝트 같은 경우 웹 컨테이너 구조가 아니기에 웹 애플리케이션 요소를 미포함
    • War 프로젝트로 가능
  •  내장 톰캣 / 외장 톰캣
    • 성능에 대한 유의미한 차이는 없음
    • 내장 톰캣
      • ./gradlew bootWar
      • 내부/외부 서블릿 컨테이너(톰캣)에서 실행 가능한 WAR 파일 빌드
    • 외장 톰캣
      • ./gradlew war
      • 외부 서블릿 컨테이너(톰캣)에서만 실행 가능한 WAR 파일 빌드
      • virtual host 같은 기능의 구성시 간단하게 적용 가능
        • 도메인 host에 따라서 가각의 다른 루트 컨테스트를 갖게 하는 기능
        • 하나의 웹 애플리케이션 배포만으로 여러 애플리케이션을 운영하는 것처럼 하는 기능
  • Spring Boot Java 8 지원 종료
    • 2023년 11월 24일부로 start.spring.io 에서 스프링 부트 2.x 버전들에 대한 지원이 종료.
    • 스프링 부트 3.0 이상을 선택

배포 환경

  • Java
    • openjdk version "1.8.0_322"
    • OpenJDK Runtime Environment (build 1.8.0_322-b06)
    • OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)

Spring 프로젝트 환경

버전 다운그레이드 및 build.gradle 수정

  • 스프링부트 버전 수정
    • 현재 Spring은 Java8을 공식 지원하지 않아 2.x 버전은 지원하지 않고 있다.
    • 배포 환경은 Java 8을 사용하기에 3.3.2 -> 2.7.5 버전으로 변경하였다.
  • Java 버전 수정
    • 1.8로 변경
  • implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' 추가
    • 내장 톰캣을 사용하기 위해 해당 디펜던시 추가

JSP 사용을 위한 프로젝트 구조 변경

  • webapp: 스프링에서 Web을 정의하는 root 폴더
  • WEB_INF: J2EE 사양에 따라 정의된 표준 폴더 구조
  • view: JSP 파일 모음 폴더
├── HELP.md
├── README.md
├── build.gradle
├── gradle
│ └── wrapper
│     ├── gradle-wrapper.jar
│     └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │ ├── java
    │ │ └── io
    │ │     └── xxxxxxxxxx
    │ │         └── accounts
    │ │             ├── AccountsApplication.java
    │ │             ├── ServletInitializer.java
    │ │             └── controller
    │ │                 ├── ErrorController.java
    │ │                 ├── IndexController.java
    │ │                 └── ServiceAccountController.java
    │ ├── resources
    │ │ ├── application.properties
    │ │ ├── static
    │ │ └── templates
    │ └── webapp
    │     └── WEB-INF
    │         └── view
    │             ├── error.jsp
    │             └── index.jsp
    │        
    └── test
        └── java
            └── io
                └── xxxxxxx
                    └── accounts
                        └── AccountsApplicationTests.java

ViewResolver 설정

  • 프로젝트 구조 변경으로 인한 ViewResolver 경로 수정
  • Controller에서 viewname을 받으면 /WEB-INF/view/ 경로에서 viewname 뒤에 .jsp 붙여 해당 파일 검색

Controller

  • controller 패키지에 ServiceAccountController 생성
  • /service-account 로 GET, POST요청이 들어오면
  • service-account.jsp 파일로 접근

빌드 방법

./gradlew bootwar # war 파일로 빌드
  • war 파일 생성
  • /프로젝트/build/libs 경로에 생성(/account/build/libs)

빌드 결과

  • /프로젝트/build/libs 경로에 생성(/account/build/libs)
  • "프로젝트-0.0.1-SNAPSHOT.war" 이름으로 파일 생성

java -jar accounts-0.0.1-SNAPSHOT.war # war 파일 실행