java 3

java subList memory leak

java 에서 list 의 일부분을 가져오고 싶을때 흔히 list.subList 를 많이 사용한다 기존 list 의 일부분을 잘라 새로 생성하는 메서드로 생각하고 크게 신경쓰지 않고 사용해왔다. 하지만 잘못 사용하면 메모리 누수의 위험이 있다. 많이 사용하는 ArrayList.subList 의 코드 구현부를 보자 public List subList(int fromIndex, int toIndex) { subListRangeCheck(fromIndex, toIndex, this.size); return new SubList(this, fromIndex, toIndex); } private static class SubList extends AbstractList implements RandomAccess ..

java 2023.02.20

Spring Webclient queryParam 특수문자 encoding 이슈

spring 5.2.6 버전 기준 webClient.get() .uri(uriBuilder -> uriBuilder .path("/search") .queryParam("keyword", query.getKeyword()) ... .build() ) 위와 같이 요청을 만들면 keyword 가 인코딩 되어 나가는걸 기대 했다. 한글이나 일부 특수문자들도 잘 되길래 크게 의심없이 넘어갔었다. 하지만 이런 방식으로 하면 1+1 이라는 키워드중 ‘+’ 가 인코딩 되지 않는 이슈가 있다. webClient.get() .uri(uriBuilder -> uriBuilder .path("/search") .queryParam("keyword", URLEncoder.encode(query.getKeyword()) .....

java 2022.12.20

java mapping library MapStruct

자바 프로그램 개발을 하면서 가장 많이 하는 일중 하나가 객체 변환인것 같다. database entity -> dto 변환, 도메인 레이어 별로의 dto 변환등의 작업이 많이 필요하다. 이는 필드 추가/제거시에도 양쪽 dto 변환, 레이어별로 변환 작업이 항상 필요하여 귀찮은 작업이 발생하고 실수가 발생할 여지가 많았다. 지금까지 위의 변환을 해왔던 방법으로는 1. 메소드 안에서 new 객체 생성을 통한 변환 2. 메소드 안에서 빌더패턴을 이용한 변환 3. private 메소드로 분리 4. 별도 converter 생성하고 static method 를 통한 변환 5. class 마다 변환 메소드 생성 등의 방법을 해왔던것 같다. 객체의 수가 적다면 위의 방법으로도 충분하지만, 프로젝트 진행시 도메인 레이..

java 2022.12.18