강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

리나님의 프로필 이미지
리나

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 캐시 전략

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

해결된 질문

작성

·

52

·

수정됨

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 에러가 발생 되고 있습니다.

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

 

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

 

 

답변 2

1

리나님의 프로필 이미지
리나
질문자

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

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

 

인텔리제이 설정에서

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

Build and run using : Gradle

Run tests using : Gradle

 

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

 

쿠케님 감사합니다 :) 

0

쿠케님의 프로필 이미지
쿠케
지식공유자

리나님, 안녕하세요!

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

 

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)를 추가해보시면 될 것 같습니다!

 

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

리나님의 프로필 이미지
리나
질문자

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 에러가 발생되네요.ㅠ.ㅠ

 

쿠케님의 프로필 이미지
쿠케
지식공유자

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

쿠케님의 프로필 이미지
쿠케
지식공유자

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

Build and run using : Gradle

Run tests using : Gradle

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

쿠케님의 프로필 이미지
쿠케
지식공유자

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

리나님의 프로필 이미지
리나
질문자

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

 

Build and run using : Gradle

Run tests using : Gradle

 

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

 

정말 감사합니다.

쿠케님의 프로필 이미지
쿠케
지식공유자

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

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

리나님의 프로필 이미지
리나

작성한 질문수

질문하기