Java로 프로그래밍할 때 피해야 할 9가지 실수
Java로 프로그래밍할 때 어떤 실수를 피해야 할까요? 다음 글에서 이 질문에 대한 답을 찾아보세요.
한 대의 컴퓨터에서 많은 수의 환경을 처리할 수 있는 황금률은 없을까요? Java 전문가 Bartłomiej가 그 해답을 알고 있습니다!
일반적인 업무 환경을 살펴보겠습니다. 소프트웨어 하우스. 서로 다른 환경을 가진 고객이 몇 명 있습니다. 어떤 고객은 MySQL을 선호하고 어떤 고객은 Postgres를 선호합니다. 애플리케이션의 한 버전에는 다음이 필요합니다. Java 11, 다른 하나는 Java 17입니다. 프론트엔드에는 서로 다른 버전의 각도. 마지막으로 모든 DB, 백엔드 및 프론트엔드 버전의 조합을 포함하는 3차원 배열을 갖게 됩니다. 나쁘게 들리겠지만 어느 날 상사가 이렇게 말합니다...
위에서 설명한 상황은 드문 일이 아닙니다. 언어 또는 프레임워크 버전 간의 마이그레이션, 데이터베이스 업데이트 또는 단순히 고객의 다른 요구 사항으로 인해 모든 구성이 뒤집어질 수 있습니다. 이러한 변경 사항을 관리하는 데 도움이 되는 솔루션, 즉 몇 가지 가정 및/또는 요구 사항 및/또는 목표에 부합하는 솔루션이 있어야 합니다:
이 글에서는 세 가지 영역에 초점을 맞추겠습니다. 첫 번째는 Java 및 JVM용 도구입니다. 두 번째는 범용 도구입니다. 세 번째는 도커를 사용하여 목표를 달성하는 방법입니다.
귀하가 Java 개발자 또는 더 일반적으로는 JVM 기술을 클릭한 다음 SDKMAN!. 이 도구는 많은 라이브러리, 프레임워크 및 언어를 지원하는 매우 훌륭하고 사용하기 쉬운 도구입니다.
의 설치 프로세스 SDKMAN! 는 매우 간단합니다. 실행하면 됩니다:
curl -s "https://get.sdkman.io" | bash
를 클릭한 다음
소스 "$HOME/.sdkman/bin/sdkman-init.sh"
이제 Java, Scala 그리고 Maven 버전.
이 예에서는 몇 가지 도구의 버전을 설치하고 업데이트하겠습니다. 이는 사용 가능한 도구의 일부에 불과합니다.
새로운 프로젝트 사용 Java 17. . Java 버전이 설치되어 있는지 확인합니다. 이를 설치하고 빌드 속도를 높이기 위해 Maven 데몬 도구를 추가하려고 합니다. 따라서 Maven도 설치해야 합니다. 그러기 위해서는 간단한 명령 세 가지를 실행해야 합니다:
$ sdk 설치 자바 17-오픈
$ sdk 설치 maven 3.8.4
$ sdk 설치 mvnd 0.7.1
각 도구 설치가 끝나면 기본값으로 설정할지 묻는 메시지가 표시됩니다:
자바 17-open을 기본값으로 설정하시겠습니까? (예/아니요):
새 버전의 라이브러리 또는 언어를 설치할 때 이는 중요한데, SDKMAN! 은 현재 사용자의 모든 터미널에 대해 해당 기본 버전을 전역으로 설정하기 때문입니다.
때때로 SDKMAN! 은 인덱스를 업데이트해야 합니다. 이 과정에서 사용하는 도구의 새 버전이 있다는 메시지를 받을 수 있습니다. 사용 가능한 버전은 다음과 같이 입력하면 확인할 수 있습니다. sdk ls
. For SDK LS 메이븐
:
사용 가능한 Maven 버전
================================================================================
3.8.6 3.3.3
3.8.5 3.3.1
3.8.4 3.2.5
3.8.3 3.2.3
3.8.2 3.2.2
3.8.1 3.2.1
3.6.3 3.1.1
3.6.2 3.1.0
3.6.1 3.0.5
3.6.0 3.0.4
3.5.4
3.5.3
3.5.2
3.5.0
3.3.9
================================================================================
로컬 버전
현재 사용 중
================================================================================
위에서 보았듯이 Maven에는 우리가 사용하는 버전보다 최신 버전이 있습니다. 다음 항목도 마찬가지입니다. mvnd
(0.8.2) 및 Java(19-개방형). 이제 모든 것을 업데이트해 보겠습니다. 이를 위해 설치 명령을 호출하기만 하면 되지만 이번에는 버전 지정자를 사용하지 않습니다:
$ sdk 설치 maven
$ sdk 설치 mvnd
$ sdk 설치 자바
하지만 문제가 발생했습니다. Maven
그리고 mvnd
에는 올바른 버전이 있지만 Java 버전이 있습니다 17.0.5-tem
. 이는 도구의 "최신" 버전은 로컬 SDKMAN! 이 아닌 해당 공급업체가 관리하기 때문입니다. 이 공급업체는 누구인가요? SDKMAN! 의 공급업체는 버전을 게시할 수 있는 업체입니다. 하지만 최종적으로 19-개방
를 기본값으로 설정했지만, 어떤 이유로 인해 17-개방
.
다음과 같이 구성할 수 있습니다. 기본값
모든 프로젝트와 터미널에 글로벌한 버전의 도구를 사용할 수 있습니다. 하지만 특정 버전이 필요한 경우 두 가지 방법이 있습니다. 첫 번째는 SDK 사용
명령을 실행할 때마다 현재 터미널에서 특정 버전의 도구를 사용해야 합니다. 두 번째는 버전 목록을 .sdkmanrc
파일을 프로젝트와 함께 저장합니다.
첫 번째 옵션은 한 번만 사용하도록 설계된 반면, 두 번째 옵션은 팀과 함께 작업하고 팀 간에 구성을 공유하기 위해 설계되었습니다. 팀 멤버입니다.
는 사용하기 매우 쉽고 지원되는 도구, 프레임워크 및 언어의 풍부한 라이브러리를 갖추고 있습니다. Linux, MacOS 및 Windows에서 작동합니다. 반면에 이 도구는 JVM에 중점을 두고 있으며 벤더가 되려면 작성자의 승인이 필요합니다. 또한 .sdkmanrc
는 매우 열악하여 디렉터리 변경 프로세스가 상당히 느려질 수 있습니다.
많은 언어와 도구를 사용해야 하는 경우 다음을 살펴봐야 합니다. asdf. 이 도구는 "고급" 도구에 중점을 두고 있습니다. SDKMAN! 에서는 Bpipe 또는 Znai와 같은 많은 Java 전용 도구를 찾을 수 있지만, asdf는 훨씬 더 많은 도구를 제공하지만 그렇게 구체적이지는 않습니다. 물론 일부 도구는 겹치는 부분도 있습니다(예: Java, Tomcat 또는 mvnd는 둘 다에서 사용 가능).
사용하려는 경우 asdf
를 사용하려면 다음이 필요합니다. git
그리고 curl
를 설치합니다. 그 후에는 그냥:
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.2
에 다음 줄을 추가합니다. ~/.bashrc
file:
. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash
이제 원하는 버전으로 플러그인과 도구를 설치할 수 있습니다.
SDKMAN과 달리! asdf
는 플러그인을 사용하여 도구를 관리합니다. 따라서 도구를 설치하기 전에 플러그인을 설치해야 합니다. 예제 프로젝트로 돌아가서 다음을 사용하여 환경을 구성해 보겠습니다. asadfsdf
.
먼저 플러그인을 설치해야 합니다:
asdf 플러그인 자바 추가
asdf 플러그인 메이븐 추가
asdf 플러그인 mvnd 추가
그런 다음 도구를 설치할 수 있습니다:
asdf 설치 자바 openjdk-17
asdf 설치 메이븐 3.8.4
asdf 설치 mvnd 0.7.1
그리고 다시 한 번, SDKMAN과 달리! asdf
환경에서는 아무것도 변경되지 않습니다. 자바를 사용하려고 하면 다음과 같은 오류 메시지가 표시됩니다:
Java 명령에 설정된 버전이 없습니다.
구성 파일의 ~/.tool-versions에 다음 버전 중 하나를 추가하는 것이 좋습니다.
java openjdk-17
파일을 만들어야 합니다. .tool-버젼
를 홈 디렉토리에 추가하여 기본 버전을 관리하세요.
소프트웨어 버전 업데이트 asdf
는 매우 간단합니다. 새 버전을 설치하기만 하면 됩니다. 이 프로세스는 환경에 영향을 주지 않으므로 파일 시스템의 어느 위치에서든 언제든지 수행할 수 있습니다. 특정 소프트웨어의 특정 버전을 사용하려면 프로젝트 디렉토리에 다음과 같은 파일을 만들어야 합니다. .tool-버젼
파일을 팀원 간에 공유할 수 있습니다. 모든 팀원에게 다음이 있는지 확인해야 한다는 점을 기억하세요. asdf
를 클릭하고 플러그인을 설치합니다. 찾을 수 있는 플러그인 목록 여기.
asdf
는 프로그래밍 언어, 프레임워크, vim이나 kubernetess 같은 도구만 지원하는 것이 아닙니다. 데이터베이스도 지원합니다. 이러한 경우, 예를 들어 Postgres의 여러 버전을 설치할 수 있지만 하나의 인스턴스만 실행할 수 있습니다. 그 이유는 다음과 같습니다. asdf
는 분리 계층 없이 OS에서 직접 명령을 실행합니다. 이로 인해 '이미 사용 중인 포트' 및 리소스 충돌과 같은 문제가 발생할 수 있습니다.
asdf
는 다국어 환경에서 작업하고 싶다면 매우 좋은 도구입니다. 다양한 도구, 언어, 프레임워크를 지원합니다. 플러그인 기반 아키텍처를 사용하면 이를 매우 쉽게 확장할 수 있습니다. 하지만 라이브러리에 있는 일부 도구는 필요한 모든 종속성을 제공하기 위해 설치 중에 추가 작업이 필요합니다. asdf
Windows에서도 작동하지 않습니다. WSL.
위에서 포트 충돌에 대해 이야기하면 많은 분들이 해결책을 알고 계실 것입니다.
Docker 가 어떤 경우에는 도움이 될 수 있습니다. 이 도구는 너무 크고 복잡해서 한 글에서 다룰 수 없기 때문에 의무적으로 언급하는 것입니다.
도커와 함께 사용하면 도커-컴포즈 도구를 사용하여 멀티 컨테이너 환경을 조정할 수 있습니다.
Docker는 포트나 파일과 같은 특정 리소스가 필요한 도구를 관리하는 데 도움이 됩니다. 컨테이너에서 인스턴스를 분리하고 이를 완벽하게 제어할 수 있습니다. 그럼에도 불구하고 Docker는 작업 환경에 많은 복잡성을 가져오는 도구이며 경우에 따라 문제가 될 수 있습니다. 테스트에서 Docker를 사용한 사례 중 하나는 이전에 작성된 기사.
도구 버전 관리에 사용할 수 있는 모든 도구를 설명하지 못했다는 것을 알고 있습니다. 다음과 같이 더 많은 도구가 있습니다. jEnv 를 대체할 수 있습니다,
또는 NVM 를 관리하기 위해 사용할 수 있습니다. RVM 루비용. 저는 "전장에서 테스트"하고 누구에게나 추천할 수 있는 도구에 집중했습니다.