새소식

우테코

🚀 TDD적으로 사고하는 법

  • -
반응형

 

TDD, 레벨 1부터 정말 많이 들었지만, 할 때마다 정말 마음에 다가오지 않았다.

 

이걸 왜 하는 걸까 라는 생각도 많이 하고 TDD 하려고 하다가 까먹고 로직을 모두 짠 후 급하게 테스트 코드를 짠 적도 있다.

 

그러던 나에게 이번 미션에서 진행해 본 TDD 적으로 사고하는 방법이 큰 울림을 주었다.

 

이를 적용하게 된 이유는 사실 TDD 가 유용하니 해보자 보다는 성격 급한 내가 미션을 차근차근히 하려면 어떤 방법이 좋을까를 생각하다가 적용하게 되었다.


 

< 진행 과정 >

 

 

가장 처음에는 기능 요구 사항을 상세히 적어보았다.

 

아래는 내가 이전에 주로 작성했던 기능 요구 사항 명세서이다.

 

 

 

대부분 컴포넌트 단위로 어떤 작업을 해야 하는지 명시하는 기능만 했다.

그러다 보니 작업을 진행하다 보면 작성한 기능 요구사항 목록을 굳이 확인하지 않고 보이는 화면부터 작성했었다.


 

 

그리고 이 명세서가 이번 미션을 시작하기 전에 적어본 기능 요구 사항이다.

 

 

확실히 저번보다 더 상세히 적힌 걸 확인할 수 있다.

 

또한 어떤 걸 특히 더 고려해야 하는지, 내부 로직이 어떻게 될 것인지 간단하게 적어놓은 것도 볼 수 있다.

 

이렇게 기능 명세서를 그냥 적는 것이 아니라 어떤 로직을 가진 기능이 있을 건지 어떤 아웃풋을 가질 건지 생각하면서 작성하다 보니 어떤 기능이 필요할지 미션 전부터 생각할 수 있었다.

 

그리고 이렇게 적힌 순서를 고려하며 작업을 하나씩 시작했다.

 

 

 

 

기본 atom 만들기

 

만들어야 하는 쿠폰 로직을 사용하기 위해 기본 쿠폰 리스트를 가지고 있을 atom을 만들었다.

 

그리고 default로 서버에서 받아올 데이터를 연결해 주기 위한 작업을 했다.

 

기본 세팅이 끝났다면 이제 기능을 구현해 보자

 

 

 

유효성 검사 커스텀 훅을 만들기 위해 가장 먼저 테스트 파일을 만들었다.

 

물론 테스트 퍼스트를 해야 TDD는 아니지만 아직 TDD 연습이 덜 된 나에게는 의식적으로 테스트를 먼저 짜는 연습이 필요하다고 느껴서 테스트를 먼저 작성했다.

 

테스트를 먼저 작성하면서 생각했던 것은 어떤 것을 보내주면 어떤 것을 받아올지를 고민해 보았다.

 

 

그렇게 작성한 테스트 명세서다. 

[유효한 쿠폰] 쿠폰의 유효성을 확인한 후 유효 여부를 알려준다. (존재 여부, 만료일 체크)

 

이 명세를 보면 알 수 있듯이 쿠폰을 넘겨주면 이 쿠폰이 유효한지를 넘겨줄 것이다.

 

 

 

그렇게 생각하고 이제 테스트 코드를 작성해 보았다.

 

유효한 케이스를 위한 유효한 쿠폰 테스트와 유효하지 않은 테스트 케이스를 모두 작성해 주었다.

 

처음 테스트 결과는 당연히 커스텀 훅이 없기 때문에 `fail`  이었다.

 

하지만 나는 이제 이 커스텀 훅 useCouponValidator 가 어떤 걸 전달받아야 하고, 어떤 걸 보내줄지 알고 있다.

 

그걸 생각하며 내부 로직을 작성했다.

 

그리고 돌린 테스트는 모두 통과.

 

이렇게 하나씩 다른 기능들도 해결해 나갔다.

 

 

그러다 보니

복잡한 파생 상태, 복잡한 쿠폰 로직을 꽤 원활하게 해결했던 거 같다.

 

또한 가장 중요한 이 TDD를 한 이유인 미션을 차근차근 꼼꼼히 진행할 수 있었다.

 

 


 

그래서 결론은..?

 

이렇게 진행하다 보니 급하게 미션을 진행했던 나에게 차근차근 스텝별로 기능을 생각하게 되었고, 로직을 코드로 구현하기 전에 로직의 대략적인 내용을 머릿속으로 먼저 정리할 수 있었다.

 

만약 이렇게 진행하지 않았다면 나는 당장 필요한 데이터를 전달받아 로직을 짜다 보니 나오는 결과물을 리턴했을 것이다.

그게 불리안이 되었을 수도 있고, 스트링으로 결과를 반환했을 수도 있다. 그리고 그런 코드는 아마 일관성이 떨어졌을 것이다.

 

그런 점에서 이번 TDD 적으로 진행한 것 덕분에, TDD 적으로 사고하고 미션을 해나가는 일이 어떤 효능을 가졌는지, 그리고 특히 나에게 어떤 점이 좋았는지 알게 되었다.

 

다음 미션은 비록 페어 미션이지만 이를 잊지 않고 또 한 번 연습할 기회가 생겨 정말 내 것으로 만들고 싶다.

반응형
Contents
-

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.