Java Stack
[Spring] DB 관련 : Mybatis CustomTypeHandler
[Spring] DB 관련 : Mybatis CustomTypeHandler
2021.03.31jdbcType : nullable column에 null이 들어갈 때? MyBatis는 nullable 컬럼의 parameter로 null이 넘어왔을 때, jdbcType이 명시되어 있지 않으면 TypeException을 던진다. setNull로 해당 타입에 맞는 null값(VARCHAR인 경우 "")을 넣어줘야 하는데, 뭘 넣어줄지 모르니까 예외가 발생하는 것 The JDBC Type is required by JDBC for all nullable columns, if null is passed as a value. You can investigate this yourself by reading the JavaDocs for the PreparedStatement.setNull() method. [..
[Java] HmacUtils, Mac이 thread-safe하지 않다?
[Java] HmacUtils, Mac이 thread-safe하지 않다?
2021.03.17일반적으로 Hash, HMAC 만들 때는 아래 Util 클래스 사용한다. org.apache.commons.codec.digest.DigestUtils org.apache.commons.codec.digest.HmacUtils 그러나 HmacUtils은 thread-safe 하지 않다. 정확히는, HmacUtils는 thread-safe 하지만 그 안에서 사용되는 Mac이 thread-safe 하지 않다. https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/HmacUtils.html https://stackoverflow.com/questions/31898802/is-macdofinal-thread-..
[Spring] WebClient
[Spring] WebClient
2021.03.14왜 WebClient ?: RestTemplate은 deprecated 예정. docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html NOTE: As of 5.0 this class is in maintenance mode, with only minor requests for changes and bugs to be accepted going forward. Please, consider using the org.springframework.web.reactive.client.WebClient which has a more modern API and supports syn..
[Kotlin] java의 static final 변수에 대응되는 것은?
[Kotlin] java의 static final 변수에 대응되는 것은?
2021.02.11```kt class KakaoAuthHelper { companion object { const val REDIRECT_URI = "http://webpage-observer" val AUTHZ_CODE_URL = "https://kauth.kakao.com/oauth/authorize?client_id=${KakaoConfig.app_rest_api_key}&redirect_uri=${REDIRECT_URI}&response_type=code" } } ``` AUTHZ_CODE_URL은 변수가 들어가야 해서 const를 안붙였지만... Byte Code -> Java Decompile 해보면 ```java public static final String REDIRECT_URI = "http://web..
spring-webmvc 5.2.4 이하(springboot 2.2.5 이하) 버전에서 발생하는 응답지연 현상
spring-webmvc 5.2.4 이하(springboot 2.2.5 이하) 버전에서 발생하는 응답지연 현상
2021.01.14최근 알 수 없는 이유로 운영 서버에 응답 지연 현상이 발생했었는데요, 특정 request 수신 시 spring-webmvc 5.2.4 이하 버전에서 발생하는 것으로 밝혀졌습니다. -- 응답지연 현상 분석 결과, 재현 방안, 대응책 공유 상황 11/27 보안 스캐닝 진행 중 API-A 서버에서 응답지연 발생 보안스캐닝 중지 후에도 응답지연 지속됨 재시작 후 정상화 9/8에 발생했던 API-B 서버 응답지연과 양상이 비슷함 응답지연 발생 시점 PINPOINT log 보안스캐닝 패킷이 인입된 시간은 16:26 부근 응답지연이 발생하기 시작한 시간은 16:33 api-a 재시작 16:54 보안스캐닝 패킷 일부 재현 beta api-a 테스트 beta api-a 서버에 ngrinder로 부하 주면서 보안스캐닝으..
[Java] Collection 초기화
[Java] Collection 초기화
2020.11.02www.baeldung.com/java-init-list-one-line www.baeldung.com/java-initialize-hashmap www.baeldung.com/java-combine-multiple-collections ```java Arrays.asList(“a”, “b”, “c”); String[] strs = {"a", "b", "c"}; ``` 자바의 immutable? ```java private static final Thing[] PRIVATE_VALUES = { ... }; public static final List VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES)); ``` ```java retur..
[Java8] CompletableFuture
[Java8] CompletableFuture
2020.10.13runAsync(() -> { Thread.sleep(500); }, executor); CompleatbleFuture에 대해 https://medium.com/@chanhyeonglee/completable-future-가이드-part-1 https://medium.com/@chanhyeonglee/completable-future-가이드-part-2 https://medium.com/@chanhyeonglee/completable-future-가이드-part-3 thenCompose VS thenApply thenCompose VS thenApply thenCompose는 Future 다음에 또 다른 Future를 이어서 실행하게끔 연결할 때 사용 thenApply는 Future 결과를 받았을 때 ..
Java Servlet 이란
Java Servlet 이란
2020.06.15Servlet이 무엇인가? A servlet is a Java programming language class used to extend the capabilities of servers that host applications accessed by means of a request-response programming model. Although servlets can respond to any type of request, they are commonly used to extend the applications hosted by web servers. For such applications, Java Servlet technology defines HTTP-specific servlet classes..
[Java] Enum to Json / Enum to Object
[Java] Enum to Json / Enum to Object
2020.04.27EnumConstant 하나를 `` {fieldName:fieldValue}`` 형식으로 매핑하고 싶은 경우가 있다 ( 주로 뷰로 전달해야 할 때. ) 기본적으로 jackson의 ObjectMapper는 serialize/deserialize 할 때 Enum 코드만 내려주도록 되어 있다. 즉, ``java PaymentCode.CARD``를 변환하면 ``java "CARD"``가 된다. ``java {code=1, koName="카드", enName="card"}`` 형태로 내려주려면, 뭔가 해줘야 한다 방법 1 ) Jackson / ObjectMapper를 사용하고 싶은 경우 방법 1-1 ) @JsonFormat.Shape.OBJECT key:value 쌍을 내려주고 싶은 경우를 대비해 jackson은..
RestTemplate은 어떻게 response Object를 DataType <T>로 변환하는가
RestTemplate은 어떻게 response Object를 DataType <T>로 변환하는가
2020.03.27원래 그 데이터 타입으로는 캐스팅 가능 ```kt @Test fun `테스트`() { val obj: Object = Coffee("id", "name") as Object val coffee: Coffee = obj as Coffee // 이건 원래 그 데이터가 Coffee라서 가능 val obj2: Object = Object() val coffee2: Coffee = obj2 as Coffee // 이건 불가능. id 속성이랑 name 속성이 없으니까 당연 불가능하다 } ``` RestTemplate의 response Object -> T type casting 과정 RestTemplate도 내부적으로는 `` (T)`` 캐스팅을 이용하게 되는데 ``kt extractData()``에서 비검사 형변환..
[Kotlin] Serialization: Gson, Jackson
[Kotlin] Serialization: Gson, Jackson
2020.03.19[Java] Jackson ObjectMapper Serialization Jackson 역직렬화 시 발생할 수 있는 에러 ( jacksonObjectMapper() ) ```javastacktrace InvalidDefinitionException: Cannot construct instance of `com.test.example.data.Coffee` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator) ``` redis에서 받아와서 kotlin data 클래스인 Coffee에 넣으려고 하는데 발생 Jackson이 Deserializ..
[Spring] resources 경로 문제
[Spring] resources 경로 문제
2020.03.18*** Spring에 대한 내용과 Jar에 대한 내용이 섞여있어서... 적당히 분리해서 이해해야 함. resources 이하에 있는 파일들(.yml, .properties, 인증서 등)은 컴파일 타임에 CLASS_PATH로 이동하여 함께 포함되어 빌드된다. spring의 경우 target/classes에 위치. jar로 컴파일 하도록 했으면 .jar에 포함된다. 그래서 리소스를 ClassPath 사용해서 제대로 불러왔다면 `` build/resources``를 통째로 날려도 잘 실행 된다. yml 등은 알아서 jar 내에 있는 것을 사용한다. 다만 소스코드 내에서 ClassPath를 쓰지 않고 그냥 File에 접근하게 되면, 실제 파일시스템에 있는 해당 경로로 가서 해당 파일이 있는지를 찾는다. 이 때 ..