실제 기업에서 IntelliJ를 사용하는 경우가 아직은 많이 없을 것이라 생각한다.
그래서 Eclipse 기반의 STS4를 활용하는 방법을 익혀보려고 한다.

STS4STS3과 다르게 SpringBoot를 지원하고 있다.
STS3Spring Framework만을 지원하기 때문에, Boot를 사용할 수 없다.

기본 설치

나는 macos M1 환경에서 사용을 할 것이다.
따라서, https://spring.io/tools 홈페이지에서 macos arm_64를 설치해주었다.
기본적인 설치 과정은 아래의 블로그를 참고하였다.

남궁성 블로그

프로젝트 생성

가장 처음 STS4를 설치하고 구동을 하게 되면 아래와 같은 화면을 볼 수 있다.

스크린샷 2024-06-21 오후 3 12 29

뭔가 Eclipse와는 조금 다른 것 같은 화면을 볼 수 있다.
지금부터 SpringBoot 기본 프로젝트를 생성해보려고 한다.

스크린샷 2024-06-21 오후 3 13 48

프로젝트를 생성하기 위해 SpringBoot Starter 프로젝트 생성하기를 눌러보자.
위와 같이 프로젝트를 생성할 수 있는 창이 뜨게 되는데, Java version에 주목하자.
나는 JDK 17 보다는 현업에 더 많이 쓰이는 JDK 8, 11을 사용하려고 한다.
그러나 선택지에는 17까지 밖에 나오지 않는 상태이다.

선택지를 늘리기 위해, 우리는 JDK 11을 직접 설치해줄 것이다.

Java 환경 설정

보통 macos를 사용하는 경우엔 Homebrew를 통해 OpenJDK를 설치한다.
brew install --cask adoptopenjdk11과 같이 CLI 명령어를 통해 설치할 수 있다.
이 때, --cask라는 이상한 옵션이 보이는데 이게 무슨 의미일까?

cask vs formulae

Homebrew에서 설치할 수 있는 패키지에는 두 종류가 있다.
바로 CaskFormulae가 그 두 종류이다.
아래는 현재 내 Homebrew에 설치 되어있는 패키지들이다.

스크린샷 2024-06-21 오후 3 32 32

설치된 패키지의 목록만 봐서는 둘의 차이가 뭔지 알기 쉽지가 않다.
그래서 인터넷에 검색을 조금 해보니, 굉장히 단순한 차이였다.

  • Cask : GUI 형태로 마우스로 실행시킬 수 있는 형태의 서비스
  • Formulae : GUI 형태가 아닌, CLI 환경에서 명령어로 실행시킬 수 있는 서비스

실제 설치된 패키지의 예시를 들어보면, RedisMariaDB는 GUI가 존재하지 않는다.
하지만 Cask로 분류된 VSCode의 경우에는, GUI를 통해 조작하게 된다.

그럼 이제 본론으로 돌아가서 OpenJDK의 설치를 마저 진행해보도록 하자.
사실 OpenJDK가 왜 Cask로 분류되는지는 잘 모르겠다.
하지만 앞서 말한대로 brew install --cask adoptopenjdk11과 같이 설치를 해야 한다.
나는 과거 설치를 한 적이 있는지 기억은 안나지만 이미 설치가 되어있었다.

스크린샷 2024-06-21 오후 3 36 04

위의 명령어인 /usr/libexec/java_home -V를 입력하면, 설치된 JDK 버전을 확인할 수 있다.
기본적으로 최신 버전의 JDK를 자동으로 설정하기 때문에 지금은 17로 설정되어 있다.
그럼 이제부터 기본 설정을 OpenJDK 11로 바꾸어 보자.

Java 버전 변경

zshrc 파일을 변경함으로써 자바 버전을 변경해보도록 하자.
jEnv를 통해서 버전을 바꿀수도 있다고 하는데, 나는 기본적인 방법부터 익히려고 한다.

스크린샷 2024-06-21 오후 3 49 08

만약 bash를 사용한다면 bash_profile을 수정하면 된다.
하지만 나는 zsh를 사용하기 때문에, zshrc를 수정해서 자바 버전을 바꾸려고 한다.

나는 위와 같이 이미 내용을 변경해놓은 상태이다.
JAVA_HOME_11 환경 변수를 설정해놓고, export 명령어를 통해 적용시킨다.
이제 저장 후, source ~/.zshrc 명령어를 통해 변경 사항을 적용해주면 된다.

스크린샷 2024-06-21 오후 3 54 36

이후 확인해보면, 위와 같이 OpenJDK 11로 기본 버전이 변경되었음을 확인할 수 있다!
하지만, 프로젝트 생성 과정에서는 계속해서 22, 21, 17 버전만 잡히고 있었다.
혹시 STS의 자체 경로 문제인지를 확인하기 위해 재설치를 해보기로 했다.

STS 인식 문제

스크린샷 2024-06-21 오후 4 03 40

재설치를 했지만 계속해서 Java 17부터 밖에 인식을 하지 못하는 상황이다.
그래서 조금 검색을 해보니 JRE 설정을 통해 직접 잡아주어야 하는 것 같다.

스크린샷 2024-06-21 오후 4 11 37

JREJava Runtime Environment를 의미하며, 자바가 실행되는 환경을 의미한다.
따라서 내가 설치했던 OpenJDK 11을 기본 환경으로 설정하기 위해 위와 같이 적용한다.
하지만 위의 문구를 보면 Compiler의 지원 문제가 있는 것으로 확인된다.

스크린샷 2024-06-21 오후 4 12 55

따라서 위와 같이 CompilerCompliance Level11까지 내려주자.
하지만 이렇게 해도, 22, 21, 17만 잡히고 11 버전을 잡지 못하고 있었다.
계속해서 찾아보니 gradle 설정 또한 해주어야 한다는 얘기를 볼 수 있었다.
마지막으로 아래와 같이 gradle 설정까지 마무리 해주도록 하자.

Deprecated SpringBoot 2.X.X

정말 바보같이 기본적인 사항도 인지하지 못하고 프로젝트를 생성하고 있었다.
SpringBoot 2.X.X2023년 11월 이후로 더 이상 지원되지 않는다고 한다.
또한, SpringBoot 3.X.X는 반드시 JDK 17 이상을 사용해야 생성할 수 있다.

즉, 애초에 JDK 11을 사용하기 위해서는 Spring Legacy를 사용해야 하는 것!
결국 모든 설정을 다시 JDK 17에 맞추어 프로젝트를 생성했다.