이동욱 저자의
스프링 부트와 AWS로 혼자 구현하는 웹 서비스
를 읽다가,Unit Test 에 대해 이해하기 쉽게 설명된 부분이 있어 인용해서 적어보았다.
먼저, TDD 와 Unit Test 는 다르다.
TDD 는 Test-Driven Development, 테스트 주도 개발을 의미한다.
TDD 는 Test 코드를 작성하는 것부터 시작한다.
Red Green Cycle
TDD는 위 그림과 같은 프로세스를 가진다.
- 항상 실패하는 테스트를 먼저 작성 (Red)
- 테스트가 통과하는 프로덕션 코드를 작성 (Green)
- 테스트가 통과하면 프로덕션 코드를 리팩토링 (Refactor)
반면 Unit Test 는 TDD 의 첫 번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 의미한다.
TDD 처럼 테스트를 반드시 먼저하고, 리팩토링을 하는 게 아니라
단순히 기능 단위로 테스트 코드만 작성하는 것을 의미한다.
💡그렇다면 테스트 코드는 왜 작성해야 할까 ?
저자는 Unit Test 배우기 전 개발 방식을 다음과 같이 설명했다.
- 코드 작성
- 프로그램 실행
- API 테스트 도구로 HTTP 요청
- 요청결과를 System.out.println() 으로 눈으로 검증
- 결과가 다르면 다시 프로그램을 중지하고 코드 수정
위 개발 과정에서 2~5는 코드를 수정할 때마다 반복 해야만 한다.
테스트 코드가 없다보니 계속 프로그램을 재실행하면서
눈으로 결과를 확인해보아야 하는 문제점이 존재한다.
테스트 코드를 작성하면 사람이 눈으로 검증하지 않게 자동검증이 가능하다.
그리고 개발자가 만든 기능을 안전하게 보호해준다.
예를 들어 B 라는 기능이 추가되어 테스트한다고 치자.
B 기능이 잘 되어 오픈했더니 기존에 잘 되었던 A 기능에 문제가 생긴 것을 발견한다.
이렇게 새로운 기능이 추가될 때마다 서비스의 모든 기능을 손수 테스트해볼 수는 없다.
테스트 코드는 새로운 기능이 추가될 때, 기존 기능이 잘 작동되는 것을 보장해준다.
A 라는 기존 기능에 모두 테스트 코드를 작성해 놓았다면,
어떤 기능을 추가하던지 테스트 코드를 수행함으로써 문제를 빠르게 찾을 수 있는 것이다.
테스트 코드 작성을 습관으로 들이자.
Unit Test 에 대해 더 공부하고 TDD 를 학습해보자 !