강사님의 훌륭한 강의를 듣고 현재 진행하고 있는 프로젝트에 테스트 코드를 작성하려고 합니다.
프로젝트 크기는 크지만(개인적인 생각) 아직 테스트 코드는 작성하지 않았고, 해당 프로젝트는 계층형 아키텍처로 이루어져있습니다.
개인적으로 테스트 코드는 유효성 검사를 하는 Presentation Layer보다는 Domain Layer와 같이 중요하고 복잡한 로직이 있는 곳에 더 필요하다고 생각합니다.
그래서 테스트 코드를 작성하는 것도 비용이라고 생각해서 우선은 도메인 로직과 관련된 테스트 코드를 작성하고 컨트롤러와 같이 적은 역할을 하는 곳에 테스트 코드를 차례대로 작성하려고 합니다.
테스트 코드를 작성한 경험이 없어서 부족한 점이 많은데 이렇게 테스트 코드를 프로젝트에 도입하는게 맞을까요?
강사님의 의견이 궁금합니다!
그리고 실무에서도 프로덕션 코드에 맞는 테스트 코드를 모두 작성하시는지 아니면 필요하다고 생각하는 곳에만 작성하시는지도 궁금합니다.
안녕하세요, 강민님! :)
예시로 Presentation Layer와 Domain Layer를 들어주셨는데, 두 레이어를 비교한다면 당연 Domain Layer의 테스트가 우선입니다.
(물론 중요한 핵심 비즈니스 도메인 로직을 도메인 레이어로 잘 분리해서 설계했다는 것을 가정합니다.)
비즈니스 요구사항을 제대로 반영하지 못해 잘못된 기능을 도메인 레이어에 작성한 경우와, 외부 세계에서 받은 데이터를 덜 검증하여 기능이 정상 동작하지 않는 케이스가 생기는 경우를 비교한다면 전자가 더 크리티컬하기 때문입니다.
다만 어느 하나의 레이어를 테스트하는 것이 더 중요하다고 해서, 비용을 고려하여 특정 레이어만 테스트를 작성하는 것을 우선으로 하는 것은 조금 다른 이야기일 수 있습니다.
도메인 레이어가 탄탄해도, 프레젠테이션 레이어로부터 출발해 해당 레이어까지 도달하는 구간의 로직이 테스트 코드로 보장되지 않아 문제가 생겼다면, 클라이언트 입장에서는 프레젠테이션 레이어가 문제인지, 도메인 레이어가 문제인지와는 상관 없이 그저 제대로 동작하지 않는 기능을 마주하게 될 뿐이니까요.
정리하자면, 도메인 레이어가 물론 우선이지만, 어디서 문제가 생길지 모르니 되도록이면 모든 레이어에 테스트 코드가 있는 것이 좋고, "비용에 따른 테스트 코드의 선택적 적용"은 최후의 보루로 두시면 좋을 것 같습니다.
물론 저도 실무를 하다 보면 시간적인 리소스가 매우 부족한 경우에는 너무 뻔하거나 단순한 곳은 테스트 코드를 스킵할 때도 있지만, 반대로 시간이 충분하면 단순한 로직에도 전부 테스트를 작성합니다.
미래에 해당 부분이 어떻게 변화할지 모르기 때문이죠.
항상 그런 선택을 하는 것이 아니라, 최대한 보수적으로 접근한다는 사실을 알아주셨으면 합니다. ㅎㅎ
도움이 되셨기를 바랍니다.
감사합니다. :)
답글
강민
2023.09.18좋은 답변 해주셔서 감사합니다!