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 위에서 동작하는 런타임과 도구를 관리한다.
| 분류 | 예시 |
|---|---|
| Java | OpenJDK, Temurin, Zulu, Oracle |
| Build Tool | Gradle, Maven, Ant |
| JVM 언어 | Kotlin, Scala, Groovy |
| Framework Tool | Spring Boot CLI, Micronaut |
❌ apt install openjdk 비권장
⭕ SDKMAN으로만 Java 관리
2. SDKMAN 설치 (Debian)
2-1. 필수 패키지
bash
apt install -y curl zip unzip2-2. SDKMAN 설치
bash
curl -s "https://get.sdkman.io" | bash2-3. 환경 적용
bash
source "$HOME/.sdkman/bin/sdkman-init.sh"2-4. 설치 확인
bash
sdk version3. 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 java3-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-tem4-2. 자동 적용 활성화
bash
sdk configtext
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.75-2. Maven
bash
sdk install maven 3.9.6Gradle Wrapper와 병행 권장
- Wrapper: 프로젝트 빌드 고정
- SDKMAN: 로컬 개발 환경 고정
6. Kotlin / Scala 관리
bash
sdk install kotlin
sdk install scala프로젝트별 고정 예시:
ini
kotlin=1.9.237. 버전 제거 및 정리
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.jar11. 운영 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 다듬기는 내용을 정제하는 보조 기능이며, 최종 내용은 사용자가 확인해야 합니다.