프로그래밍

[Spring Boot] Spring Boot의 버전을 낮추는 법

Retro Rat 2026. 4. 1. 00:56

1. 개요

IntelliJ로 Spring Boot 프로젝트를 생성하여 공부를 하던 중에 Spring boot의 버전을 최신 버전이 아닌 2.7.1로 낮춰서 사용하고 싶어졌다. 그래서 해당 버전을 낮추고 제대로 실행되기까지의 과정을 담았다.

 

2. 문제상황

프로젝트에 있는 pom.xml에서 있는 <version>을 4.0.5에서 2.7.1로 내렸다.

더보기
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.1</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

Spring Boot의 버전을 낮추고 Maven을 Reload하자 인텔리제이가 스프링부트를 인식하지 못하는 상황이 발생하게 되었다.

커피잔같은 아이콘이 되면 Spring boot로 인식되지 않는 상태다.

즉, IDE가 프로젝트를 Spring Boot 프로젝트로 인식하지 못하고, 일반 Java 프로젝트로 인식한 상태가 되었다.

 

3. 해결과정

pom.xml을 수정하며 의존성 설정을 하던 중 Maven 빌드가 실패하면서 IDE이 Spring Boot 프로젝트로 인식하지 못하는 문제라고 판단하고 해당 파일만 수정하고 다시 빌드하면 된다고 생각헀다. 

그래서 열심히 pom.xml을 찾아봤지만 문법적으로 잘못된 곳이 없다고 생각되어 문제를 찾지 못하고 있다가 "JDK문제인가?" 라는 생각이 떠올랐고 그 길로 찾아보니 Spring Boot의 모든 문서를 찾아보니 Spring Boot는 버전마다 지원하는 기간과 JDK버전이 완전히 달랐던 것이다.

https://spring.io/projects/spring-boot#support

내가 사용하려던 2.7.1 버전은 2.7.x에 해당하기 때문에 기업에 대한 지원은 아직 활성화되었지만 나같은 개인 개발자에겐 지원되지 않는 상태였다.

그래서 나는 이 글의 신빙성을 위해서 열심히 Spring Boot 공식문서를 찾아보며 과연 Spring Boot 2.7.1은 JDK을 어디까지 지원할까? 를 찾아보았고, 그 결과

https://docs.spring.io/spring-boot/docs/2.7.1/reference/htmlsingle/#getting-started.system-requirements

Spring에서 찾아냈고, Spring Boot 2.7.1은 Java 8 ~ 18까지 지원한다는 것을 알게되었다.

 

하지만 또다른 문제가 발생헀다. 그래도 이전보다는 찾기 쉬웠다.

https://docs.spring.io/spring-boot/appendix/dependency-versions/coordinates.html

바로 4.0.5때 작성한 pom.xml과 2.7.1 당시 사용하던 artifact 명이 다르단 점이다. 이것은 4. 해결방법에서 설명하겠다.

4. 해결방법

내가 사용하려는 2.7.1 버전이 Java 8~ 18만을 지원한다는 것을 알았으니 문제를 고치는 것은 한결 편해졌다.

파일 > 프로젝트 구조
해당하는 JDK 버전을 다운로드 받자
모듈 SDK도 동일한 버전으로 맞춰주자

더보기

2.7.1 버전에 맞는 pom.xml 코드

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.1</version>
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>myShop</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>myShop</name>
    <description>myShop</description>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <!-- Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- JPA -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!-- Thymeleaf -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!-- Devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- H2 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
            <optional>true</optional>
        </dependency>

        <!-- Test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.18.30</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

 

수정된 pom.xml을 저장하고 maven reload를 하면 아래와 같이 IDE가 Spring Boot를 인식해서 사용할 수 있게 된다.

최종적으로 돌아오게 된다.

 

5. 결론

더보기

Spring Boot 4.0.5 Vs 2.7.1 버전의 차이 

항목 상위 버전 하위 버전 비고
Spring Boot Version 4.0.5 2.7.1 프로젝트의 핵심 기반 버전
Java Version 17 11 컴파일  실행 자바 버전
Web Starter spring-boot-starter-webmvc spring-boot-starter-web 스프링 부트 표준 명칭 차이
MySQL Connector mysql-connector-j mysql-connector-java 최신 버전에서는 j 변경됨
Lombok Version 부모 POM에서 자동 관리 1.18.30 (명시적 기입) 하위 버전에서는 수동 지정하기도 
Test Starter 상세 세분화 (JPA, Web ) spring-boot-starter-test 하나로 통합된 테스트 라이브러리 사용

 

Spring Boot가 버전에 따라서 지원되는 JDK가 다르고 또 artifact의 표현방식이 다르다는 것이 신기했다.