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에서...
CDC(Change Data Capture)를 사용하는 이유 DBMS의 Transaction log를 통해 변경데이터를 분석하기때문에 데이터 변경사항이 100% 보장됩니다. 쿼리를 통한 데이터 추출이 아니기때문에 DBMS에 부하가 적습니다. 쿼리를 통한 ‘폴링’방식의 데이터 추출시 최종 데이터 변경 내용만 조회 되기 때문에...
Spring batch를 사용하기위한 첫 단계 요청이 들어올때 마다 실시간으로 데이터를 처리 하는것이 아닌 일괄적으로 모아서 하는 작업을 배치 (Batch) 작업이라고 합니다. 이러한 특성때문에 배치작업은 일반적으로, ‘정해진 시간에 대량의 데이터를 일괄적으로 처리한다’는 특징을 갖습니다. Spring에서는 Spring...