오늘은 JS, Java, Python 개발을 한 신입 개발자 (that's me)가 Java 환경 설정을 하다가 문득 세 개의 환경 관리 방법을 한 번 정리해보면 좋겠다! 라고 생각이 들어 작성해 본다.
각각의 환경을 사용해본 결과 가장 큰 특징은 사용 범위였다.
PYTHON의 패키지 관리 도구인 Conda의 경우, 환경 관리를 커널 별로 실행한다. 즉, 한 터미널 세션에서 사용할 환경을 선택하면 pwd에 상관 없이 해당 가상환경에 설치한 라이브러리를 모두 사용할 수 있다. PYTHON 뿐만 아니라 R이나 C, C++ 등의 패키지도 관리가 가능하다.
JS의 패키지 관리 도구인 NPM의 경우에는 환경관리를 프로젝트 폴더 별로 진행한다. 물론 라이브러리를 전역적으로 사용할 수 있도록 설치하는 것도 가능하나, 각각의 프로젝트 별로 라이브러리를 node_modules라는 폴더 내에 설치한다. 추가적으로 nvm을 사용하면, node.js 버전까지 관리할 수 있어, 여러 프로젝트를 진행하게 된다면 선택적으로 해당 프로젝트에 맞는 node 버전을 선택하여 사용할 수 있다.
JAVA의 패키지 관리 도구인 Gradle의 경우에는 환경관리를 프로젝트 폴더 별로 진행한다. Java나 Kotlin, Android 프로젝트 빌드 및 의존성을 관리한다. 의존성들이 해당 프로젝트 루트 폴더 내에 설치되는 것은 아니나, Gradle 설정에 따라 필요한 의존성을 개별적으로 사용할 수 있도록 한다.
| 구분 | Python (Conda) | Javascript (npm) | Java (Gradle, Maven) |
|---|---|---|---|
| 환경 관리 단위 | 터미널 단위 (커널) | 프로젝트 폴더 단위 | 프로젝트 폴더 단위 |
| 설정방식 | conda create -n myenv로 환경 생성 후 사용 | 프로젝트 폴더에서 npm init 또는 설정 파일인 package.json으로 관리 | build.gradle로 관리 |
| 의존성 사용 방식 | Conda 환경에 설치된 패키지 전체 공유 | node_modules에 프로젝트 별 패키지 설치 | 실제 의존성 설치 위치는 프로젝트 폴더 내는 아니지만, Gradle이 개별 프로젝트 별로 이를 관리 |