테스트 커버리지 100%랑 엮어서 가면 좋을 것 같음. 필드 다 테스트하는 노가다를 어떻게 처리할 것인가에 대해서.
제작기에는 테스트 커버리지 100% 내용을 넣고, 거기서 링크로 규식이 글을 참조시키자. 그러려면 규식이 글을 미리 써놔야겠지..
테스트 커버리지 100%
좋은 점
기능 수정시 사이드이펙이 없다는 확신을 가질 수 있음. 특히 라이브러리 버전 올릴 때 개꿀.
기능 수정시 실험을 하기가 편함. 이미 테스트코드가 다 있으니 살짝 수정해서 확인해보고 진행 가능.
오타나 누락과 같은 사소한 실수를 봉쇄할 수 있음.
한계
컨트롤러 쪽은 아무리 테스트를 잘 짜봤자 한계가 있음. HTTP 스펙과 자신이 쓰는 서버 어플리케이션의 HTTP 모듈을 완벽히 아는 게 아니라면 통합테스트 필수. ex) FormData에 배열 넣는 방법, Koa의 비동기 API 응답 방식, jackson이 지 멋대로 수정해버리는 필드들, ...
절대 커버할 수 없는 부분이 있는데(배포환경별로 분기되는 부분, 외부 라이브러리의 동작을 예측할 수 없을 때, stackTrace 등), 이 부분을 커버리지에서 제외해두면 맹점이 될 수 있음.
추상화
추상화의 목적: 확장에 유연한 구조를 가져가기 위함(OCP).
그렇다면 확장될 일이 없는 경우에는 추상화가 꼭 필요한가
ex1) 레이어 아키텍쳐에서 굳이 Service 인터페이스 만들고 ServiceImpl 하나씩 만들어 쓰는 경우. 절대 2개가 될 일이 없는데 굳이...?
ex2) 확장될 수도 있기는 하지만 현재 확장할 계획이 전혀 없는 경우. 예를 들어 로깅 라이브러리 하나를 쓰고 있는데 2개 이상 섞어 쓸 계획이 없을 때 선제적으로 대응해야 하나?