개발/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 프로젝트 환경
- Spring Web Dependency 추가
- Lombok 추가
- https://start.spring.io/
버전 다운그레이드 및 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 파일 실행