목차
프론트엔드에서 TDD는 어느정도?는 가능하다고 생각합니다.
우선 TDD에 대해 저의 생각을 말해보겠습니다.
저는 일단 프론트엔드(리액트 사용)로 TDD를 부분 도입하고자 했던 경험이 있고, 그 과정에서 겪은 감정, 생각들을 공유하려고 이 게시글을 작성합니다.
프로그래밍 개발 방법론에 다양한 방법들이 있고, 일하는 방식에도 여러가지 방법들이 있습니다.
폭포수 모델, 애자일과 같은 것이 있으며, TDD, BDD등 다양한 방법론이 있습니다.
그런 것들의 공통점은 무엇인지 생각을 해보았습니다.
결국에는 고객에게 가치를 전달하기 위해서 생겨난 것이라고 생각합니다.
TDD같은 경우에도 테스트 코드를 작성해두면 시간은 걸리지만, 길게 보면 유지보수성이 높으며 문서의 대체재도 가능하며 코드에 자신감을 심어주는 등 다양한 장점이 있다고 소개를합니다.
저는 그 모든 장점이 결국에 하나로 귀결되는데, "고객에게 가치를 잘 전달한다는 것"이라고 생각해요.
고객에게 가치를 전달하기 위해서 기능만 동작하는 코드를 만드는 것이 아닌 나중에 수정사항이나 추가 개발을 해야할 때 시간(리소스)를 많이 들이지 않고 개발이 가능하게끔 해서 빠르게 고객의 니즈를 충족시킬 수 있습니다.
이러한 생각을 바탕으로 저희팀에서 TDD를 할까 말까 고민을 하던 와중 제안을 해서 하게 되었습니다.
내가 겪은 프론트엔드 TDD 고충
TDD는 테스트 코드 작성 -> 코드 작성 -> 테스트 -> 리팩토링 -> 테스트 등 이러한 사이클을 가지고 개발하는 것으로 알고있습니다.
저희 팀은 이에 2가지의 원칙을 세웠습니다.
1. 이미 코드가 완성된 상태였기에 기능을 추가할때는 TDD로 개발
2. 운영과정에서 에러가 나는 코드 발견시 테스트 코드 작성 후 코드 수정
이렇게 해서 테스트 코드 커버리지를 올리자는 내용이었습니다. 저는 그래서 처음에 UI도 테스트를 해야할 것 같아서 테스트를 작성해 나가며 코드를 작성했습니다.
음.. 근데 모든 팀원들이 UI테스트는 테스트 코드에 들이는 시간대비 얻는 이점이 없고, 자주 바뀌어서 테스트 코드 자체가 의미가 없어진다고 주장하였고,
저는 유저의 권한에 따라 어떤 화면이 보이고 안보이고를 체크하는 UI테스트 정도는 괜찮을 것 같아서 짠거였는데 다들 반대를 해서 팀을 따르기로 했습니다.
우리팀 프론트엔드에 순수함수는 그렇게 많지는 않았다.
다른 회사는 모르겠지만, 저희 팀 프론트엔드의 코드들은 함수로 짜여있지만, 막상 순수함수는 적고 대부분 컴포넌트 내부에 작성되어 있거나 State를 변경하는 함수(side effect가 있는 함수)가 대부분이었습니다.
테스트를 할 수 있는 코드는 서버에게 보내고 받을 때 converting해주는 함수를 순수함수로 만들어서 테스트를 하거나
요청 폼에 필수 체크를 하는 것을 상황 별로 테스트 하는 정도가 가능했습니다.
아마 처음부터 TDD로 개발했다면 많은 순수함수들이 있어서 테스트하기에 좋았겠지만, 이미 짜여진 코드를 바꿔가면서 까지 테스트 코드를 작성하기에는 리소스가 부족했습니다.
UI테스트를 하지 않으니 테스트할 코드가 별로 없었다.
기능을 개발하고, 고칠 때 프론트엔드는 브라우저를 꼭 옆에 켜두고 보면서 작업을 합니다.
QA를 할 때 회귀테스트를 하더라도 어떤 버튼을 클릭하고 Input에 값을 넣고 전송하고 등 브라우저 위에서 다양한 UI, 이벤트와 함께 테스트를합니다. 그런데 테스트 코드에 UI테스트를 빼니까 막상 작성할 코드가 많지는 않았습니다.
저는 프론트엔드에서 계산로직이 들어가는 것은 다른 분야에 비해 상대적으로 얼마 없기 때문에 UI 테스트를 할 수만 있다면 꼭 하는 것이 중요하다고 생각합니다. Nhn의 경우에는 Stroybook을 이용해서도 테스트를 하는 것으로 알고있습니다.
자료가 그렇게 많지는 않았다.
아무래도 프론트엔드라는 것이 전문화된 것이 오래되지 않다보니 시니어가 부족한 것 같다는 느낌도 있습니다. 요즈음에는 전공자분들도 프론트엔드를 하시지만, 예전에는 안 좋은 취급을 받았다고 들었습니다.
그러다보니 테스트에 관한 자료 TDD 자료들이 많이 있지만, 프론트엔드에서 어떻게 해야하는지에 대한 게시글은 많이 없었습니다. 그래서 제가 코드를 작성하면서도 "아 내가 짜고 있는게 진짜 실용성이 있는건가?" 라는 생각을 많이 하면서 짰습니다. 제가 그 당시 자료들을 참고하면서 정말 감명깊게 본 영상이 있어서 소개드릴게요! (NHN 에서 올라온 영상입니다)
점점 시간이 지나면서 많은 사람들이 프론트엔드에 관심을 가질 것이고, TDD 관련된 자료들도 많이 올라올 것이라고 생각합니다. 지금은 약간 과도기? 느낌이 들긴하네요. 제가 구글 검색 능력이 부족한 탓도 있을겁니다 ㅎㅎ
제가 겪은 경험이 조금이나마 도움이 되길 바랍니다..!
'테스트' 카테고리의 다른 글
리액트 테스트할 때 API 요청이 될까? 안될까? (0) | 2022.07.04 |
---|