본문 바로가기

Various Error

[IntelliJ / FeignClient] 의존성 추가 후 어노테이션 인식 불가

FeignClient를 사용하기 위해서 의존성을 추가하였으나, 어노테이션이 인식되지 않음

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    // OpenFeign 의존성 추가
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.mysql:mysql-connector-j'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

 

1. IntelliJ 캐시 삭제 시도 ⇒ 실패

 

2. ext 추가 실패

ext {
    set('springCloudVersion', "2023.0.3")
}

3. dependencyManagement 추가성공

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

 

 

Why?

1. ext의 역할

ext {
    set('springCloudVersion', "2023.0.3")
}
  • ext는 프로젝트에서 사용할 전역 변수를 정의할 때 사용
  • 여기서는 'springCloudVersion'을 선언하기 위해 사용
    springCloudVersion 이라는 변수에 2023.0.3 값을 셋팅 (?)
  • 프로젝트 내 어디서든 springCloudVersion 변수를 사용 가능
    →  특히 버전 정보처럼 여러 곳에 사용 되는 값들을 관리할 때 유용

 

2. dependencyManagement의 역할

의존성 버전을 중앙에서 일관되게 관리하기 위한 설정

Spring Cloud 프로젝트에서는 여러 모듈의 의존성을 관리하기 위해 BOM(Bill Of Materials) 방식을 사용

BOM 파일에는 Spring Cloud 관련 모듈들의 호환 가능한 버전 정보가 포함

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}
  • 위 설정은 spring-cloud-dependencies라는 BOM을 가져와 프로젝트에 적용
  • 이 BOM에는 OpenFeign, Eureka, Config Server 등 여러 Spring Cloud 모듈의 호환 가능한 버전 정의
  • Spring Cloud는 여러 모듈을 함께 사용하는 경우가 많은데 각 모듈의 버전을 개별적으로 관리하면 버전 충돌이 생길 가능성이 높음
  • 따라서, dependencyManagement를 통해 BOM을 가져오면 이러한 충돌을 방지하고 각 모듈 간의 호환성 보장
ext {
    set('springCloudVersion', "2023.0.3")
}

dependencies {
    // OpenFeign 의존성 추가
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    ...
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}