PromleeBlog
sitemap
aboutMe

posting thumbnail
Spring Boot 테스트 시 'Sharing is only supported for boot loader classes' 경고 해결하기
Solving 'Sharing is only supported for boot loader classes' Warning in Spring Boot Tests

📅

🚀

들어가기 전에 🔗

Spring Boot로 시작하는 TDD 시리즈를 진행하면서 테스트를 성공해도 콘솔 창에 항상 뜨는 빨간 문구가 있었습니다.
OpenJDK 64-Bit Server VM warning
OpenJDK 64-Bit Server VM warning
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
"어? 에러인가?" 하고 놀라셨을 수도 있습니다.
결론부터 말씀드리면 이것은
에러(Error)가 아니라 경고(Warning)
입니다.
기능에는 아무런 문제가 없지만, 빨간 글씨가 계속 보이는 것이 마음에 걸리는 분들을 위해 이번 번외편을 준비했습니다.
해결법만을 원하시는 분들은 여기를 눌러 바로 가실 수 있습니다.

🚀

경고가 발생하는 이유 🔗

이 경고를 이해하려면 자바 가상 머신(JVM)의
CDS(Class Data Sharing)
라는 기능을 알아야 합니다.

CDS란 무엇인가요? 🔗

자바가 프로그램을 시작할 때마다 수많은 클래스를 로딩하려면 시간이 걸립니다.
그래서 JVM은 자주 쓰는 클래스들의 정보를 미리 처리해서
공유 아카이브(Shared Archive)
라는 곳에 저장해 둡니다.
다음에 실행할 때는 이 아카이브만 보면 되니까 속도가 빨라지겠죠?

왜 경고가 뜰까요? 🔗

그런데 우리가
테스트
를 돌릴 때는 상황이 조금 다릅니다.
테스트를 돕기 위해 Mockito나 JaCoCo(테스트 커버리지 도구) 같은 친구들이 실행 과정에 개입합니다.
이 과정에서 자바의 기본적인 실행 경로(Bootstrap Classpath)에 무언가를 덧붙이게 됩니다.


JVM 입장에서 보면 이런 상황입니다.
"어? 내가 만들어둔 요약 노트(CDS)랑 지금 실행 환경이 다르네?
누군가 내용을 덧붙였어(Appended).
그럼 이 요약 노트는 못 쓰겠는데? 그냥 내가 직접 다시 읽을게."
그래서 "공유 기능(Sharing)을 지원할 수 없다"는 경고를 띄우는 것입니다.
즉,
"최적화 기능을 껐으니 참고하세요"
정도의 메시지입니다.

🚀

해결 방법 (경고 숨기기) 🔗

이 경고는 무시해도 상관없습니다.
하지만 빨간색 텍스트가 거슬린다면, JVM에게 "공유 기능(CDS)을 아예 쓰지 마"라고 설정을 주면 됩니다.
그러면 JVM이 애초에 시도조차 하지 않으니 경고도 사라집니다.

1. IntelliJ IDEA 설정 (일시적 해결) 🔗

IntelliJ에서 실행할 때만 적용하고 싶다면 다음과 같이 설정합니다.
  1. 상단 메뉴의
    Run > Edit Configurations...(구성 편집)
    를 클릭합니다.
  2. 왼쪽 목록에서 테스트 설정(JUnit)을 선택합니다.
  3. VM options
    칸에 -Xshare:off를 입력합니다.
    (만약 VM options 칸이 안 보이면 Modify options를 눌러 Add VM options를 켜주세요.)
Intellij 설정
Intellij 설정

2. build.gradle 설정 (영구적 해결) 🔗

프로젝트 전체에 적용해서, 나뿐만 아니라 팀원들도 경고를 안 보게 하려면 Gradle 설정을 수정해야 합니다.
build.gradle 파일의 test 태스크 부분에 설정을 추가합니다.
build.gradle
tasks.named('test') {
    useJUnitPlatform()
    
    // [추가] JVM에게 CDS 기능을 끄라고 지시합니다.
    jvmArgs '-Xshare:off'
}
이제 우측 상단의 코끼리 아이콘(Gradle Refresh)을 누르고 테스트를 다시 실행해 보세요.

🚀

결과 확인 🔗

설정을 적용한 후 다시 테스트를 실행해 봅니다.
오류 문구 사라짐 확인
오류 문구 사라짐 확인
OpenJDK 64-Bit Server VM warning 문구가 싹 사라지고, 깔끔한 테스트 결과만 나오는 것을 확인할 수 있습니다.

🚀

결론 🔗

오늘은 테스트 환경에서 자주 만나는 JVM 경고 메시지를 다루었습니다.
감사합니다.

참고 🔗