inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 부트 - 핵심 원리와 활용

정리

javaw 로 백그라운드 실행한 이후에 재시작할 때는 종료 후 시작으로 하면 되나요?

해결된 질문

811

psam1017

작성한 질문수 11

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

저희 회사는 지금 외장 톰캣을 사용하고 있습니다. 그런데 외장 톰캣과 관련해서 SpringApplicationShutdownHook 에 버그가 있고, 최근까지도 spring github 에 issue 로 보고된 것으로 알고 있습니다. 그 외에도 불편한 건 좀 있지만 특히 이 버그 때문에 내장 톰캣으로 배포해야겠다는 생각을 했습니다.

 

java -jar 로 실행하면 포어그라운드에서 실행되며 프롬프트를 나가면 해당 프로세스도 자동으로 종료가 됩니다. 그래서 javaw -jar 로 실행해서 백그라운드로 실행하려고 합니다.

1. 한 번 배포한 이후에는 매번 백그라운드의 프로세스를 종료하고 다시 시작하면 되나요?

2. 내장 톰캣 방식으로 애플리케이션을 실행하면, 외장 톰캣에 ROOT.war 를 옮기면 자동으로 재시작하는 그런 방법은 더 이상 사용할 수 없나요?

3. 1번과 2번이 그렇다는 가정 하에 제가 아는 지식 선에서는, 서비스의 중단 없이 배포를 하기 위해서는 2대의 서버 또는 서비스와 로드 밸런서를 활용해서 순차적으로 2개의 애플리케이션에 재시작 스크립트를 재실행하면 될 것 같습니다(CentOS 와 젠킨스를 사용하고 있습니다).
혹시 실무에서 더 추천할 만한 배포 방식이나, 관련 레퍼런스를 알기 위한 키워드, 공부 방향을 배울 수 있을까요??

spring spring-boot tomcat

답변 1

2

김영한

안녕하세요. psam1017님

  1. 내장 톰캣을 사용할 때 일반적으로 java -jar 명령을 사용하여 애플리케이션을 실행합니다. 이 경우, 배포 후에는 애플리케이션을 백그라운드로 실행하고, 필요할 때마다 종료하고 다시 시작해야 합니다. nohup 명령을 사용하거나 javaw -jar를 사용하여 프로세스가 백그라운드에서 계속 실행되게 할 수 있습니다. 업데이트를 위해서는 기존 프로세스를 안전하게 종료하고 새 버전으로 다시 시작해야 합니다.

  2. 내장 톰캣을 사용하는 경우, 외장 톰캣에서 WAR 파일을 옮겨 재시작하는 방식을 직접적으로는 사용할 수 없습니다.

  3. 서비스 중단 없이 배포를 하는 전략으로는 여러 방법이 있습니다. Blue-green 배포, 롤링 업데이트, 카나리 릴리스와 같은 전략들이 있으며 이는 서비스의 가용성을 보장하는 동시에 신규 버전을 배포하는 방법입니다. 로드 밸런서를 이용한 순차적 재시작은 롤링 업데이트의 일종으로, 서버 중 한 대의 애플리케이션을 업데이트하고 다른 서버로 트래픽을 이동시키는 방식입니다.

추가적으로 공부하실 수 있는 키워드는 다음과 같습니다:

  • CI/CD (Continuous Integration/Continuous Delivery): 지속적 통합과 지속적 배포를 위한 방법론입니다.

  • Jenkins Pipelines: 자동화된 배포 파이프라인을 구성하는 데 사용되는 툴입니다.

     

  • Blue-Green Deployment: 두 개의 생산 환경을 운영하여 하나는 현재 버전을, 다른 하나는 새 버전을 실행시키는 방식입니다.

추가로 지속적인 통합이라는 책을 보시면 큰 방향을 잡는데 도움이 되실거에요.

감사합니다.

2

psam1017

답변 알림 기다리고 있었는데, 알림이 오지 않아서 확인이 좀 늦었습니다...ㅠㅠ

친절한 설명 정말 감사드립니다. 키워드로 방향을 알게 되니 어떻게 공부해갈지 자신감과 안심이 생기네요ㅎㅎ 앞으로도 열심히 공부하겠습니다. 감사합니다.

보안이 엄격한 데이터

0

73

1

MyProperties 자체를 클라이언트 코드에서 사용

1

43

1

http://localhost:8080/actuator/prometheus

0

85

3

jar 추가에대한 질문드려도될까요?

0

64

1

build.gradle bom link 변경

0

65

2

@Counted 초기화

0

48

1

@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..

0

101

2

springboot에서 actuator없이 micrometer를 사용할수 있나요?

0

67

1

@Configuration 질문드립니다.

0

84

2

[공유] 터미널 말고 IDE 에서 jar 실행하기

0

101

1

localhost:8080/hello-servlet 404오류

0

123

2

내장톰캣2 서블릿 톰켓 실행이 안됩니다

1

154

2

최대 Tomcat 스레드 수를 확인하는 지표

0

160

1

mac m2에서 startup.sh 실행후 아무 반응이 없습니다.

0

94

2

내장 톰캣 실행 오류 관련 질문드립니다.

0

158

1

스프링 발전 과정들도 자세히 알아둬야하나요??

1

127

1

스프링부트 ioc 컨테이너 갯수

0

89

1

404 페이지

0

133

3

actuator 호출시 타임스탬프 질문

0

90

1

순수 라이브러리 사용하기 2 - memory-v1

0

125

1

외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.

0

105

1

서블릿 컨테이너 초기화1 강의 관련 질문입니다~

0

94

1

Thread Config Max 패널 설정 변경 질문

0

128

1

스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.

0

108

1