이번 포스팅에서는 Spring Boot
로 만든 웹 애플리케이션을 배포하는 방법에 대해 기술하고자 합니다.
IntelliJ
IDE에서 Maven 기반의 Spring Boot 애플리케이션의 배포 파일
을 생성하고 실행, Windows에 서비스를 등록하는 방법에 대해 기술합니다.
기존에 Spring Framework
로 만든 웹 애플리케이션은 war
파일 형태로 배포 파일(패키징)을 생성하면 서버에 tomcat을 설치하고 webapp 폴더에 배포를 진행했었는데요, 이와 다르게 Spring Boot
는 jar
로 배포 파일을 생성하면 아래와 같이 java 명령어로 웹 애플리케이션을 바로 실행할 수 있습니다
java -jar 배포파일.jar
그 이유는 Spring Boot가 내장 톰캣 방식이기 때문입니다.
참고
스프링 부트의 특징 중 하나는 톰캣 서버가 내장되어있다는 것이다. 내장 서버는 어떻게 작동되는 것일까?
톰캣 내장 서버가 자동 설정의 일부이기 때문이다. 스프링 부트에서는 톰캣과 서블릿 서버가 자동으로 설정되어있다. 따라서 스프링부트 애플리케이션을 실행하면 톰캣이 생성되고 서블릿이 추가가 되면서 애플리케이션이 정상적으로 작동한다.
IntelliJ
에서 Maven
기반의 애플리케이션을 배포하기 하는 프로세스에 대해 설명합니다.
Maven 툴바
를 엽니다.clean
> install
]을 수행합니다.target 폴더
를 열면 배포 파일이 생성된 것을 볼수 있습니다.Maven의 생명주기에는 clean
, validate
, compile
, test
, package
, verify
, install
, site
, deploy
등이 있습니다.
생명 주기를 통해 배포를 진행합니다.
Maven의 생명주기
Maven의 생명주기는 미리 정해진 빌드 순서를 의미합니다.
메이븐은 빌드 도구 이기 때문에 빌드 동작 방식이 정해져있고, 이때 미리 정의하고 있는 빌드 순서를 라이프사이클(Lifecycle)이라 합니다.
Clean
: 빌드 시 생성되었던 파일들을 삭제하는 단계Validate
: 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계Compile
: 프로젝트의 소스코드를 컴파일 하는 단계Test
: 유닛(단위) 테스트를 수행 하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능)Pacakge
: 실제 컴파일된 소스 코드와 리소스들을 jar, war 등등의 파일 등의 배포를 위한 패키지로 만드는 단계Verify
: 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계Install
: 패키지를 로컬 저장소에 설치하는 단계Site
: 프로젝트 문서와 사이트 작성, 생성하는 단계Deploy
: 만들어진 package를 원격 저장소에 release 하는 단계
[프로젝트
> 다음에서 열기
> 탐색기
]를 클릭하면 프로젝트가 있는 상위 폴더로 탐색기를 열수 있습니다.
target 폴더에는 {artifactId}-{version}.jar
로 파일이 생성됩니다.
배포된 파일을 클릭해서 실행하거나 cmd
를 열어서 java
명령어로 실행해도 되지만, 그렇게 되면 여러가지 단점이 있습니다.
따라서 배포 시에는 항상 서비스 등록하는 것을 최선으로 고려해야 합니다.
NSSM은 윈도우 서비스 관리 프로그램입니다.
NSSM
Reference: 공식 홈페이지
NSSM (the Non-Sucking Service Manager)은 윈도우 서비스 관리 프로그램입니다. NSSM의 특징을 정리하면 아래와 같습니다.
- 서비스 등록, 수정, 시작, 중지, 상태 등
- 서비스 모니터링 및 재시작
- 시스템 이벤트 로그 기록
- 설치 없이 사용
- 그래픽 제공
NSSM은 공식 홈페이지 에서 다운받을 수 있습니다.
우선 서비스 등록에 앞서 배포 폴더를 생성합니다.
배포 폴더 안에는 jar 파일 및 설정 파일을 추가해줍니다.
기본적으로 설정 파일이 내장되어 있는데 위 폴더에 설정 파일을 추가해주는 이유는 위와 같이 설정 파일이 있어야 운영 환경에 따라 설정 변경이 가능합니다.
application.yml
에 spring.profiles.active
에 운영환경을 의미하는 prod
혹은 real
등의 code를 추가하고 application-{code}.yml
파일만 남겨도 됩니다.
공식 홈페이지에서 다운로드 받은 NSSM의 압축을 풀어 nssm.exe
파일이 있는 곳으로 찾아갑니다.
NSSM
폴더 > Win64 폴더
에 nssm.exe
파일이 있습니다.
해당 폴더에서 CMD창을 열어 nssm 명령을 실행합니다. 그냥 nssm을 치면 help 명령과 같이 사용할수 있는 명령어 목록을 보여줍니다.
NSSM으로 jar 서비스를 등록하는 과정은 다음과 같습니다.
java.exe
설정)서비스 등록이 완료 되었으면 서비스
앱을 열어 서비스 상태를 관리할 수 있습니다.
서비스가 잘 실행되는지 로그를 확인하기 위해서는 application.yml
파일에 아래 로깅 정보를 추가해주면 됩니다.
logging:
file:
path: ./logs
max-size: 10MB
max-history: 10
서비스가 시작되면 배포 폴더로 logs
폴더가 생성됩니다.
install
: 서비스 설치remove
: 서비스 제거edit
: 서비스 수정start
: 서비스 시작stop
: 서비스 중지get
: 서비스 정보 보기set
: 서비스 정보 수정NSSM 사용 Tip
서비스를 잘못 등록했다고 해서 제거할 필요없이
edit
명령을 통해 수정할 수 있습니다.
이번 포스팅에서는 개발된 프로젝트를 실제 배포하는 방법에 대해 기술했습니다.