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

전체 글 177

.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..

.findout(RedisTemplate에서 prefix key만들기)

고민 이미 RedisTemplate를 많이 쓰고 있는 와중에 특정 spring profile에서만 prefix를 붙이는 니즈가 생겼다. cacheManager에서는 prefix를 지원하지만 cacheManager를 사용하고 있는 상황도 아니었고 모든걸 찾아 바꾸기에는 다른작업자분들의 내용이 있어 쉽지 않았다. 결론 정식으로 지원되는 메소드는 찾을 수 없었다. redisTemplate의 keySerializer 메소드로 해결할 수 있엇다. 접근방법 RedisConfig에서 RedisTemplate를 정의할때, setKeySerializer를 커스텀하게 만들어준다. @Configuration public class RedisConfig { @Autowired private PrefixedStringKeySe..

.findout(react에서 spring으로 배열 파라미터 넘기기)

고민 react에서 배열로 사용하고 있는 파라미터를 그대로 넘기니 spring controller에서 받지 못하는 이슈가 있었다. 갑자기 파라미터이슈인데 이걸로 cors이슈 에러로 나기도 해서 혼란스러웠다.(분명히 모든걸 허용한 상태였기에 말이다.) 결론 react내에서 배열 파라미터를 string으로 변환해서 해결하였다. 접근방법 filterList를 그대로 넘기면 filterList[]와 같이 인식되어 내려가기때문에 ,가 포함된 string으로 변환해서 내려주면 편하게 해결할 수 있다. 아래처럼 filterList.join(",")로 넘겨주면된다. class TestComponent extends Component { constructor(props) { super(props); this.state ..

.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으로 ..

반응형