테스트 코드란 내가 작성한 코드가 실제 서비스에서도 잘 동작을 하는가? 내가 예상했던 결과가 나오는가를 테스트 해보는 행위이다. 지금까지 개발을 하면서 왜 구지 따로 테스트 코드를 작성 해야되는지 이해가 되지 않았다. 그냥 코드를 작성하고 서버를 실행시켜서 어느 부분에서 오류가 발생하는지, 왜 오류가 발생한 것인지를 고쳐가면서 프로젝트를 완성시켜 왔기 때문에 테스트 코드의 필요성을 느끼지 못했다.
테스트 코드는 분명 필요하고 유용하기 때문에 만들어진 기술일 것이다. 그럼 왜 이게 만들어 졌는지를 알아보자
계발의 단계는
Development -> Unit Tests -> QA Testing -> Production
이렇게 4단계로 구분이 된다.
각각의 단계를 살펴보면
1단계는 development 단계로 개발자가 실제로 기능을 개발하는 단계이다.
이 단계에서 개발자는 코드를 작성을한다.
2단계는 Unit Tests 단계로 개발자가 본인이 1단계에서 작성한 코드를 실행시켜보고 잘 작동을 하는지 확인해보고 오류를 수정하는 단계이다.
3단계는 QA Testing 단계는 완성된 서비스를 배포하기전에 통합된 서비스를 테스트 해보는 단계이다. 이때는 개발자가 직접 테스트 하기도 하지만 큰 회사는 전문 QA팀이 있어서 QA팀에서 테스트를 진행한다.
(테스트만 진행하는 부서가 따로 존재 할 정도로 테스트 즉 버그를 찾아내는 것은 매우 중요하다)
4단계는 Production 단계로 이미 서비스가 진행중인 코드를 테스트 하는 단계이다.
아래로 내려갈수록 버그는 찾기가 힘들고 찾더라도 테스트하는데 큰 비용이 발생한다. 따라서 낮은 단계에서 테스트 하는것이 가장 좋은 테스트 타이밍이다.
테스트코드는 작성한 코드가 예상한 결과 값과 실제 결과값이 일치하는지를 검사해준다. 즉 코드가 정상적으로 작동을 하면 예상값과 실제 결과값이 같을 것이고 오류가 발생한다면 같지 않을 것이다.
기존의 내가 오류를 찾고 고치는 방법은 코드를 수정을하고 서버를 다시 실행시켜서 결과값을 확인하고 오류가 있다면 다시 서버를 죽이는 방식이였다. 그렇게 하면 실제 서비스가 진행되는 상황이라면 코드를 수정하는 동안 서비스가 중단될 것이고 서비스가 중단되면 브랜딩 이미지에 치명적이기 때문에 지양된다. 그러면 서버를 중지하지 않고 테스트를 하기위한 방법으로 테스트 코드가 등장하였다.
테스트 코드는 서버를 실행시켜서 직접 사용자 입장에서 테스트 하는 것이 아니라 서버가 실행되기 전에 테스트 코드가 실행되게 만들어 오류가 있는지를 확인하고 오류가 없다면 서버가 실행되도록 작동한다.
테스트 코드가 중요한 만큼 스프링에서 테스트 코드를 지원해주는 툴을 제공하고 그 이름은 JUnit이다. 개발자는 이 JUnit을 사용해서 테스트 코드를 쉽게 작성하고 테스트 할 수 있게됬다.