Spring Boot
배포

SDKMAN으로 JVM 생태계 버전 관리 완전 정복

중년개발자
중년개발자

@loxo

약 1개월 전

37

SDKMAN으로 JVM 생태계 버전 관리 완전 정복 (Debian 기준)

0. 왜 SDKMAN이 필요한가

Debian은 운영체제 안정성 면에서는 최강이지만, Java·Gradle·Maven 같은 JVM 생태계 도구의 버전은 매우 보수적이다.

  • Debian stable의 Java 버전은 오래됨
  • 프로젝트마다 요구하는 Java 버전이 다름
  • 서버·로컬·CI 환경의 Java 버전 불일치
  • apt 기반 Java 업그레이드는 롤백이 거의 불가능

이 문제를 해결하기 위한 사실상 표준 도구가 바로 SDKMAN이다.

SDKMAN은 JVM 생태계의 nvm이며
OS와 애플리케이션 런타임을 완전히 분리해준다.


1. SDKMAN이 관리하는 대상

SDKMAN은 JVM 위에서 동작하는 런타임과 도구를 관리한다.

분류예시
JavaOpenJDK, Temurin, Zulu, Oracle
Build ToolGradle, Maven, Ant
JVM 언어Kotlin, Scala, Groovy
Framework ToolSpring Boot CLI, Micronaut

apt install openjdk 비권장
⭕ SDKMAN으로만 Java 관리


2. SDKMAN 설치 (Debian)

2-1. 필수 패키지

bash
apt install -y curl zip unzip

2-2. SDKMAN 설치

bash
curl -s "https://get.sdkman.io" | bash

2-3. 환경 적용

bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

2-4. 설치 확인

bash
sdk version

3. Java 버전 관리 (핵심)

3-1. 설치 가능한 Java 목록 확인

bash
sdk list java

출력 예시:

tem 17.0.10 (LTS) zulu 21.0.1 (LTS) oracle 21.0.1

3-2. Java 설치

bash
sdk install java 17.0.10-tem sdk install java 21.0.1-zulu

✔ 여러 Java 버전 공존 가능


3-3. 현재 사용 중인 Java 확인

bash
sdk current java

3-4. 전역 기본 Java 변경

bash
sdk default java 17.0.10-tem
  • 모든 터미널에 적용
  • OS Java와 완전히 분리

3-5. 세션 단위 Java 변경

bash
sdk use java 21.0.1-zulu
  • 현재 터미널에서만 적용
  • 터미널 종료 시 자동 복구

4. 프로젝트별 Java 버전 고정 (가장 중요)

4-1. .sdkmanrc 생성

bash
cd 프로젝트_디렉토리 sdk env init

생성 파일:

ini
java=17.0.10-tem

4-2. 자동 적용 활성화

bash
sdk config
text
sdkman_auto_env=true

✔ 디렉토리 진입 시 자동으로 Java 전환
✔ 팀 협업, CI 환경에서 절대적인 안정성 제공


5. Gradle / Maven 버전 관리

5-1. Gradle

bash
sdk list gradle sdk install gradle 8.7 sdk default gradle 8.7

5-2. Maven

bash
sdk install maven 3.9.6

Gradle Wrapper와 병행 권장

  • Wrapper: 프로젝트 빌드 고정
  • SDKMAN: 로컬 개발 환경 고정

6. Kotlin / Scala 관리

bash
sdk install kotlin sdk install scala

프로젝트별 고정 예시:

ini
kotlin=1.9.23

7. 버전 제거 및 정리

bash
sdk uninstall java 11.0.22-tem
  • 다른 프로젝트에 영향 없음
  • 즉시 정리 가능

8. SDKMAN 내부 구조 (운영자 관점)

text
~/.sdkman/ ├── candidates/ │ └── java/ │ ├── 17.0.10-tem/ │ ├── 21.0.1-zulu/ │ └── current -> 17.0.10-tem

✔ 사용자 홈 디렉토리만 사용
✔ root 권한 불필요
✔ OS 안전성 100%


9. 서버에서 SDKMAN 사용 가능 여부

사용 가능 조건

  • 애플리케이션 런타임 관리 목적
  • 전용 서비스 계정(appuser) 사용

비권장

  • root 계정 SDKMAN 사용
  • OS 기본 Java 대체 목적

10. systemd 서비스와 연동 예시

ini
[Service] User=appuser Environment="SDKMAN_DIR=/home/appuser/.sdkman" ExecStart=/home/appuser/.sdkman/candidates/java/current/bin/java -jar app.jar

11. 운영 Best Practice 요약

  • OS: Debian stable
  • Java: SDKMAN
  • 프로젝트: .sdkmanrc
  • CI: SDKMAN + env
  • 롤백: Java 버전 전환으로 즉시 가능

12. 반드시 피해야 할 패턴

❌ apt로 Java 설치
❌ root 계정 SDKMAN 사용
.sdkmanrc 없이 프로젝트 진행

#SDKMAN#JVM#Java 버전 관리#Debian#SDK 관리 도구

댓글 0

Ctrl + Enter를 눌러 등록할 수 있습니다
※ AI 다듬기는 내용을 정제하는 보조 기능이며, 최종 내용은 사용자가 확인해야 합니다.