본문 바로가기
Java & 스프링/스프링부트 톺아보기

[스프링 부트 ] Nginx 와 함께 배포 하기(2)

by hjhello423 2019. 10. 15.

이전 포스팅에서 스프링 부트 jar 파일을 Nginx와 함께 리눅스 환경에서 실행시켜 보았다.

 

그런데 기존에 java -jar 명령어를 이용해 실행시켰기 때문에 해당 명령어를 입력한 세션을 종료하면 서비스가 죽어버리는 문제가 있었다.

이번엔 이 문제를 해결해 보도록 하자.

 

방법을 여러 가지가 있는데 우리는 reference문서에 있는 내용 중에 initd 서비스를 이용하는 방법으로 해결하고자 한다.

레퍼런스 문서를 참고해 보자. 64.2.1 Installation as an init.d Service (System V)

 

 

일단 문서를 읽어본 결과, Maven 또는 Gradle 플러그인을 구성하여 완전히 실행 가능한 jar을 생성할 수 있다고 한다.

그리고 이 jar를 init.d 서비스로 사용하면 된다.

 


실행 가능한 jar를 생성하려면 Maven 플러그인을 아래와 같이 추가해 주어야 한다.

pom.xml에 아래 내용이 없다면 추가해 주도록 하자.

<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<configuration>
		<executable>true</executable>
	</configuration>
</plugin>

 


이제 리눅스에서 작업을 시작해 보자.

 

일단 이전의 jar 파일을 아래 경로에 복사해 두었다.

각자 환경에 맞는 경로를 기억해 두자.

/home/itsme/toy_project-1.0-SNAPSHOT.jar

 

우리는 이제 아래의 명령어를 입력만 해도 서비스가 시작 되게 작업을 진행할 것이다.

systemctl start myapp

명령어 한 줄로 서비스 시작이 되도록 환경을 구성해 보자.

 

매우 간단하게 할 수 있지만 깊게 들어가면 CentOS의 systemd에 대해 알고 있어야 한다.

systemd에 대한 내용은 아래 링크에서 정리해 보려고 한다. (아직 내용이 부족하지만 차차 업데이트 예정이다.)

[리눅스] - [CentOS] systemd

 


/etc/systemd/system 경로에 'myapp.service' 파일을 생성해 보자. 그리고 아래의 내용을 입력하자.

[Unit]
Description=myapp
After=syslog.target

[Service]
User=itsme
ExecStart=java -jar /home/itsme/toy_project-1.0-SNAPSHOT.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

각 옵션의 자세한 내용은 위 링크에서 확인해보고 체크해야 할 부분만 설명해 보겠다.

자세한 옵션 내용은 링크(systmed 글)를 찾아보길 바란다.

 

Description : 서비스 설명

User : 실행 계정

ExecStart : 실행 명령어

 


끝이다.

간단하다. ^^

 

물론 실서버 운영 환경에서는 더 자세한 설정이 필요할 것이다.

 

자 이제 실행시켜 보자. (권한 문제로 pwd를 요구할 수 있다.)

systemctl stop myapp

 

이제 부트 서비스가 실행되었다.

nginx를 실행시킨 뒤에 웹페이지로 이동해 보면 서비스가 정상적으로 동작하는 것을 확인할 수 있다.

 

만약 응용 프로그램이 시작되지 않으면 /var/log/<appname>.log에 기록된 로그 파일에서 오류를 확인해보자.

 


 

반응형

댓글