강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của syh8088
syh8088

câu hỏi đã được viết

Học thiết kế hệ thống quy mô lớn qua thực hành với Spring Boot - Chiến lược Cache

http://localhost:8080/cache-strategy/{{cacheStrategy}}/items 호출 시 NPE 에러 문의

Đã giải quyết

Viết

·

108

·

Đã chỉnh sửa

1

 ------------------------------ 해결 방안-------------------------------

저와 비슷한 이슈가 있으신분은

 

이렇게 처리 부탁드립니다!

 

인텔리제이 설정에서

 

Preferences > Build, Execution, Deployment > Build Tools > Gradle에서

Build and run using : Gradle

Run tests using : Gradle

 

이렇게 수정 하고 다시 시도 부탁드립니다!!!

 

쿠케님 감사합니다 :) 

 

image.png

 

 

안녕하세요 우선 좋은 강의 만들어주셔서 정말 감사드립니다.

GET - http://localhost:8080/cache-strategy/NONE/items/{{itemId}}

 

해당 API 를 호출 하게 되면

ItemController -> KukeCacheAspect -> KukeCacheKeyGenerator -> ItemNoneCacheService 

 

대충 이런 흐름으로 가게 되는데요.

KukeCacheKeyGenerator 객체에서

 

for (int i = 0; i<args.length; i++) {
  context.setVariable(parameterNames[i], args[i]);
}

 

parameterNames 객체에 NPE 에러가 발생 되고 있습니다.

코드는 강의 자료실 통해 제공해주신 코드로 실행 해보았습니다.

 

이 부분 어떻게 수정을 해야 할까요?

 

 

spring-bootredisbackend시스템-디자인cache

Câu trả lời 2

1

syh8088님의 프로필 이미지
syh8088
Người đặt câu hỏi

 ------------------------------ 해결 방안-------------------------------

저와 비슷한 이슈가 있으신분은 이렇게 처리 부탁드립니다!

 

인텔리제이 설정에서

Preferences > Build, Execution, Deployment > Build Tools > Gradle에서

Build and run using : Gradle

Run tests using : Gradle

 

이렇게 수정 하고 다시 시도 부탁드립니다!!!

 

쿠케님 감사합니다 :) 

0

kuke님의 프로필 이미지
kuke
Người chia sẻ kiến thức

리나님, 안녕하세요!

이번에도 잘 수강해 주셔서 감사합니다.

 

CGLIB이 아닌 JDK Proxy(인터페이스의 파라미터 정보를 보존하지 못함)가 동작하는 것으로 보이고, 로컬 IDE 컴파일 환경에서 차이가 있는건지 싶군요..!

 

KukeCacheKeyGenerator.genKey 메소드에서 아래 출력 결과 공유해주실 수 있을까요?

System.out.println(joinPoint.getThis().getClass());

 

 해결 방법으로는,

인텔리제이 Settings > Build, Execution, Deployment > Compiler > Java Compiler 메뉴에서,

Javac Options > Additional command line parameters에다가 +parameters를 추가해보시겠어요?

class 파일에 파라미터명을 보존하는 설정입니다.

 

위 방법이 안되면, build.gradle에 아래 설정을 추가해보시거나,

tasks.withType(JavaCompile) {
    options.compilerArgs += ["-parameters"]

}

 

KukeCacheApplication에 @EnableAspectJAutoProxy(proxyTargetClass = true)를 추가해보시면 될 것 같습니다!

 

혹시 세 가지 방법 모두 안된다면 다시 말씀 부탁드립니다!

syh8088님의 프로필 이미지
syh8088
Người đặt câu hỏi

image.png

말씀 해주신 부분

 

class kuke.cache.service.strategy.none.ItemNoneCacheService$$SpringCGLIB$$0

이렇게 찍혀져 나옵니다. CGLIB 프록시로 정상적으로 프록시 객체 생성 된 것이 아닌가요?

 

image.png

1.인텔리제이 Setting 에서 +parameters 추가

 

image.png

2.build.gradle 파일에 설정 추가

 

image.png

3.@EnableAspectJAutoProxy(proxyTargetClass = true) 추가

 

모두 해보았는데 동일한 NPE 에러가 발생되네요.ㅠ.ㅠ

 

kuke님의 프로필 이미지
kuke
Người chia sẻ kiến thức

앗 위 방법으로도 해결이 안되었군요.. 제공해드린 프로젝트 코드로 실행해도 동일하게 NPE가 발생하고 있는 상황인 것이죠?

kuke님의 프로필 이미지
kuke
Người chia sẻ kiến thức

Preferences > Build, Execution, Deployment > Build Tools > Gradle에서

Build and run using : Gradle

Run tests using : Gradle

혹시 이거 Gradle로 해보시겠어요?

kuke님의 프로필 이미지
kuke
Người chia sẻ kiến thức

그리고 위에 말씀드린 설정들은, build 디렉토리(class 컴파일 파일) 삭제하고 다시 실행해보시길 바랍니다!

syh8088님의 프로필 이미지
syh8088
Người đặt câu hỏi

안녕하세요 선생님! 네 해결 했습니다. 정확히

 

Build and run using : Gradle

Run tests using : Gradle

 

이렇게 설정시 왜 해결 되었는지 찾아봐야 겠지만 ㅠㅠ

 

정말 감사합니다.

kuke님의 프로필 이미지
kuke
Người chia sẻ kiến thức

저도 인텔리제이 자체의 빌드 방식까지 세세하게 파악하고 있진 않은 상황이지만..!

무튼 잘 해결되었다니 다행입니다!

Hình ảnh hồ sơ của syh8088
syh8088

câu hỏi đã được viết

Đặt câu hỏi