Codestates [Back-end]/데일리 로그 [TIL]

22.10.17 SpringBoot - JRE를 이용한 WAR 실행 파일 빌드 및 실행

[Contect] nyong9221@gmail.com 2022. 10. 17. 21:59
728x90

설치파일

1. JRE 설치 다운로드 링크

: 본인의 운영체제에 맞게 설치한다.

: Windows의 경우, C:\Program Files\Zulu\zulu-11-jre 경로로 설치될 것이다


2. 시스템 환경변수 설정

: 설정 후 IntelliJ 프로젝트를 한번 껏다 켜야 정상작동함

변수이름 : JRE_HOME
변수 값 : C:\Program Files\Zulu\zulu-11-jre

3. 톰캣 설정 (다운로드 링크)

: JDK 11버전 기준 톰캣 9 버전이 제일 호환성이 좋다

: 아래 중 운영체제에 맞게 다운로드한다

: 압축해제만 하면 되며, 위치는 아무데나 해도 된다

: 필자의 경우, 그냥 다운로드 폴더에 압축해제했다 (단, 실행을 위해선 경로를 알아야 한다)

C:\Users\nyong\Downloads\apache-tomcat-9.0.68-windows-x64

* bin : 톰캣 실행 및 종료 스크립트 파일이 들어있음

* conf : 서버 설정 파일이 들어있음

* webapps : 톰캣 위에서 실행할 웹앱의 기본 저장 경로. war파일을 둘 곳.


서버 실행 및 종료

1. Windows : cmd사용 (wsl아님)

반드시 파일이 있는 디렉토리로 이동 (본인이 압축해제한 경로의 bin폴더)
cd  ~/Desktop/Downloads/apache-tomcat-9.0.68-windows-x64/apache-tomcat-9.0.68/bin

톰캣 실행
.\startup.bat

톰캣 종료
.\shutdown.bat

2. Mac

톰캣 실행
{username}@{root} bin % ./start.sh 

톰캣 종료
{username}@{root} bin % ./shutdown.sh

3. 브라우저에서 localhost:8080 입력시 실행 화면 : 톰캣은 디폴트로 8080포트사용


WAR 파일 빌드

방법 1. SpringBoot Initializer를 통한 프로젝트 생성시 build옵션을 WAR로 하는 방법


방법 2. JAR => WAR 포맷 변경 방법

1. build.gradle 수정 후 refresh

plugins {
   id 'org.springframework.boot' version '2.7.4'
   id 'io.spring.dependency-management' version '1.0.14.RELEASE'
   id 'java'
   id 'war'    // <= 추가 (순서 상관 없음)
}

2. 엔트리포인트 수정 (main메서드가 있는 ~~Application 클래스)

: SpringBootServletInitializer를 상속함 (방법 1로 진행했을 경우, 해당 클래스를 상속한 클래스가 별도로 마련되있음)

@SpringBootApplication
public class sampleApplication extends SpringBootServletInitializer { // <== 상속

    public static void main(String[] args) {
        SpringApplication.run(sampleApplication.class, args);
    }

    @Override  // <== 애너테이션을 잊지말자
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // <== 메서드 오버라이드
        return builder.sources(sampleApplication.class);
    }
}

3. Gradle에서 bootWar 또는 war 한 번 실행

: 이 과정을 안할 경우, Jar파일로 빌드됨

4. 빌드 

: 위의 Gradle에서 build를 선택하거나 터미널에 아래 명령어 입력

./gradlew build

5. war 파일 이동 

: 톰캣 실행과 동시에 war파일을 실행시키기 위해서, webapps디렉토리에 넣어놔야한다

: war파일의 파일명이 ROOT인 경우엔 별도의 설정없이 실행이 가능하나,

  다른 이름인 경우, conf 디렉토리의 server.xml에서 추가설정을 해야한다.

디렉토리
C:\Users\nyong\Downloads\apache-tomcat-9.0.68-windows-x64\webapps

 

6. server.xml 파일 추가 설정

: 실행중인 톰캣은 정지하고 진행하자 (./shutdown.sh)
: 파일의 아래 코드 부분에 표시한 코드 (<Context>태그 부분)를 추가로 작성한다

: docBase="이 부분"에 본인이 설정한 프로젝트 이름을 작성한다  (필자는 터미널에서 nano 사용함)

: 프로젝트명은 해당 파일에서 확장자인 .war앞의 이름

...
<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context path="/" docBase="프로젝트명"  reloadable="false" > </Context>
        
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
...

7. 실행

: 이제 톰캣을 실행하면 war파일을 압축해제하여 webapps에 동일한 이름의 디렉토리가 구성된다.

: 실행 후 http://localhost:8080/본인이설정한URI주소 에 접속해보자

(예를들어 필자는 controller에 "/v1/todo"로 설정했기에 이 주소를 기반으로 핸들러 메서드에 접근했다.

: 이로서 WAS(웹 애플리케이션 서버)가 성공적으로 배포 되었다

*주의할 점: 프로젝트의 코드상에 오류가 있을경우, 오류 화면으로 리다이렉트된다


톰캣 포트 변경 방법

: 톰캣 기본포트가 8080이므로, IntelliJ에서 개발과 동시에 사용하려면 충돌이 일어난다.

: 따라서 배포와 로컬 개발 포트를 분리시키는 것이 좋다

: 변경 방법은 server.xml에서 아래와 같이 변경 가능하다 (필자는 nano 를 사용했다)

//터미널에서 나노에디터를 통해 server.xml 열기
$ nano server.xml

// 나노에선 pageup /pagedown으로 이동하면 편하다

// 저장
ctrl+X
Y
엔터

 

728x90