Dynamic proxy 이전 AOP Proxy 포스팅에서 Spring 에서 사용하는 Dynamic proxy와 CGLib를 이용한 proxy에 대해 말씀드리면서 다음과 같은 설명이 있었습니다. JDK dynamic proxy Reflection을 통해 동적으로 proxy 객체 생성 interface를 기준으로 proxy 생성 JDK Dynamic...
Spring scope 아시다시피, Spring bean의 life-cycle을 정의하는 Scope는 아래와 같습니다. singleton prototype request session application websocket 갑자기 왠 Scope 이야기를 하는지 의문이 드실수도 있는데, Spring batch를 사용할때 중요하게 알고 가야 할 내용이기 때문에 이번 포스팅에서...
Opensource contribute 오픈소스에 기여 하는 일은 거창하고, 어렵고, 해당 소스에 대해서 많은 이해도가 있어야만 시도 해 볼 수 있다 라고 생각하고 있었습니다. 사실, 오픈소스를 사용하면서 버그 같은것(?)을 발견한적도 있고 기능이 내가 생각한대로 동작하지 않을때, 오픈소스를...
테스트 분리의 필요성 각 팀의 테스트 룰에 맞추어 Unit test, Integration test를 작성하게 될 텐데 Integratio test의 경우에 당연히도 Unit test보다는 훨씬 느린 수행속도를 갖게 될 것 입니다. 사실 Integration test를 개발을 하는 과정중에 매번...
독립 통합테스트 환경 구축하기 통합 테스트를 하다보면, 외부 요인으로 인해 기대하던 데이터 혹은 메세지를 전달 받지 못해 테스트가 실패하는 경우가 빈번하게 발생 할 수 있습니다. 이전에 비슷한 내용으로 포스팅 한 적이 있습니다. (Spring H2를 이용한...
에러 메세지 Spring 에서 RestHighClient로 Elasticsearch 를 연결해서 사용중에 아래와 같은 오류가 발생했습니다. org.springframework.dao.DataAccessResourceFailureException: 30,000 milliseconds timeout on connection http-outgoing-0 [ACTIVE]; nested exception is java.lang.RuntimeException: 30,000 milliseconds timeout on connection http-outgoing-0 [ACTIVE] at ... 실행환경...
리팩터링 초기코드 이전 포스팅들을 통해 리팩터링의 5W1H를 알아보았습니다. 이제 최종적으로 Java 예제코드를 통해 리팩터링을 진행해 보겠습니다. 예제코드는 공연료 청구서를 출력하는 코드입니다. (해당 예제는 Refactoring 2판에서 제공하는 JS 예제를 Java로 구현한 코드입니다.) // Play.java @AllArgsConstructor @Getter...
Java class file Java 바이트 조작에대한 글을 쓰기 앞서서, 간략하게 Java 프로그램이 실행되는 과정에대해 짚고 가겠습니다. 아시다시피 Java는 JVM이라는 독립적인 환경에서 프로그램을 수행시기 때문에 OS에 대해 비교적 덜 의존적이라는 특성을 갖습니다. 이러한 이유로 인해 우리가...
(해당 포스팅은 Elasticsearch doc 내용을 발췌한 내용입니다. 원문보기) Filesystem 캐시를 위한 메모리 늘리기 hot index 영역을 메모리에 유지 할 수 있도록 합니다. 적어도 50% 이상의 메모리를 Filesystem 캐시에 할당 되도록 합니다. 빠른 장비 사용하기 I/O...
java array sort 자바의 Array와 Collection 등 다수의 데이터를 다루는 자료형에서는 대부분 간편하게 데이터를 정렬 할 수 있도록 sort기능을 제공하고 있습니다. 버블소트, 카운팅소트, 인서트소트, 퀵소트, 머지소트 등 많은 유명한 정렬 알고리즘들이 있는데요 자바에서는 과연 어떤...
java annotation processing annotation processing이란, 말 그대로 annotation을 이용해서 작업을 처리하는 방법으로서, java5부터 지원됬습니다. 사실 실무개발에서 직접적으로 annotation processing을 직접 구현하는일은 많지 않기때문에 관심도가 많이 떨어지는 기능입니다. 하지만 많이들 사용하시는 Lombok이 annotation processing을 통해 필요한...
Refactoring 개발을 하면 반드시 따라오는 Refactoring에 대해서 6하원칙 (5W1H)으로 정리를 해보고자 합니다. (해당 포스팅은 리팩터링 2판의 내용을 따르고 있습니다) 리팩터링이란 무엇이고 어떻게 하고 누가 해야하는가? (What, Why, Who) 리팩터링은 언제 어디에 해야하는가? (What, Why) 리팩터링은...
독립된 테스트 전용 DB 구성의 필요성 통합테스트 혹은 DB 데이터를 사용하는 테스트를 수행할때, 개발환경 전용 DB를 사용한다 하더라도 아래와 같은 문제가 발생 할 수 있습니다. 여러 개발자들이 테스트를 동시 수행하면서 의도치 않은 데이터 변경으로 인한...
TDD 테스트 코드, TDD를 적용하는것에 대해서는 이전에도 몇번 포스팅을 진행했습니다. (https://taes-k.github.io/2019/09/27/spring-junit-testing-strategy/) 사실 우리 모두 테스트 코드가 잘 짜여있으면 좋다는것을 알지만 실무에서는 적용하기 어렵다고들 이야기도 많이 하는데요, 이번 포스팅에서는 Spring 실무에서 TDD를 최대한 쉽고 빠르고 자연스럽게...
중첩 AOP 동일한 조인포인트에 여러개의 Advice가 지정된 경우, 여러개의 AOP가 같은 시점에 동작하게 됩니다. 특히나, Spring framework 에서 정의한 AOP가 사용 될 때 자연스럽게 중첩 AOP되는 경우가 많이 있는데, 어떤식으로 동작하는지 그림으로 알아보도록 하겠습니다. Spring에서...