[Spring Boot] Spring Boot 웹 애플리케이션 배포하기 - jar 파일 배포, Windows 서비스 등록

김희정·2023년 11월 7일
2

Spring

목록 보기
8/18

💎 들어가며

이번 포스팅에서는 Spring Boot로 만든 웹 애플리케이션을 배포하는 방법에 대해 기술하고자 합니다.

IntelliJ IDE에서 Maven 기반의 Spring Boot 애플리케이션의 배포 파일을 생성하고 실행, Windows에 서비스를 등록하는 방법에 대해 기술합니다.



1. Embeded Tomcat

기존에 Spring Framework로 만든 웹 애플리케이션은 war파일 형태로 배포 파일(패키징)을 생성하면 서버에 tomcat을 설치하고 webapp 폴더에 배포를 진행했었는데요, 이와 다르게 Spring Bootjar로 배포 파일을 생성하면 아래와 같이 java 명령어로 웹 애플리케이션을 바로 실행할 수 있습니다

java -jar 배포파일.jar

그 이유는 Spring Boot가 내장 톰캣 방식이기 때문입니다.

참고

스프링 부트의 특징 중 하나는 톰캣 서버가 내장되어있다는 것이다. 내장 서버는 어떻게 작동되는 것일까?

톰캣 내장 서버가 자동 설정의 일부이기 때문이다. 스프링 부트에서는 톰캣과 서블릿 서버가 자동으로 설정되어있다. 따라서 스프링부트 애플리케이션을 실행하면 톰캣이 생성되고 서블릿이 추가가 되면서 애플리케이션이 정상적으로 작동한다.



2. Deployment

IntelliJ에서 Maven 기반의 애플리케이션을 배포하기 하는 프로세스에 대해 설명합니다.

  1. 오른쪽 사이드바에서 Maven 툴바를 엽니다.
  2. 수명주기에서 [clean > install]을 수행합니다.
  3. 탐색기로 프로젝트 경로 아래 target 폴더를 열면 배포 파일이 생성된 것을 볼수 있습니다.

2.1 Maven Life Cycle

IntelliJ Spring Boot 화면

Maven의 생명주기에는 clean, validate, compile, test, package, verify, install, site, deploy 등이 있습니다.

생명 주기를 통해 배포를 진행합니다.

Maven의 생명주기

Reference

Maven의 생명주기는 미리 정해진 빌드 순서를 의미합니다.

메이븐은 빌드 도구 이기 때문에 빌드 동작 방식이 정해져있고, 이때 미리 정의하고 있는 빌드 순서를 라이프사이클(Lifecycle)이라 합니다.

  • Clean : 빌드 시 생성되었던 파일들을 삭제하는 단계
  • Validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
  • Compile : 프로젝트의 소스코드를 컴파일 하는 단계
  • Test : 유닛(단위) 테스트를 수행 하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능)
  • Pacakge : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등등의 파일 등의 배포를 위한 패키지로 만드는 단계
  • Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
  • Install : 패키지를 로컬 저장소에 설치하는 단계
  • Site : 프로젝트 문서와 사이트 작성, 생성하는 단계
  • Deploy : 만들어진 package를 원격 저장소에 release 하는 단계

2.2 탐색기로 열기

탐색기로 열기

[프로젝트 > 다음에서 열기 > 탐색기]를 클릭하면 프로젝트가 있는 상위 폴더로 탐색기를 열수 있습니다.


2.3 Target Folder

target 폴더
target 폴더에는 {artifactId}-{version}.jar로 파일이 생성됩니다.



3. Windows Service

배포된 파일을 클릭해서 실행하거나 cmd를 열어서 java 명령어로 실행해도 되지만, 그렇게 되면 여러가지 단점이 있습니다.

  • CMD 창이 항상 켜져있어야됨
  • 서비스 추적이 어려움

따라서 배포 시에는 항상 서비스 등록하는 것을 최선으로 고려해야 합니다.


3.1 NSSM

NSSM은 윈도우 서비스 관리 프로그램입니다.

NSSM

Reference: 공식 홈페이지

NSSM (the Non-Sucking Service Manager)은 윈도우 서비스 관리 프로그램입니다. NSSM의 특징을 정리하면 아래와 같습니다.

  • 서비스 등록, 수정, 시작, 중지, 상태 등
  • 서비스 모니터링 및 재시작
  • 시스템 이벤트 로그 기록
  • 설치 없이 사용
  • 그래픽 제공

NSSM은 공식 홈페이지 에서 다운받을 수 있습니다.


3.2 Service Install & Execute

1) 배포폴더 생성

우선 서비스 등록에 앞서 배포 폴더를 생성합니다.

배포폴더

배포 폴더 안에는 jar 파일 및 설정 파일을 추가해줍니다.

기본적으로 설정 파일이 내장되어 있는데 위 폴더에 설정 파일을 추가해주는 이유는 위와 같이 설정 파일이 있어야 운영 환경에 따라 설정 변경이 가능합니다.

application.ymlspring.profiles.active에 운영환경을 의미하는 prod 혹은 real 등의 code를 추가하고 application-{code}.yml 파일만 남겨도 됩니다.


2) NSSM 실행

공식 홈페이지에서 다운로드 받은 NSSM의 압축을 풀어 nssm.exe 파일이 있는 곳으로 찾아갑니다.

NSSM 폴더 > Win64 폴더nssm.exe 파일이 있습니다.

NSSM 폴더

해당 폴더에서 CMD창을 열어 nssm 명령을 실행합니다. 그냥 nssm을 치면 help 명령과 같이 사용할수 있는 명령어 목록을 보여줍니다.

nssm 명령


3) NSSM 서비스 등록

NSSM으로 jar 서비스를 등록하는 과정은 다음과 같습니다.

서비스 등록 과정

  1. Path에 사용할 JAVA 설정 (java.exe 설정)
  2. 배포 폴더를 시작 폴더로 지정
  3. java 옵션으로 사용할 jar 파일 지정 (이때, 실행될 java 옵션을 수정할 수 있습니다.)

4) 서비스 실행

서비스 등록이 완료 되었으면 서비스 앱을 열어 서비스 상태를 관리할 수 있습니다.

서비스 앱 실행

서비스가 잘 실행되는지 로그를 확인하기 위해서는 application.yml 파일에 아래 로깅 정보를 추가해주면 됩니다.

logging:
  file:
    path: ./logs
    max-size: 10MB
    max-history: 10

서비스가 시작되면 배포 폴더로 logs 폴더가 생성됩니다.

로그 폴더 생성


Appendix. nssm 명령어

  • install: 서비스 설치
  • remove: 서비스 제거
  • edit: 서비스 수정
  • start: 서비스 시작
  • stop: 서비스 중지
  • get: 서비스 정보 보기
  • set: 서비스 정보 수정

NSSM 사용 Tip

서비스를 잘못 등록했다고 해서 제거할 필요없이 edit 명령을 통해 수정할 수 있습니다.


💎 마치며

이번 포스팅에서는 개발된 프로젝트를 실제 배포하는 방법에 대해 기술했습니다.

profile
Java, Spring 기반 풀스택 개발자의 개발 블로그입니다.

0개의 댓글