Spring Boot 프로젝트에 JWT 인증 기능을 구현하면서 'io.jsonwebtoken' 라이브러리를 사용했다. 코드를 작성했는데 Eclipse IDE에서 다음과 같은 에러가 발생했다 : " The import io.jsonwebtoken cannot be resolved"
특히 'JwtUtil.java' 파일에서
- import io.jsonwebtoken.Claims;
- import io.jsonwebtoken.Jwts;
- import io.jsonwebtoken.security.Keys;
이 모든 import 구문에서 빨간 줄이 나타났다....
환경 정보
- 프레임워크: Spring Boot 3.5.3
- IDE: Eclipse (Spring Tools 4)
- 빌드 도구: Gradle
- JWT 라이브러리: jjwt 0.12.3 (최신 버전)
초기 설정
// JWT (0.12.3 최신 안정 버전)
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.3'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.3'
문제 원인 분석
1차 시도: 의존성 설정 변경
처음에는 'runtimeOnly'가 문제라고 생각했었다. 'runtimeOnly'로 설정된 의존성은 런타임에만 포함되고 컴파일 타임에는 사용할 수 없기 때문이다.
시도한 해결책 :
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3' // runtimeOnly → implementation
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3' // runtimeOnly → implementation
결과: 컴파일은 성공했지만, 여전히 IDE에서 인식 X
2차 시도: IDE 캐시 문제 해결
IDE 인덱싱 문제일 수 있다고 판단하여:
- '.classpath', '.project' 파일 삭제
- Gradle 프로젝트 새로고침
- Eclipse 재시작
결과: 여전히 해결 X
최종 해결: 버전 다운그레이드
찾아보니 jjwt 0.12.x 버전이 너무 최신이라 IDE나 Spring Boot 3.5.3과 호환성 문제가 있을 수 있다는 것을 발견했다.
해결 방법:
1. 버전 다운그레이드: '0.12.3' → '0.11.5'
2. 모든 의존성을 'implementation'으로 변경
3. API 변경 사항에 맞게 코드 수정
최종 설정
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.3'
id 'io.spring.dependency-management' version '1.1.7'
id 'org.flywaydb.flyway' version '11.7.2' // DB 마이그레이션
}
group = 'com.mysite'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
repositories {
mavenCentral()
}
dependencies {
// Spring Boot 기본
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// PostgreSQL + Flyway
runtimeOnly 'org.postgresql:postgresql'
// Flyway 최신 버전 (PostgreSQL 18 지원)
implementation('org.flywaydb:flyway-core') {
version {
strictly '11.7.2'
}
}
implementation 'org.flywaydb:flyway-database-postgresql:11.7.2'
// Spring Security
implementation 'org.springframework.boot:spring-boot-starter-security'
// JWT (0.11.5 안정 버전 - IDE 인식을 위해 모두 implementation으로 설정)
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
// Swagger / OpenAPI 문서화
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0'
// Jackson은 Spring Boot가 자동으로 버전 관리
}
tasks.named('test') {
useJUnitPlatform()
}