마지막 cs10 미션이다. JFrame은 어떻게 테스트하는게 좋을지 모르겠어서 구현만 집중적으로 했다. 프린트되는게 느려 jpg파일로 출력하여 확인하는 식으로 테스트하니 훨씬 빨랐다. 구현이 미흡한 부분이 많긴 한데, 크게 개의치 않기로 했다. 그것 보다는 스트림을 이용하여 집계를 해보는 것에 더 흥미가 생겼다. 예전에 봐둔 글을 떠올리며 통계내는 법을 찾아봤는데, Collectors에 다양한 기능이 있었다는 것을 다시 한 번 느껴보게 됐다. reduce도 활용해보고 싶었는데 효율적이지 않은 것 같아 map과 foreach만 사용했다. reduce로 바꾸고 속도를 재봐도 괜찮을 것 같다.
이번에도 NIO를 활용해봤는데 데이터가 커지니 버퍼 크기에 따라 속도차이가 크게 났다. 이걸 깜빡해서 찾느라 한 시간 정도를 보냈는데, 삽질의 연속이었다. 내일은 다른 IO 인터페이스들과 비교해봐도 괜찮을 것 같다.
데이터가 커지니 부동소수점 오차가 발생했다. 계산 방식이 무식해서 그런 것도 있지만, 이정도의 데이터를 소스로 다뤄본 것은 처음이라 당황했다. 다행히도 방법이 있었는데, BigDecimal 을 사용하여 해결했다. 예전에 비슷한 상황에서는 미리 숫자를 소숫점 위로 곱한 뒤에 되돌렸던 것 같은데 같은 원리인듯 하다. 정수 표현 최대 범위를 넘어갈 경우를 대비해서 int배열을 만들어둔 것 같은데, 시간나면 소스를 읽어봐야 겠다.
gradle로 npx를 실행시키기 위해 이것 저것 해봤는데 절반정도는 성공한 것 같다. 문제는 테스크를 동기적으로 묶는게 잘 안되는 것인데, 천천히 잡아가야 할 것 같다. 어쩌면 hooks를 생성시켜주는 모듈을 직접 만드는게 빠를지도 모르겠다...
컨트롤러 테스트 샘플을 작성했다. Mockito가 정보를 많이 보여주긴 하는데, 쓰임새가 다른 것 같다. Mockito는 서버 사이드 테스트고, RestTemplate은 클라이언트 사이드 테스트라고 한다. 차이점을 찾아봐야할 것 같다.