Error log

Spring Boot JWT 라이브러리 IDE 인식 문제(2025.11.01)

sowon02 2025. 11. 1. 22:00

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()
}