Google 태그 관리자 아이콘
반응형

일반적인 로직적용 6

.use(moment()에서 java LocalDateTime으로 변환하기)

고민 client로 react를 사용하고 server로는 springboot를 사용하는 와중에 시간 데이터를 react에서 springboot로 넘기는데 문제가 있었다. react에서는 moment()로 시간을 나타내는데 이걸 자바의 LocalDateTime으로 그대로 넘기니 시간이 이상하게 변환되었다. 분명 react에서 debugger로 확인했을때 zoneId도 잘 표현되었고 java로 넘어온 것도 역시 zoneId가 맞기때문에 zone설정문제는 아니었다. 결론 moment()객체를 그대로 보내지 않고 moment().format("YYYY-MM-DDTHH:mm:sszz")과 같이 포맷변환해서 보내면 잘된다. 접근방법 startDate = moment() 이런식으로 데이터를 넣었고 이대로 axios를..

.use(@Nullable의 재발견)

고민 가끔 spring이나 여타 라이브러리코드를 보면 심심치 않게 @Nullable같은걸 쓴걸 본적이 있으나 거추장스러울뿐 왜 쓰는지 몰랐다. 이번에 개발을 하면서 여러개 복잡한 코딩을 하다보니 해당 리턴값이 null에 대한 두려움이 생겼는데 이걸 처리하다보니 코드가 null가드로 지저분해지는게 싫었다. 결론 @Nullable을 명시적으로 메소드상에 표시해줌으로써 해당 코드가 null이 넘어올 수 있는지 없는지를 구분하니 가독성도 커지고 보일러플레이트한 널가드도 코드를 더이상 안써도 되겠다는 생각이 들었다. 접근방법 @Nullable 리턴코드에 써놓아 해당 메소드를 호출하는 곳에서 null처리를 하도록 표시해준다. 반대로 @NotNull 코드를 이용해서 리턴 null을 안보낸다는 표현도 해줄 수 있다. ..

.use(awaitility를 사용하여 딜레이 테스트하기)

고민 cache만료를 확인하기 위해 일정시간을 지연하여 값을 확인하고자 하였다. 처음에는 Thread.sleep을 통해 간단하게 해보려고 했지만 의미상 연결을 주석으로 써야만하는 아쉬움이 남았다. 결론 결론적으로 awaitility라이브러리를 사용하였다. 지연테스트를 성공적으로 확인했다. 이번 기회에는 단순히 지연테스트만 해보았는데 다음기회에 비동기 테스트도 구현해보면 재밌겠다. 예전에 CountLatchDown으로 비동기테스트를 구현했었는데 그거랑 비교해보면 어떨지 기대된다. 접근방법 앞단에 3초 후에 만료되는 redis key인(어느 cache든 상관없음) testKey를 세팅해두었다. (- 참고로 spring-data-redis를 이용하여 redisTemplate을 사용하였다.) 그 다음에 바로 아..

.use(@DataRedisTest)

고민 @SpringBootTest를 통해 테스트 중이었다. 테스트할때 딱 redis관련된것만 가져와서 로딩시간을 단축시킬 수 있을까했다. 결론 SpringBoot에서 @DataRedisTest를 제공한다. 이걸 사용해서 테스트시간을 단축시킬 수 있었다. 보다보니 jpa도 이런식으로 진행할 수 있는데 다음에 해보면 좋겠다. 실습 https://github.com/isgodflying/spring-data-test.git 위에서 프로젝트를 clone받아서 실행해 볼 수 있다. 접근방법 spring data redis는 properties에서 redis의 host, port가 설정이 가능하다. 설정 후에 아래처럼 코드를 써서 테스트해 볼 수 있다. Redis전용 configuration을 선언한 경우도 가능하..

.use(jpa 조건절에서 and 속에서 or사용하기)

고민 jpa문법에서 Specification을 사용하는데 쿼리로 간단한 select문 표현이 어려웠다. 예로들면 다음과 같은 구문에서 저기 OR표현이 하고 싶었다. select * from logs where startDate #{now}) 결론 b.or(...)을 통해 해결하였다. 접근방법 #SQL select * from logs where startDate #{endDate}) #Specification .and(endDate == null ? null : (r, q, b) -> b.or(b.isNull(r.get(MyModel.END_DATE)), b.greaterThanOrEqualTo(r.get(MyModel.END_DATE), endDate)))참고 https://stackoverflow.c..

.use(@MockBean vs @Mock)

고민 spring-boot-starter-test에 보면 @MockBean이 제공되고 있다. 기존에 Mockito의 @Mock과 무엇이 다른지 어느걸 쓰는게 boot관점에서 더 정확할지 고민되었다. 결론 상황에 맞게 쓰면된다. Spring에서 제공하는 applicationContext와 연계가 필요하면 @MockBean 로직확인용 Mock이 필요하다면 @Mock + @InjectMock 따라서 대게는 @Mock을 사용하고(이때 MockitoJUnitRunner로 Runwith한다) Spring에서 제공되는 WebMvcTest와 함께 사용될때는 @MockBean을 사용하면 된다. 접근방법 Spring에서 제공되는 MockBean을 이용한 단순한 테스트 코드이다. someService를 MockBean으로 ..

반응형