
👀 개요
업무에서 사용하던 IDE는 원래 이클립스였다.
내가 담당하는 서비스와 연관된 몇몇 서비스들이 먼저 고도화를 진행하면서, 일부는 VSCode로 넘어갔다.
이번에 내 담당 서비스도 고도화를 진행하게 되었고, IDE 역시 VSCode로 전환하게 되었다.
사실 나는 그동안 이클립스의 무거움과 잦은 오류 때문에 불편함을 많이 겪었는데,
특히 Git 연결 후 자꾸 실패하거나 거부되는 문제가 있었다.
참다못해 혼자 IntelliJ ultimate로 환경을 바꾸고, 가이드 문서까지 작성해 둔 상태였다.
혼자 구성하면서 가이드까지 정리하는 과정이 꽤 힘들었다.
그런데 고도화 작업을 담당하는 팀에서 기존 소스를 분석하기 위해 환경 구성이 필요했는데
내가 만든 문서는 인텔리제이 기준이었고 해당 팀에서는 인텔리제이 유료 버전을 사용할 수 없다고 하여 맞지 않았다.
그러다 “VSCode로는 안 되냐?”라는 요청이 있었고, 직접 VSCode로 환경을 구성해 보게 되었다.
🔖 개발 환경
| Language | Java 7 | JDK 1.7 |
| Framework | Spring Framework 4.2.5 |
| Build |
Maven 3.5.3 |
| OS | Windows(내부망|폐쇄망) |
| IDE | VSCode 1.91.1 |
| VSCode확장(Extension) List | Extension Pack for Java Language Support for Java(TM) Red Hat Maven for Java Tomcat for Java Native-ASCII-Converter Git Graph Better Align |
😬 오류 상황

빌드 과정에서 maven-surefire-plugin 실행 시 오류가 발생되었다.
로그를 분석하면서 이런 메시지가 보였는데 바로 복사한 뒤 검색을 시작했다.
Could not transfer artifact ... Received fatal alert: protocol version

이 내용은 maven-surefire-common-2.19.1.jar 파일을 maven 중앙 저장소에서 다운로드하지 못한 내용이었다.
검색을 해보니 이런 문제는 보통 보안 프로토콜(TLS) 관련 문제일 가능성이 높다고 한다.
회사 네트워크의 방화벽이나 프락시 설정이 Maven의 HTTPS 통신을 막고 있거나
JAVA/JVM에서 지원하는 TLS 버전이 다소 낮아 저장소 서버 측 요구사항과 맞지 않는 경우가 더 많다고 한다.
📋 원인 분석
- Java 7은 TLS 1.1, TLS 1.2를 지원한다. 기본적으로 활성화되지 않는 경우가 많다.
- 최신 Maven 저장소 서버는 TLS 1.0/1.1 연결을 거부하는 경우가 있다.
- 그러함으로 Java 7 환경에서는 protocol version 불일치 오류가 발생될 수 있다.
- 특히 Java 7의 일부 업데이트 버전(예 : 7u131 이상)부터 TLS 1.2가 기본적으로 활성화되기도 하지만
- 대부분의 구 버전 환경에서는 수동 설정이 필요하다.
📢 해결 방법 3가지
- Maven 명령어에 TLS 프로토콜 명시하기
mvn clean install -P goal이름 -Dhttps.protocols=TLSv1.2
간단하게 테스트할 때 유용하지만 빌드할 때마다 옵션을 붙여야 하는 번거로움이 있음
- . mvn/jvm.config 파일에 설정 추가하기
프로젝트 최상단. mvn폴더 내 jvm.config파일의 내용에 추가한다.
추가 후 저장, 그리고 VSCode 재부팅이 필요하다.
-Dhttps.protocols=TLSv1.2
다만. mvn 폴더가 없는 경우 직접 생성해야 하고, 팀원들도 동일하게 세팅해야 하는 번거로움이 있다.
- VSCode settings.json에 설정 추가하기(내가 선택한 방법)

VSCode에서 명령어 팔레트를 실행한다.(단축키 Ctrl + Shift + P)
settings.json 입력하여 User 기준의 settings.json 선택하여 파일을 오픈한다.
TLS 관련 속성을 추가한다.
"java.project.maven.userArguments" : "-Dhttps.protocols=TLSv1.2"
저장 후 VSCode를 재시작한다.
이 설정도 개인 설정이라 다른 팀원들이 동일하게 구성하려면 별도로 알려줘야 한다는 점이 있지만.
. mvn/jvm.config 설정하는 것보단 그래도 IDE 내부에 설정하는 거라 더 간편했다.
✅ 결과


세 번째 방법을 사용하여 정삭적으로 빌드를 완료했다.👍
VSCode에서도 스프링 레거시와 Maven조합 구성도 문제없이 되는 것을 확인하여 기분이 매우 좋았다.
내 포스팅이 도움이 되길 바라봅니다. 💕
❤ 김춘장이의 위키백과 - 나만의 공부 기록 Tistory ❤
gayulz - Overview
개발자가 되고싶은 개발어린이💟. gayulz has 11 repositories available. Follow their code on GitHub.
github.com