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

Spring 6

.use(@Nullable의 재발견)

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

.findout(Redis를 이용해 CyclicBarrier만들어보기)

고민 물리적/논리적으로 분리되어 있는 서버에서 특정 request가 몇번 들어올걸 체크하고 그 이후에 로직이 실행되었으면 좋겠다고 생각했다. 프로세스를 진행을 특정 request수가 총족될때까지 대기하는 시스템을 만들고 싶었다. 처음에는 이런건 메세징시스템에서 가능할거라 생각했지만 잘 아이디어가 안떠올랐고 지식이 없었다. 그래서 익숙한 redis를 사용해보기로 했다. 결론 자바에서는 스레드를 제어하는 방식이 여러개 있는데(CountDownLatch, CyclicBarrier, Phaser 등) 여기서 아이디어를 얻어서 Redis로 구현을 성공하였다. CyclicBarrier가 각 스레드에서 대기했다가 특정시점에 다시 시작되도록 하는 로직이어서 그렇게 구현했다. 접근방법 기본적으로 대기할 request 숫..

.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을 선언한 경우도 가능하..

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

반응형