source

전쟁 파일과 컨테이너가 내장된 실행 가능 항아리 전개에 대한 조언

manycodes 2023. 3. 7. 21:38
반응형

전쟁 파일과 컨테이너가 내장된 실행 가능 항아리 전개에 대한 조언

자바 공간에서는 자바 웹 어플리케이션을 자바 서블릿 컨테이너(또는 애플리케이션 서버)로 전개하는 것에서 벗어나 워 파일(또는 이어 파일)의 형태로 어플리케이션을 jetty와 같은 임베디드 서블릿/HTTP 서버와 함께 실행 가능한 jar로 패키징하는 경향이 있는 것 같습니다.최종 사용자에게 애플리케이션을 제공하는 방법보다는 새로운 프레임워크가 새로운 애플리케이션을 개발 및 도입하는 방법에 더 큰 영향을 미칩니다(예를 들어 Jenkins가 임베디드 컨테이너를 사용하는 이유를 알 수 있기 때문입니다).실행 가능한 jar 옵션을 채택한 프레임워크의 예는 다음과 같습니다.Drop wizard, Spring Boot, Play(서블릿 컨테이너에서는 실행되지 않지만 HTTP 서버는 내장되어 있습니다).

질문입니다만, 지금까지 주로 Struts2 어플리케이션을 단일 Tomcat 어플리케이션 서버에 도입하고 있는 환경에서 임베디드 컨테이너 어프로치를 사용할 예정이라면 어떤 변경, 베스트 프랙티스 또는 고려사항이 필요합니까?현재 단일 Tomcat 서버에서 약 10개의 자체 개발 애플리케이션이 실행되고 있으며, 이러한 소규모 애플리케이션에서는 리소스를 공유하고 하나의 서버에서 관리할 수 있는 기능이 매우 좋습니다.델의 애플리케이션은 최종 사용자에게 배포되어 고객의 환경에서 실행되도록 설계되어 있지 않습니다.그러나 새로운 Java 프레임워크를 활용하기로 결정한다면 이 접근 방식을 변경해야 할까요?클라우드 구축(예: Heroku)의 사용이 증가함에 따라 실행 가능한 항아리로의 전환이 가속화되고 있습니까?

단일 애플리케이션 서버에서 여러 애플리케이션을 기존 전쟁 파일 배포와 같은 Play 스타일로 관리해 본 경험이 있는 경우 의견을 공유해 주십시오.

흥미로운 질문입니다.이것은 그 주제에 대한 나의 견해일 뿐이니 모든 것을 냉정하게 받아들여라.서블릿 컨테이너와 임베디드 서버를 모두 사용하여 애플리케이션을 도입하고 관리하는 경우가 있습니다.서블릿 용기를 사용하는 데는 아직 많은 이유가 있겠지만, 나는 그것들이 왜 오늘날 인기가 없는지에 초점을 맞추려고 노력할 것이다.

쇼트 버전:서블릿 컨테이너는 단일 호스트에서 여러 애플리케이션을 관리하는 데 유용하지만 단일 애플리케이션만 관리하는 데는 그다지 유용하지 않습니다.클라우드 환경에서는 가상 머신당 단일 애플리케이션을 사용하는 것이 더 바람직하고 일반적입니다.최신 프레임워크는 클라우드 호환성을 원하기 때문에 임베디드 서버로의 이행이 요구되고 있습니다.


서블릿 컨테이너를 폐기하는 주된 이유는 클라우드 서비스라고 생각합니다.서블릿 컨테이너를 통해 애플리케이션을 관리할 수 있는 것과 마찬가지로 클라우드 서비스를 통해 가상 머신, 인스턴스, 데이터 스토리지 등을 관리할 수 있습니다.더 복잡하게 들리지만 클라우드 환경에서는 단일 앱 머신으로 전환되었습니다.즉, 대부분의 경우 기계 전체를 애플리케이션처럼 취급할 수 있습니다.각 애플리케이션은 적절한 크기의 기계에서 실행됩니다.클라우드 인스턴스는 언제든지 팝업되거나 사라질 수 있으므로 확장에 매우 적합합니다.응용 프로그램에 더 많은 리소스가 필요한 경우 더 많은 인스턴스를 생성합니다.

한편 전용 서버는 일반적으로 강력하지만 크기가 일정하기 때문에 단일 머신에서 여러 애플리케이션을 실행하여 리소스 사용을 극대화할 수 있습니다.수십 개의 애플리케이션을 관리하는 것(각각의 구성, Web 서버, 루트, 접속 등)은 재미가 없습니다.따라서 서블릿 컨테이너를 사용하면 모든 것을 관리할 수 있고 온전한 상태로 유지할 수 있습니다.하지만 확장하기가 더 어렵습니다.클라우드의 서블릿 컨테이너는 그다지 유용하지 않은 것 같습니다.단일 애플리케이션만 관리하므로 큰 가치를 제공하지 않고 각 작은 인스턴스에 대해 설정해야 합니다.

또한 클라우드는 쿨하고 클라우드가 아닌 것은 지루합니다(아직도 과대광고를 믿고 있다면).많은 프레임워크는 기본적으로 확장성이 뛰어나기 때문에 클라우드에 쉽게 도입할 수 있습니다.임베디드 서버는 도입과 실행이 신속하기 때문에 합리적인 솔루션이라고 생각됩니다.서블릿 컨테이너는 일반적으로 계속 지원되지만 더 복잡한 설정이 필요합니다.

기타 포인트:

  • 임베디드 서버는 프레임워크에 맞게 최적화되거나 프레임워크 툴링(플레이 콘솔 등)과 더 잘 통합될 수 있습니다.
  • 모든 클라우드 환경에 맞춤 가능한 시스템 이미지가 포함되어 있는 것은 아닙니다.서블릿 컨테이너를 다운로드하고 설정하는 초기화 스크립트를 작성하는 대신 클라우드 애플리케이션 배포에 전용 소프트웨어를 사용하는 것이 훨씬 간편합니다.
  • 앱을 몇 번 다시 배포할 때마다 퍼머 gen space 오류가 발생하는 Tomcat 설정을 찾을 수 없습니다.스테이징 인스턴스와 실가동 인스턴스 간에 다운타임을 발생시키지 않고 거의 즉시 전환할 수 있는 경우에는 임베디드 서버의 기동(재기동)에 다소 시간이 걸리는 것은 문제가 되지 않습니다.
  • 질문에서 이미 언급했듯이 최종 사용자는 애플리케이션을 실행하는 것만으로 매우 편리합니다.
  • 임베디드 서버는 휴대성이 뛰어나 개발에도 편리합니다.오늘날에는 모든 것이 신속하며, 프로토타입과 MVP를 최대한 빨리 제작하여 제공해야 합니다.모든 개발자를 위한 환경을 구축하는 데 너무 많은 시간을 할애하고 싶은 사람은 없습니다.

언급URL : https://stackoverflow.com/questions/23478013/advice-deploying-war-files-vs-executable-jar-with-embedded-container

반응형