Java 프로젝트 용 Vagrant : VM에서 컴파일해야합니까 아니면 호스트에서 컴파일해야합니까?


92

여기에 질문이 있습니다. 자바 프로젝트 (또는 그 문제에 대해 컴파일 된 언어 프로젝트)에 Vagrant를 사용할 때 VM 또는 호스트에서 컴파일해야합니까? 또한 IDE와 모든 개발 도구가 VM 내부에서 실행되기를 원하십니까, 아니면 호스트에서 실행되기를 원하십니까?

Java IDE 및 컴파일 / 배포 프로세스가 Vagrant VM에서 작동하는 방식이 정확히 정의되지 않은 것 같습니다 . 일반적으로 내 인상은 코드가 호스트에서 편집되고 VM에서 실행되므로 컴파일되지 않은 언어에 적합합니다. Stackoverflow에 대한 다른 답변 은 추가 컴파일 단계로 인해 Vagrant가 컴파일 된 언어에 덜 유용하다는 것을 암시했지만 여전히 무엇을 할 수 있는지보고 싶습니다.

이미 생각해 본 몇 가지 :

VM에서 컴파일하는 이유

  • 호스트에서 컴파일하는 경우 java는 설치할 소프트웨어 중 하나입니다.
  • 호스트에서 컴파일하는 경우 호스트의 Java 버전을 VM의 최신 버전으로 수동으로 유지해야합니다.
  • 호스트의 해당 Java 버전을 사용하지 못할 수 있습니다 (예 : Mac).

VM에 IDE가있는 이유

  • 환경과 IDE 간의 긴밀한 통합, 바로 가기를 사용하여 애플리케이션 실행 가능
  • 원격 디버깅없이 자바 애플리케이션 용 디버거를 연결할 수 있습니다 (1 단계 실행 / 디버그).

호스트에서 컴파일하는 이유

  • 더 빠른 컴파일 시간
  • VM을 프로덕션에 최대한 가깝게 유지하려는 경우

호스트에 IDE가있는 이유

  • 호스트에서 코드를 편집하고 VM에서 실행하는 것은 방랑 규칙입니다.
  • UI 성능 향상 (X 전달 및 VNC가 느림)

어떻게 생각하십니까? VM 또는 호스트 내부에서 IDE를 실행해야합니까? VM 또는 호스트 내부에서 컴파일해야합니까?

답변:


61

많은 생각과 실험 끝에 Vagrant를 사용할 위치와 Java 개발 워크 플로와 통합하는 방법을 결정했습니다.

JavaEE / 배포 된 애플리케이션의 경우 웹 서버와 데이터베이스 서버를 구성하는 것은 Vagrant의 사용을 보증하기에 "충분한"복잡성을 가진 것입니다. 두 대의 서버와 다양한 구성 방법을 사용하면 구성이 한 개발자에서 다른 개발자로 쉽게 동기화되지 않아 "내 컴퓨터에서 작동"현상이 발생합니다. 이러한 종류의 소프트웨어의 경우 호스트에서 코드를 편집 및 컴파일하고 프로덕션 환경을 모방하는 Vagrant VM에 배포하는 것이 가장 좋습니다. 웹 서버의 배포 폴더는 호스트의 컴파일 대상에 심볼릭 링크되어 수동으로 재배포 할 필요가 없습니다. 따라서 Vagrant는 개발 라이프 사이클의 중요한 부분이 될 수 있습니다.

독립형 Java 애플리케이션 (라이브러리 또는 데스크톱 애플리케이션과 같은)의 경우 이야기가 약간 변경됩니다. 이 경우 Vagrant를 사용하지 않고 호스트 시스템에서 편집, 컴파일 및 실행하는 것이 가장 합리적입니다. 큰 Java IDE (Eclipse, Netbeans, IntelliJ ...) 중 하나를 사용하는 경우 시스템에 Java가 이미 설치되어 있습니다. 이 시점에서 Vagrant를 사용하는 오버 헤드에 비해 이점이 거의 없으며 개발 프로세스에 복잡성을 추가하는 역할 만합니다. IDE로 Java를 편집 할 수있을 때 쯤이면 호스트에서 모든 것을 실행할 수 있기 때문입니다. 한 가지 문제는 프로젝트에 필요한 Java 버전이 호스트에서 IDE를 실행하는 버전과 일치하지 않을 수 있다는 것입니다. 일반적으로 (희망적으로) 이것은 그다지 문제가되지 않습니다. 이 글을 쓰는 시점에서 JDK6는 수명이 다했으며 JDK8은 아직 출시되지 않았습니다 (어디에서 나올지 추측). 그러나 여러 버전을 실행해야하는 경우 필요에 따라 호스트에서 JAVA_HOME을 설정할 수 있어야합니다. 이로 인해 추가 복잡성이 발생하지만 다른 버전의 Java를 사용하는 프로젝트로 작업하는 것만으로 Vagrant 런타임을 유지 관리하는 것보다 덜 복잡합니다.

