일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- traceasynccustomautoconfiguration
- asyncconfigurer
- Spring JPA
- spring MVC
- jpa
- CompletableFuture
- aws secretmanager
- spring
- awssecretsmanagerpropertysources
- java lambda
- java list
- spring3 spring2 traceid
- SpringMVC
- Spring Boot
- asynccustomautoconfiguration
- micrometer tracing
- ResponseBody
- @FunctionalInterface
- list
- DeferredImportSelector
- Sleuth
- traceId
- map
- HashMap
- elasticsearch
- b3-propagation
- java.util.list
- EnableWebMvc
- kotlin
- java
- Today
- Total
목록자바 (22)
du.study기록공간
다른회사로 요청,응답을 기록하는 과정에, 필드의 로그값이 이중으로 찍혀있는 모습을 보고 내용을 정리해봅니다. 우선 발생된 상황을 정리해보면 다음과 같습니다. 1. request dto는 롬복의 @Getter와 @JsonProperty를 사용하고 있습니다. 2. 변수명중 두번째 글자가 대문자인 변수들이 있고, JsonProperty는 이 값을 다르게 사용하고 있습니다. 3. objectMapper.writeValusAsString() 를 활용하여 로그를 작성중에 있습니다. 이 경우, 의도했던 값과 다르게 유사한 변수명이 추가로 String에 노출되는 현상이 발생됩니다. lombok의 getter를 사용하면서 objectMapper.writeValusAsString()을 사용할때 발생될 수 있는 문제점을 ..
새로운 프로젝트를 실행하면서 로컬 캐시 라이브러리인 Ehcache 를 사용하는 일이 있었습니다. 기존에도 자주 사용하는 라이브러리 였기에 큰 걱정없이 사용했으나, 다음과 같은 에러가 갑자기 노출되기 시작했습니다. The JVM is preventing Ehcache from accessing the subgraph beneath 'transient java.util.HashMap$Node[] java.util.HashMap.table' - cache sizes may be underestimated as a result 음.. 우선 원인이 되는 프로젝트의 코드를 찾아봅니다. ehcache 내부의 ObjectGraphWalker 클래스에서 아래 코드에서 해당 에러를 뱉고있었습니다. 예시를 위해서 아래 테..
이번엔 java프로젝트에서 sentry environment 설정 코드를 한번 보려고합니다. 프로젝트를 진행하면서 sentry설정을 하는도중, local에서 계속 production으로(찾고나니 default설정이 production이네요) 작성이 되어있는 부분이 거슬려서 environment 설정은 어떻게 하는지 한번 확인해봤고 이를 기록하고자 합니다. 우선 결론부터 작성하면 저는 아래와 같이 적용하였습니다. - 리소스 아래에 sentry.properties 를 생성하여 아래 문구 적용 dsn= 본인의 sentry의 dsn를 사용합시다! environment=local servername=project이름 - java 실행의 변수를 담는곳에 -Dsentry.environment=${SPRING_PROF..
코드리뷰를 하던도중 간단하면서도 실수하기 좋은 부분을 기록하고 넘어가고자 합니다. Arrays.asList 나 Collections.singletonList 등을 이용하여 List를 생성하는 경우를 종종 보고있는데요 이번엔 Arrays.asList를 사용해서 add를 하는경우에 발생하는 에러를 기록하고 넘어가고자 합니다. 예시코드는 아래와 같습니다. List list = Arrays.asList("A","B"); list.add("C"); System.out.println(list); 이 경우 [A, B, C] 가 출력될거라 생각할 수 있지만, 결과는 아래 에러를 맞이하게 됩니다. java.lang.UnsupportedOperationException 왜 그럴까? 를 확인하기위해 Arrays.asList..
이번에 어쩌다 보니 completablefuture를 사용하면서 stream으로 병렬로 작업하게 되어 겸사겸사 기록합니다. (사실 쓰면서 굳이 써야했을까 싶으면서도 나쁘진 않은것 같습니다.) 작업자체는 db에서 데이터를 날짜 range를 조회한 후, 2차가공을 거쳐 join을 하는 코드였습니다. 이부분을 어떻게 할까 하다가 작업을 다음과 같이 나눴습니다. 1. 날짜 range를 list로 나눈다. 2. list를 completablefuture를 돌려 전체 작업을 마무리한다. 3. 각 마무리된 작업을 join하고 결과를 리턴한다. 해당 작업을 간단하게 조금 바꿔서 다른 코드로 작성해보았습니다. list - 특정 조건 class CompletableFuture - 작업목록 (시간 체크상 1초 딜레이도 줘봤..
이번에는 @FunctionalInterface 하나인 Function에 대해 기록하고자 합니다. Function을 간략하게 설명한다면 객체(T)를 받아 객체(R)을 리턴하는 함수형 인터페이스 입니다. 코드를 보면 아래와같은 기능을 가지고 있습니다. public interface Function { R apply(T t); default Function compose(Function
이직 후, 너무 게시글 작성이 뜸해져서 스스로 습관도 들일겸, 기존에 쓰던 내용도 정리할겸 이번엔 java lambda에 대해 하나씩 정리해보려합니다. 그중에서 이번엔 Consumer를 기록하고자합니다. Consumer는 리턴값이 void이며, 특정 타입을 받아 해당 값을 사용하는 것이 특입니다. @FunctionalInterface public interface Consumer { void accept(T t); default Consumer andThen(Consumer
나름 중복이 덜 발생하면서, 일렬번호를 만들되, 짧게 만들 수 있는 방법이 어떤것이 있을가 찾아보던 도중, millisecond를 Base64 String 으로 만들면 어떨까 하는 생각이 들어, 해당방식을 찾아 작성합니다. 우선 사용한 모듈은 다음과 같습니다. dependencies{ implementation("commons-codec:commons-codec:1.5") } 해당 모듈에서 Base64.encodeBase64URLSafeString 을 사용하기 위함입니다. 아래코드는 전체 플로우를 나타낸 코드입니다. public static byte[] longToByte(Long x){ ByteBuffer buffer = ByteBuffer.allocate(java.lang.Long.BYTES); bu..
현재 spring boot와 gradle을 이용하여 개발을 진행하고 있습니다.(언어는 kotlin) 보통은 백엔드만 개발을 진행하지만, 어드민 툴을 개발하면서 프론트 개발을 react로 같이 진행해야했고, 빌드시 자동으로 프론트코드가 빌드되어 jar안에 포함되길 원했습니다. build시 프론트코드와 함께 같이 실행하는것을 원했기에 gradle build시 npm빌드를 하기위하여 방법을 찾던도중 다음과 같은 방법으로 해결할 수 있었습니다. 제 프로젝트 구조는 다음과 같습니다. 다음은 gradle 파일입니다. import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import com.moowork.gradle.node.npm.NpmTask import org.jet..
이번에는 자바 8부터 비동기를 기능을 지원해주는 CompletableFuture에 대해 기록하려합니다. 이 글은 https://www.youtube.com/watch?v=PzxV-bmLSFY&t=8s토비좌 의 강의를 듣고 공부를 위해 작성하고 있습니다. 기존에 자바에서 비동기 작업을 진행한다 하면 별도의 쓰레드풀 생성, Future, FutureTask 을 통한 비동기처리 또는 ThreadPoolTaskExecutor등 다양한 방법이 있긴했습니다. 하지만 8에서 보다 간단하면서 비동기 작업의 결과를 만들어 낼 수 있는 CompletableFuture가 등장했습니다. 특징으로는 1. CompletionStage 을 implement하고있어 비동기 작업을 의존적으로 또다른 기능을 수행할 수 있게 해줍니다. ..