자동화의 이슈를 제외하더라도, 우리가 개발한 Spring-Boot프레임웍이 어떻게 올바르게 빌드를 하고

배포되며 환경의 차이를 극복하고 올바르게 실행이되어야 하는 문제는 중요한 문제입니다.


빌드편

  • 정리할것

배포편

  • 정리할것

운영설정파일 분리편

  • 정리할것

서비스화

Systemctl을 이용한방법 -CentOS

CentOS기준으로 살펴보겠습니다.

일반적으로 서버 어플리케이션 실행에 있어서, 구동된것을 멈추는 GraceFullyStop 과정이 더 중요하고 어려울수 있습니다.

kill을 하거나 미들웨어 어플리케이션을 강제 종료하는것은 우리가 사용중인 컴퓨터의 전원을 off하는거와 마찮가지입니다.

키보드 인터럽트(ctrl+c) 예외 발생시 어플리케이션 자체가 정상 종료구조로 가는 방식이 되어야합니다.

kill은 다음과 같은 문제를 야기를 합니다.

  • 사용자의 요청이 진행되었지만, 비정상 종료되어 DB및 로그에 아무런 근거가 없다.
  • 어플리케이션이 갑자기 종료되어, 로그파일이 깨져버렸다.
  • 어플리케이션 모니터링을 위해 감지기능을 추가하였지만, 정상종료가 아닌 비정상종료가 발생하며 업데이트 플랜 계획을 세울수가 없다.

어플리케이션내에서 자기자신을 정리하고 내리는 과정이 오래걸리기때문에 빠르게 내리는 kill방식이 권장된다.

라고 접근하는것은 어플리케이션 내에 종료 디펜던시를 포함하여, 전체 디펜던시조차 파악이 안되 부분을 적용하기 위해

All kill , All Run이라는 아주 최악의 방식이 될수가 있습니다.


서비스/데몬 등록

etc/systemd/system/my-awesome-service

[Unit]
Description=My Awesome Service
Requires=network.target eureka-server.service config-server.service
After=network.target

[Service]
User=myuser
Group=mygroup
Type=simple
ExecStart=/usr/java/latest/bin/java -jar /srv/spring/my-awesome-service-1.0.0.jar
RestartSec=10
Restart=on-failure

[Install]
WantedBy=multi-user.target


더자세한 정보 : https://www.freedesktop.org/software/systemd/man/systemd.service.html

서비스제어


systemctl start my-awesome-service

Restarting the service.

systemctl restart my-awesome-service

Stopping the service.

systemctl stop my-awesome-service

This command can be issued to tell systemd to start the service at system boot.

systemctl enable my-awesome-service

로깅

서비스를 실행하였는데, 어떠한 이유에의해서 구동은 실패가 날수가 있습니다. 어플리케이션이 자체적으로 적는 log를 통해서도 문제파악이가능하지만

어플리케이션을 올리는 과정에서 문제가 없는지 살펴보려면 구동과정의 윗단계의 로깅이 필요합니다. 


journalctl -f -u my-awesome-service


여러선택지

리눅스에서 마이크로 웹서비스를 구동/종료하기 위해 여러가지 아이디어및 구동 플랫폼이 존재합니다.





  • No labels