상황 훑어보기
Kafka와 Redis를 연습하려고 start.spring.io에서 Spring Boot 4.1.1 프로젝트를 만들고, 실습까지 한 후 이틀 뒤에 프로젝트를 열었다.
그런데 프로젝트를 열자마자 클래스 파일이 빨간 줄 천지가 되었다.

이상한 점은 같은 IntelliJ에서 다른 프로젝트(Spring Boot 3.5.6)는 멀쩡했다는 것이다.
그래서 처음에는 "IntelliJ 캐시가 꼬였나? 싹 지우고 다시 깔아야 하나?"라고 생각했다.😭
결론부터 말하면 원인은 IntelliJ 버전이 Spring Boot 4.1 프로젝트를 제대로 처리하지 못한 것이었고, IntelliJ를 업데이트해서 해결했다.
오늘 글에서는 여기까지 오는 과정을 순서대로 정리해보려고 한다.
| 항목 | 내용 |
| 잘 되는 프로젝트 | Spring Boot 3.5.6 |
| 문제 프로젝트 | Spring Boot 4.1.1 (Kafka, Redis, JPA, WebMVC) |
| Gradle | 8.14.3 |
| IntelliJ | 2025.3.6.1 (업데이트 전) |
| OS | macOS |
해결 과정
1. 에러 메시지에 버전이 비어 있다
터미널에서 빌드해보니 이런 에러가 났다.
Could not find org.springframework.boot:spring-boot-starter-kafka:.
끝에 버전이 비어 있다는 건, 적용된 Spring Boot 버전 목록(BOM)에 이 스타터가 없다는 뜻이다.
./gradlew dependencyInsight --dependency spring-boot-starter-data-jpa --configuration compileClasspath
# → spring-boot-starter-data-jpa:3.5.6 (selected by rule)
build.gradle에는 4.1.1로 적었는데 실제로는 3.5.6이 적용되고 있었다.
spring-boot-starter-kafka, spring-boot-starter-webmvc는 Boot 4에서 새로 생긴 이름이라 3.5.6 목록에는 없다. 버전을 4.1.1로 맞추자 Gradle 쪽 에러는 사라졌다.
2. 빌드는 성공하는데 에디터만 빨간 줄
./gradlew clean compileJava
# → BUILD SUCCESSFUL
⭐️중요: 터미널 빌드가 성공하면 코드와 의존성은 정상이다. IntelliJ만의 문제로 범위가 좁혀진다.
3. IntelliJ 쪽에서 시도한 것 (모두 실패)
- Gradle Reload
- File > Invalidate Caches
- .idea, .gradle, build 폴더 삭제 후 build.gradle로 다시 열기
- IntelliJ 내부 캐시 삭제 (~/Library/Caches/JetBrains/IntelliJIdea<버전>/ 아래 프로젝트 이름 폴더)
💡 .idea를 지워도 IntelliJ는 위 경로에 프로젝트별 캐시를 따로 저장해둔다는 것도 이번에 알게 됐다.
4. 결정적인 실험: 새 프로젝트 만들어보기
IntelliJ에서 깨끗한 Spring Boot 4.1.1 프로젝트를 새로 만들고 Kafka import를 적어봤다.
새 프로젝트도 빨간 줄이었다.
- 새 프로젝트도 안 된다 → 기존 프로젝트의 설정이나 캐시 문제가 아니다
- Boot 3.x 프로젝트는 된다 → IntelliJ 전체가 망가진 것도 아니다
- 남은 결론 → 이 IntelliJ 버전이 Boot 4.1을 따라가지 못한다
5. IntelliJ 업데이트 → 해결
IntelliJ IDEA > Check for Updates...로 최신 버전으로 업데이트하고 Gradle Reload를 하니 빨간 줄이 전부 사라졌다. 🎉
(메이저 업데이트 시 기존 설정·플러그인을 가져올 수 있어서 다시 설정할 것은 거의 없다.)
왜 이런 일이 생겼을까
공식적으로 밝혀진 원인은 아니고, 상황을 바탕으로 한 추론이다.
Spring Boot 4는 자동 설정이 기술별 모듈로 쪼개지고 스타터 이름도 바뀐 큰 변화가 있었다. 프레임워크가 먼저 바뀌고 IDE가 뒤따라 지원하는 구조라서, 새 구조를 반영하지 못한 IDE 버전에서는 이런 일이 생길 수 있다.
- Gradle은 새 구조를 알고 있다 → 빌드 성공
- 구버전 IntelliJ는 에디터에 classpath를 제대로 붙이지 못한다 → 빨간 줄
- Boot 3.x는 익숙한 구조다 → 정상 동작
마무리
| 포인트 | 한 줄 정리 |
| 버전 없는 에러 | ...:.처럼 버전이 비어 있으면 적용된 Spring Boot 버전부터 확인 |
| 범위 좁히기 | 터미널 빌드가 성공하면 IDE 문제 |
| 대조 실험 | 새 프로젝트에서도 재현되면 프로젝트가 아니라 환경 문제 |
| 해결 | 새 메이저 버전 프레임워크를 쓸 땐 IDE도 최신으로 |
캐시를 이것저것 지우기 전에 "새 프로젝트에서도 그런가?"를 먼저 확인했다면 훨씬 빨리 끝났을 것 같다.
'개발공부 > SPRING' 카테고리의 다른 글
| Java Record를 사용하면 왜 getName()이 아니라 name()일까? (0) | 2026.07.12 |
|---|---|
| @NotNull, @NotEmpty, @NotBlank 차이점과 사용법 정리 (0) | 2026.07.11 |
| Spring의 @PathVariable, @RequestParam, @RequestHeader, @RequestBody는 무엇일까? (0) | 2026.06.30 |
| Lombok의 @RequiredArgsConstructor는 무엇이며 왜 사용할까? (0) | 2026.06.28 |
| setter 대신 Entity 메서드를 사용하는 이유 (0) | 2026.05.15 |