본문 바로가기

전체 글79

JVM Execution - 자바 코드가 기계어로 번역되기까지 이번 포스팅에서는 JVM이 어떤 식으로 자바 코드를 해석하고 실행하는지 생각하고 정리해보려고 합니다. JVM이 자바 코드를 해석/실행하는 데 이해하기 위한 3가지 개념이 존재합니다. Compilation Execution Just-In-Time Compilation (JIT) 이 3가지 개념에 대해서 알아보겠습니다. Compilation 사람이 작성한 자바 코드는 .java 라는 파일에 작성됩니다. 이 코드는 사람이 알아볼 수 있는 코드입니다. 이제 이 코드를 JVM이 이해할 수 있는 코드인 자바 바이트 코드로 변환할 수 있어야 합니다. javac라는 Java 컴파일러를 통해 .java 파일에 작성된 자바 코드를 JVM이 이해할 수 있는 자바 바이트 코드로 만들어서 .class라는 형식으로 저장합니다. .. 2023. 8. 27.
Java reflection API 이번 포스팅 주제는 reflection이 어떻게 스프링의 강력한 기능들을 지원할 수 있게 해주는지 알아보는 것입니다. 진행 동기 스프링이 지원해주는 편리한 기능들에 감탄하는 경우가 종종 있습니다. 그런데 구체적으로 이런 기능들이 어떻게 가능한 것인지 궁금해져서 ChatGpt나 구글링하면서 찾아보던중 reflection이라는 Java API의 존재에 대해 알게 되었습니다. Java Reflection Api 리플렉션이란 런타임 시 프로그램의 클래스, 메서드, 필드 및 기타 구성 요소를 검사하고 조작할 수 있는 기능입니다. 이 기능을 사용하게 되면 컴파일 시점에 정확한 타입이 결정되지 않아도 다양한 클래스 및 객체와 함께 동작할 수 있게 됩니다. 이렇게 되면 굉장히 유연하고 동적인 코드를 쉽게 작성하는 것이.. 2023. 8. 19.
Spring data Elasticsearch 사용 중 발생한 ApplicationContext 초기화 예외 문제 발견 콘솔 화면 핵심 예외 메시지 Invalid bean definition with name 'elasticsearchClient' defined in class path resource [com/example/demo/config/MyClientConfig.class] 예외 원인 해당 예외의 원인은 elasticsearchClient라는 빈이 유효하지 않은 정의이기 때문입니다. 문제 상황 이건 제가 ElasticsearchClient만 따로 사용하려고 빈 등록을 해둔 상태였습니다. 사실 여태 제가 Spring data Elasticsearch를 사용하는 것이 아닌 elasticsearch-rest-client만 의존성에 추가해서 사용하고 있는 줄 알았습니다… 그래서 빈 등록을 저렇게 해둔 거였는.. 2023. 8. 18.
HttpMessageConversionException 발생 원인과 해결책 알아보기 이번 포스팅에서는 개발 진행 중 만난 예외에 대해 원인과 해결책에 대해 정리해보려고 합니다. 예외 화면 원인 MetricAnomalyDto는 HttpConverter에 의해 직렬화/역직렬화되는 대상입니다. HttpConverter가 Json Java 객체로 변환은 Jackson 라이브러리를 사용하는데 Jakson이 객체를 역직렬화 하기 위해 reflection이라는 기술을 사용하 생성자를 검사하고 선택해 객체 인스턴스를 만드는데 일반적으로 선택되는 것이 기본 생성자 입니다! 해결책 lombok의 @NoArgsConstructor 애너테이션을 추가해 기본 생성자를 만들어 주었습니다. 기존의 생성자가 jackson이 reflection을 이용해서 역직렬화 하기에는 무리가 있는 생성자라 예외가 터진 것 같습니.. 2023. 8. 12.