흥미로운 질문은 컨테이너없는 웹 애플리케이션으로 무엇을해야 하는가입니다. 웹 서버 (이 경우 애플리케이션 내부)가 외부 웹 서버에서와 마찬가지로 VM 내부에서 실행되어야합니까? 아니면 독립형 애플리케이션에서했던 것처럼 호스트에서 실행 하시겠습니까? 컨테이너가없는 웹 애플리케이션의 경우 걱정할 외부 웹 서버가 없지만 데이터베이스는 여전히 존재합니다. 이 상황에서 우리는 하이브리드 접근 방식을 취할 수 있습니다. 컨테이너없는 웹 앱을 실행하는 것은 기본적으로 독립형 애플리케이션을 실행하는 것과 동일하므로 호스트 컴퓨터에서 코드를 컴파일하고 실행하는 것이 효과적입니다. 그러나 데이터베이스가 관련되어 있으면 데이터베이스 서버가 자체 Vagrant VM에있는 것이 합리적 일 정도로 복잡하고 구성이 충분합니다.

바라건대 이것은 Vagrant에 관심이있는 Java 개발자에게 사용 방법에 대한 컨텍스트를 제공합니다.


Windows OS 호스트 및 Linux OS VM의 경우 Linux VM에서 IntelliJ를 실행하고 호스트 (Windows)에서 X11까지 실행하는 것에 대해 어떻게 생각하십니까?
Kevin Meredith

3
좋은 질문 : 언급하지 않았지만 Vagrant VM 내에서 IDE를 실행하여 많은 테스트를 수행 한 결과 성능이 끔찍 하다는 사실을 발견했습니다 . 메뉴를 클릭 할 때 응답하는 데 약 12 ​​초가 걸렸습니다. 더 빠른 암호를 지정하고, X11에 압축을 사용하고, VM 비디오 RAM을 늘려서 응답 시간을 4 초로 늘 렸지만 여전히 사용할 수 없었습니다. 그래서 제 생각은 Vagrant가 IDE를 실행하기위한 것이 아니라는 것입니다.
Jay

그래도 한번 시도 해봐야한다고 생각합니다. VirtualBox 2D 가속을 Windows 호스트 용으로 활성화하지 않았습니다 (Windows 호스트가 없었습니다). 내가 시도하지 못한 다른 성능 아이디어는 다음과 같습니다 .VMWare 제공 업체가 특별한 그래픽 최적화 기능을 가지고 있다는 소문이 돌고 있으며, X11보다 더 나은 성능을 제공 할 수있는 VRDP를 시도 할 수 있으며, NX 서버는 X11보다 빠르며, 마지막으로 향신료가 있습니다. space.org. 잘 작동하는 것을 찾으면 여기에 다시 게시 해주세요. 소식을 듣고 싶습니다.
Jay

2
게스트 VM 내부에서 IntelliJ를 테스트하지 않았으며 게스트에서 느려진 동료의 경험을 제공하지 않았을 수 있습니다. 그러나 나는 'Vagrant-Up and Running'에서 다음을 읽었습니다. Shared folders incur a heavy performance penalty within the virtual machine when there is heavy I/ O, so they should only be used for source files. Any compilation step, database files, and so on should be done outside the shared folder filesystem inside the guest filesystem itself.이 책의 진술 (Vagrant 작성자가 작성)은 호스트 VM에서의 컴파일에 반대하는 것 같습니다.
Kevin Meredith 2014 년

4
인용문은 "가상 머신 내에서 심각한 성능 저하"를 언급하고 호스트에 대한 글로벌 성능 저하를 언급하지 않으므로 여기서 컨텍스트 는 VM 내부의 성능 / 작업에 대한 것이라고 생각합니다 . 그 맥락에서 나는이 인용문이 게스트와 호스트에서 컴파일을 권장하는 것과는 반대로 게스트 내부에서 컴파일 단계를 수행 할 때 성능을 예측하는 것으로 해석합니다. 이 인용문의 맥락에 대해 더 자세히 말씀해 주시겠습니까? 책이이 시나리오를 구체적으로 다루고 있습니까? 물론이 모든 것은 실제 테스트
Jay

3

작년에이 주제에 관심이있었습니다. :)

내 해결책은 플래그로 구성 가능한 방랑자 기계를 갖는 것입니다. 예를 들어, 일부 개발자는 호스트 시스템에서 코딩하는 것을 선호하는 반면 다른 개발자는 데스크톱 및 IDE가 포함 된 훨씬 더 통합 된 환경을 선호하기 때문에이 플래그 중 하나는 데스크톱 GUI를 활성화합니다.

데스크톱 속도 저하에 대처하려면 다음과 같이 매우 유용한 방랑 플러그인 (예 ... 방랑에는 개발 환경을 크게 개선하는 플러그인이 있습니다)을 설치해야합니다. 방랑 플러그인 설치 vagrant-vbguest이 플러그인은 모든 게스트에 가상 박스 게스트 추가를 설치합니다. virtualbox 인터페이스를 사용하는 동안 사용할 수 있도록합니다. 그런 다음 GUI를 활성화하려면 다음과 같이 Vagrantfile을 편집하십시오.

config.vm.provider "virtualbox"do | vb | vb.gui = 진정한 끝

공유 폴더 성능을 높이기 위해 rsync를 사용하는 것이 좋습니다. config.vm.synced_folder "./git", "/ home / vagrant / git", type : "rsync", rsync__exclude : ".git /"여기에서 소스 코드가 호스트에서 편집 된 다음 게스트에 다시 동기화되는 방식입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.