Java 프로젝트의 Vagrant: VM에서 컴파일할 것인가, 아니면 호스트에서 컴파일할 것인가?
질문은 다음과 같습니다.Java 프로젝트(또는 컴파일된 언어 프로젝트)에 Vagrant를 사용하는 경우 VM 또는 호스트 중 어느 쪽에서 컴파일해야 합니까?또한 IDE와 모든 개발 툴을 VM 내부에서도 실행하시겠습니까, 아니면 호스트에서도 실행하시겠습니까?
Java IDE와 컴파일/도입 프로세스가 Vagrant VM에서 어떻게 동작하는지는 정확하게 정의되어 있지 않은 것 같습니다.일반적으로 코드는 호스트에서 편집되고 VM에서 실행되므로 컴파일되지 않은 언어에 적합합니다.Stackoverflow에 대한 다른 답변에서는 추가 컴파일 단계 때문에 Vagrant가 컴파일된 언어에 덜 유용하다는 것을 시사하고 있지만, 저는 여전히 무엇을 할 수 있는지 알고 싶습니다.
내가 이미 생각해 둔 몇 가지 사항:
VM에서 컴파일하는 이유
- 호스트 상에서 컴파일 하는 경우, java는 설치하는 소프트웨어의 1개입니다.
- 호스트에서 컴파일하는 경우 호스트의 Java 버전을 VM의 Java 버전으로 수동으로 최신 상태로 유지해야 합니다.
- 호스트의 해당 Java 버전을 사용할 수 없을 수 있습니다(Mac의 경우 등).
VM에 IDE가 있는 이유
- 환경과 IDE 간의 긴밀한 통합으로 숏컷을 사용하여 애플리케이션 실행 가능
- 리모트 디버깅 없이 Java 애플리케이션용 디버거를 연결할 수 있습니다(1단계 실행/실행).
호스트에서 컴파일하는 이유
- 컴파일 시간 단축
- VM을 실가동 환경에 가능한 한 가깝게 유지하고 싶다
호스트에 IDE가 있는 이유
- 호스트에서 코드를 편집하고 VM에서 실행하는 부랑자 규약입니다.
- UI 퍼포먼스 향상(X 전송 및 VNC가 느림)
어떻게 생각하십니까? IDE를 VM 내부에서 실행할까요, 아니면 호스트에서 실행할까요?VM 내부에서 컴파일해야 합니까, 아니면 호스트에서 컴파일해야 합니까?
고민과 실험 끝에 Vagrant를 어디에 사용할지, Java 개발 워크플로우와 통합하는 방법을 결정했습니다.
JavaEE/도입된 애플리케이션의 경우 웹 서버 및 데이터베이스 서버의 구성은 Vagrant의 사용을 보증하기에 충분한 복잡성이 있습니다.2대의 서버와 그것들을 설정하는 방법이 무수히 많기 때문에, 설정이 다른 개발자에게서 동기화가 되지 않게 되어, 「my machine」신드롬이 생깁니다.이러한 종류의 소프트웨어에서는 호스트에서 코드를 편집 및 컴파일하여 운영 환경을 모방한 Vagrant VM에 배포하는 것이 가장 적합합니다.웹 서버의 배포 폴더는 호스트의 컴파일 대상에 심볼릭될 수도 있으므로 수동으로 다시 배포할 필요가 없습니다.따라서 Vagrant는 개발 라이프사이클의 중요한 부분이 될 수 있지만 호스트에서 코드/컴파일/도입하고 Java를 사용하여 VM에서 실행하는 사이클 시간은 PHP/Ruby/Node 등에서 볼 수 있는 호스트의 코드 및 VM에서 실행되는 사이클 시간보다 길어집니다.
스탠드아론 Java 어플리케이션(라이브러리 또는 데스크톱 어플리케이션 등)의 경우 스토리가 약간 바뀝니다.이 경우 Vagrant를 사용하지 않고 호스트 시스템에서 편집, 컴파일 및 실행하는 것이 가장 적합합니다.큰 Java IDE 중 하나(Eclipse, Netbeans, IntelliJ...)를 사용하고 있는 경우는, 이미 머신에 Java 가 인스톨 되어 있습니다.이 시점에서는 Vagrant를 사용하는 오버헤드에 비해 이점이 거의 없으며 개발 프로세스에 복잡성만 가중시킬 뿐입니다.이는 IDE를 사용하여 Java를 편집할 수 있게 되면 호스트에서 모든 것을 실행할 수 있기 때문입니다.한 가지 문제는 프로젝트에 필요한 Java 버전이 호스트에서 IDE를 실행하는 버전과 일치하지 않을 수 있다는 것입니다.일반적으로 (바람직하게) 이것은 그다지 문제가 되지 않습니다.이 글에서는 JDK6는 수명이 다 되어 있고 JDK8은 아직 출시되지 않았습니다(그것이 우리에게 남은 부분이라고 추측합니다).그러나 여러 버전을 실행해야 하는 경우 JAVA_를 설정할 수 있습니다.필요에 따라서, 호스트의 HOME을 클릭합니다.이로 인해 복잡성이 증가하기는 하지만, 다른 버전의 Java를 사용하는 프로젝트를 처리하는 것보다 Vagrant 실행 시간을 유지하는 것이 덜 복잡합니다.
흥미로운 질문은 컨테이너가 없는 웹 어플리케이션으로 무엇을 할 것인가이다.외부 웹 서버와 마찬가지로 VM 내에서 웹 서버(이 경우 애플리케이션 내부)를 실행해야 합니까?또는 독립 실행형 애플리케이션에 대해 실행한 것처럼 호스트에서 실행하시겠습니까?컨테이너가 없는 웹 애플리케이션의 경우 걱정할 외부 웹 서버는 없지만 데이터베이스는 남아 있을 수 있습니다.이 상황에서는 하이브리드 어프로치를 취할 수 있습니다.컨테이너 없는 웹 앱을 실행하는 것은 기본적으로 독립 실행형 애플리케이션을 실행하는 것과 같으므로 호스트 시스템에서 코드를 컴파일하여 실행하는 것이 효과적입니다.그러나 데이터베이스가 관련되어 있기 때문에 데이터베이스 서버를 자체 Vagrant VM에 배치하는 것이 타당할 정도로 복잡성과 구성이 여전히 충분합니다.
이를 통해 Vagrant에 관심이 있는 Java 개발자가 Vagrant를 사용하는 방법에 대한 컨텍스트를 얻을 수 있기를 바랍니다.
저는 작년에 이 주제에 관심이 있었습니다:)
저의 해결책은 플래그로 구성할 수 있는 부랑 머신을 갖는 것입니다.예를 들어 이 플래그 중 하나는 데스크톱 GUI를 사용하도록 설정합니다.이는 일부 개발자는 호스트 머신에서 코드를 작성하는 것을 선호하지만 다른 개발자는 데스크톱과 IDE가 포함된 훨씬 더 통합된 환경을 선호하기 때문입니다.
데스크톱 속도가 느려지려면 매우 유용한 vagrant 플러그인을 설치해야 합니다(예...vagrant에는 개발 환경을 크게 개선하는 플러그인이 있습니다.vagrant plugin install vagrant-vbguest 이 플러그인은 가상 상자 인터페이스를 사용하는 동안 사용할 수 있도록 모든 게스트에 가상 상자 게스트 추가를 설치합니다.그런 다음 GUI를 활성화하려면 다음과 같이 Vagrant 파일을 편집합니다.
config.vm.vm "virtual box" do | vb | vb.gui = true end
공유 폴더의 퍼포먼스를 고속화하기 위해 rsync: config.vm.sync_sync_folder ".git", "/home/vagrant/git", "rsync", rsync_exclude: ".git/"를 사용하는 것이 좋습니다.이 방법으로 소스 코드는 호스트에서 편집된 후 게스트와 rsync됩니다.
언급URL : https://stackoverflow.com/questions/17625421/vagrant-for-a-java-project-should-you-compile-in-the-vm-or-on-the-host
'programing' 카테고리의 다른 글
어레이에 개체를 추가하는 방법 (0) | 2023.01.12 |
---|---|
JavaScript 약속 - 거부 vs. throw (0) | 2023.01.12 |
Python: ValueError: 인덱스 1에서 지원되지 않는 형식 문자 ''(0x27) (0) | 2023.01.01 |
explicit_defaults_for_timestamp를 활성화하려면 어떻게 해야 합니까? (0) | 2023.01.01 |
INSER JOIN / LEFT JOIN 우선순위 및 그룹 강제 적용 (0) | 2023.01.01 |