작성
·
174
답변 1
2
시스템에 기본으로 설치해둔 JDK와 환경변수 등은 자바 프로그램을 직접 실행하는 경우에 중요합니다. 실행 가능한 jar 애플리케이션을 클릭해서 실행하거나 커맨드라인 등에서 java ClassName으로 실행하거나, 아니면 IDE 같은 애플리케이션이 JDK/JRE가 미리 설치된 상태에서만 실행이 된다면 더더욱 그렇죠.
예전에는 최신 버전 자바 하나로 자바를 이용하는 애플리케이션도 돌리고, 프로젝트도 같은 버전으로 개발했지만 요즘은 프로젝트마다 다른 버전을 사용하기도 해서 프로젝트 레벨에 맞는 JDK를 따로 설치하고 이를 사용하게 만들어야 해서 상황이 복잡해졌습니다.
JDK 8, 11, 17, 21과 같은 LTS 버전을 다 설치하고, 프로젝트에서 어떤 걸 쓰냐에 따라서 해당 프로젝트를 실행할 때 선택한 JDK를 이용하게 하는 거죠. 이러려면 시스템의 "디폴트"로 설치해둔 JDK 버전과 JAVA_HOME 등을 무시하고, 새로운 JDK 링크 등을 이용해서 프로젝트를 실행할 때의 java 프로그램 위치와 라이브러리 위치 등을 매번 다르게 지정해야 합니다.
그런데 요즘 많이 쓰는 IDE는 이런 작업을 매우 편리하게 해주도록 JDK 관리와 프로젝트마다 선택을 하기가 편리합니다. 그래서 굳이 시스템 레벨에 JDK를 설치하지 않아도 될 것 같은데, 실제로는 필요합니다.
두 가지 이유 때문인데요. 하나는 IntelliJ를 포함해서 대부분 자바 프로젝트들이 사용하는 빌드 시스템인 Gradle은 원래 IntelliJ와 상관없이 밖에서 동작하는, 실행을 한다면 커맨드라인에서 직접 실행하는 방식으로 써야 합니다. IntelliJ에서 테스트나 애플리케이션을 실행하면 사실 뒤에서 Gradle이 따로 돌아가거든요.
프로젝트 셋업 수업에서 제가 설명했듯이 그래서 Gradle의 JDK 버전도 따로 설정을 해야 하는데, 요즘엔 프로젝트 버전을 따라가도록 만들어서 크게 신경을 쓰지 않기도 합니다.
하지만 여러가지 필요에 따라 터미널 모드로 들어가 혹은 커맨드라인에서 Gradle 명령을 실행해서 테스트나 애플리케이션 실행을 하기도 합니다. 이럴 때는 현재 시스템의 JDK를 이용하게 되어서 그때 JDK 버전을 맞춰줘야 합니다. 프로젝트를 17로 했는데, 터미널에 가니 11버전이 현재 설정으로 되어있으면 시스템의 path와 JAVA_HOME 등을 수정해주고 실행을 해야 합니다.
또, Gradle 외에도 스프링 부트 앱을 IDE 밖에서 실행한다거나 lint 같은 각종 외부 프로그램을 실행할 때도 시스템에 직접 설치한 JDK를 사용하게 됩니다. 그래서 이 버전을 잘 맞추고 변경하는 것을 할 수 있어야 됩니다. 안 그러면 버전이 안 맞아서 에러가 나기도 하죠.
제가 sdkman이라는 도구를 추천하는 이유는 이렇게 터미널에서 JDK 버전을 변경하는 작업을 아주 간단한 명령으로 손쉽게 하도록 도와주기 때문입니다. 또 새로운 JDK가 나왔을 때 이를 설치해두는 것도 도와주죠. 요즘은 같은 버전도 여러 JDK 배포판이 있어서 이를 변경해서 사용할 수도 있습니다.
더 궁금하신 게 있으면 또 질문을 남겨주세요.