본문 바로가기

Programing/Framework

(26)
[Jackson vs Gson] 오버라이딩한 메서드의 JSON serialize 테스트 기존에 JSON으로 만들던 객체에 메서드가 추가된다면 어떨까? 단순하게 생각하면 public 한 getter가 추가 되면 프로퍼티로 추가가 될 것 같다. 실험을 해보자. 테스트 DTO import lombok.Getter; import lombok.Setter; @Getter @Setter public class Apple { private String color; private int radius; } 1. Gson 및 Jackson 대조군 import com.fasterxml.jackson.databind.ObjectMapper import com.google.gson.Gson import spock.lang.Specification class AppleTest extends Specification..
[Spring] core - Converter 인터페이스 org.springframework.core.convert.converter 패키지에는 Converter라는 이름의 인터페이스가 있다. @FunctionalInterface public interface Converter { /** * Convert the source object of type {@code S} to target type {@code T}. * @param source the source object to convert, which must be an instance of {@code S} (never {@code null}) * @return the converted object, which must be an instance of {@code T} (potentially {@code..
[SpringBoot] HikariCP의 leakDetectionThreshold 기본값은? SpringBoot에서는 기본 커넥션 풀을 HikariCP을 쓴다. 가끔 long query가 있는지 가끔 누수가 검출되었다고 나온다. 그런데 좀 지나면 해당 커넥션이 회수되었다고 뒷북(?) 로그가 나온다. 회수가 되었으니 누수는 아닌데 에러 로그에 껴있어서 신경이 쓰인다. 스프링부트에는 spring.datasource.hikari.leak-detection-threshold 라는 프로퍼티가 있다. 실제 HikariCP에서는 leakDetectionThreshold 프로퍼티에 대응된다. com.zaxxer.hikari.HikariConfig 클래스에 보면 leakDetectionThreshold 필드가 있다. 기본값 디버깅 부트가 기본값으로 얼마를 넣어주는지 궁금해서 디버깅을 해보았다. org.sprin..
[SpringFramework] StopWatch (Spring vs Apache) 자바에서 두 점 사이의 시간을 재는 방법에는 currentTimeMillis 와 nanoTime가 있다.이 정적메서드에 대해서는 지난 주에 심층(?) 분석을 해보았다. [JVM] currentTimeMillis vs nanoTime 하지만 직접 날 것(raw)의 메서드로 사용할 대는 응집성이 떨어질 수 있으므로 스톱와치와 같은 실세상과 비슷한 유틸리티 클래스를 이용하면 좋을 것이다. 이 글은 스프링의 StopWatch에 대해 적으려고 하였지만 사실 Apache Commons Lang 유틸리티에도 StopWatch를 가지고 있었다.스프링의 StopWatchhttps://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/StopW..
[Spring Boot] spring-boot-devtools spring-boot-devtools 는 개발용 기능을 가지고 있다.live 혹은 production 환경에서 구동을 안하는 것을 권장하고 있다. Maven의 경우 optional을 true로 하면 된다. 하지만 Gradle은 optional이 없다.이전에 설정을 보니 아래와 같이 되어 있었다.runtime "org.springframework.boot:spring-boot-devtools" 하지만 제대로 동작을 하지 않는 것 같았고,찾아보니 해당 이슈에 대한 Github에 이슈가 있었다.Devtools documentation incorrectly uses compileOnly Gradle scope #14451 현재는 레퍼런스 문서도 수정되어 있다.https://docs.spring.io/spring..
[Spring Framework] Java와 Groovy 문법 삽질기 오늘의 삽질1. Java: 익명 서브클래스의 문법 주의사항2. Spock: Groovy의 프로퍼티 접근자 주의사항 아래와 같은 코드가 있다.public abstract class RestTemplateBase { @Autowired PoolingHttpClientConnectionManager connectionManager; protected RestTemplate getRestTemplate(int timeout) { 레거시코드인데 상속을 받는 구조로 되어 있었다. 상속을 받은 클래스에서 커스텀 RestTemplate를 반환하는 메서드를 사용하고 있었다.(나중에 생성자 주입으로 바꿀 예정이지만) 테스트 코드가 없어서 다음과 같은 테스트 코드를 만들었다. (테스트 코드가 구현이 완료된 것이 아니므로 주..
[Spock] Internal of spock (Specification) Spock에서 테스트 코드를 구현하기 위해서는 Specification을 직접 혹은 간접적으로 상속받아 구현한다.class MyFirstSpecification extends Specification { 이 spock.lang.Specification는 MockingApi를 상속받는 추상메서드이다.public abstract class Specification extends MockingApi이 Specification 추상클래스는 Groovy의 with와 유사한 기능을 하는 with 구문을 포함해서 예외에 대한 동작 등을 가지고 있다. (버전 1.2 기준) 이 Specification은 MockingApi를 상속받고 있고, MockingApi는 SpecInternals를 상속받는다.SpecInterna..
[SpringBoot] Exception Handler에서 ResponseStatus에 reason를 적으면... 삽질 할 뻔한 예외 처리기... Exception Handler에서 ResponseStatus에 reason를 적으면 return 한 형태의 객체로 반환이 안되고 임의의 형태로 반환된다.@RestControllerAdvice public class ApiExceptionHandler { @ExceptionHandler(NotFoundJobException.class) @ResponseStatus(value = HttpStatus.NOT_FOUND, reason="No Job Found") public AcAuthResult notCompletedJobExceptionHandler(NotFoundJobException ex) { return AcAuthResult.builder() .jobId(ex.get..