테스트 가능성을 높이자 (TDD, 테스트 코드)
반응형

안녕하세요 😉

유유자적한 개발자 유로띠 입니다 😀

 

 

회사에서

프로젝트를 통해 배우고 성장하며

이것을 토대로 그로스 해커(Growth Hacker)가 되기 위한 포스팅입니다.

 

 

 

 

오늘의 이야기는

테스트 코드

는 왜 중요한지

에 대한 내용입니다 😏 

 

 

 

테스트 코드의 경험


 

1년간의 프로젝트

저는 현재 온라인 강의 콘텐츠를 제공하는 회사에 다니고 있습니다. 올해 초 오픈한 신규 B2B 온라인 강의 사이트를 위해서 작년부터 열심히 달려왔습니다. 전체 아키텍처를 새롭게 구상하고 기존에 사용하던 프레임 워크와 언어를 과감하게 변경하고 새로운 기능을 추가하면서 새롭게 시작하였습니다.

때문에 1년의 시간은 정말 너무너무 부족한 시간이었죠... 😇

하지만 그 부족한 시간 속에서 저희 팀이 지켜야 하는 단 한 가지 규칙이 바로 테스트 코드였습니다. 테스트 코드를 작성하면서 빠르게 작업을 하는 건 굉장히 어려웠습니다. 그러나 아무리 바빠도 반드시 테스트코드는 존재해야 한다는 신념하나로 테스트 코드를 작성해 왔고 올해 신규 사이트를 오픈하고 유지보수를 하면서 테스트 코드는 엄청난 빛을 발휘하였습니다.

 

배포 전 크게 6개의 Matrix으로 분리된 ci test를 전부 통과해야 합니다.

물론 테스트 환경은 github actions의 독립적인 테스트에서 진행됩니다.

 

 

 

아직도 테스트 코드를 왜 작성해야 하는지 고민하는 분들을 위해

테스트 코드의 중요성에 대해 이야기해보려 합니다 🙌

 

 

 

🤔 테스트 코드는 왜 중요한가?


 

먼저 테스트 코드가 왜 중요한지 살펴보기 전에

우선 레거시 코드에 대해 이야기해 볼 필요성이 있습니다.

 

🤨 레거시 코드

레거시 코드란 무엇일까요? 일단 레거시 코드란 말만 들어도 대부분의 개발자는 피하고 싶어 할 겁니다. 레거시 코드를 좋아하거나 반기는 개발자는 흔치 않죠. 

 

보통 레거시 코드를 다음과 같이 이야기합니다.

 

🔴 오래되었지만 여전히 사용하는 코드

🔴 새로운 기술을 적용하기 어려운 코드

🔴 테스트가 없는 코드

🔴 심지어는 남이 만든 코드도?

 

또한, Vlad Mihalcea는 다음과 같은 말을 했습니다.

 

Vlad Mihalcea 인용

 

 

 

여러 가지 의미로 레거시 코드를 정의하고 있지만 공통점은 결국 수정하기 어려운 코드라는 점입니다.

 

수정하기 어려운 특징은 결국 악순환을 만들게 됩니다.

 

육각형 개발자 - 테스트

 

 

이렇게 계속 기존 코드를 분석하지 못하고 코드를 수정을 계속합니다. 

테스트도 없어서 사이드 이펙트가 발생하지 않기를 기도하며 두려운 마음으로 배포를 진행하고요.

그렇게 일단 어떻게든 동작되면 다음에 어떻게 될지 모르니 건들 수도 없습니다. 😇

 

일단 동작하면 건들지마!

 

 

그럼 어떻게 개선해야 할까요?

바로 코드를 수정하기 쉬운 구조로 변경해야 합니다. 🙌

 

 

 

🚀 리팩토링

 

코드를 수정하기 쉬운 구조로 바꾸는 방법 중 하나는 바로 리팩토링(refactoring)입니다.

 

 

리팩토링

 

 

리팩토링(refactoring)은 기존 동작은 그대로 유지하면서 내부 구조를 바꾸는 기법입니다.

 

 

그럼 다시 내부 구조를 바꾸고 기존 동작은 그대로 유지되는지 어떻게 확인할 수 있을까요?

수정할 때마다 수동으로 확인하면 시간도 많이 걸리고 하나하나 검증하기도 어려워 놓치기 쉽습니다.

그래서 우리는 테스트 코드가 필요합니다.

 

 

🙆‍♂️ 테스트 코드 중요하다


 

⭐️ 테스트 코드

 테스트 코드를 작성하면 다음과 같은 장점이 있습니다.

✅ 코드의 안정감이 높아짐

 코드 변경에 두려움이 사라짐

 코드 변경에 자신감이 상승

 

 

자동화된 테스트를 통해 코드 변경이 있을 때 수정한 곳 이외에 영향이 없는지 검증을 진행합니다.

이렇게 테스트 코드를 작성하면 잘못된 코드가 배포될 가능성을 낮출 수 있습니다.

 

육각형 개발자 - 회귀 테스트

 

 

 

😎 TDD

테스트 관련해서 찾아보면 테스트 주도 개발 (:TDD, Test-Driven Development)을 많이 들어보셨을 겁니다.

 

TDD
테스트 코드를 만들고 이 테스트를 통과할 수 있는 구현을 진행해서 소프트웨어를 개발하는 방법론입니다.

 

 

관련해서 많은 도움이 되는 온라인강의도 많이 있고, 오늘 글에서는 TDD보다는 테스트의 중요성에 중점을 두기 때문에 TDD 관련 내용은 여기서 마무리하겠습니다. 😏

 

 

 

✅ 테스트 가능성

 

TDD는 물론 좋은 방법론입니다. 하지만 그렇다고 개발 먼저 하고 테스트를 나중에 하는 것이 잘못된 것은 아니라고 생각합니다.

그래서 육각형 개발자 책에 다음과 같은 문구가 저는 공감이 되었습니다.

 

육각형 개발자 - 테스트 가능성

 

코드를 작성할 때 테스트 가능성을 염두에 두고 작성을 하면 개발 생산성과 설계 품질을 높일 수 있다는 점입니다.

 

 

🦋 테스트 코드 효과

 

테스트 코드를 작성하면 어떤 효과가 있을까요?

테스트 코드 작성 / 구현 / 리팩토링 과정에서 큰 효과를 볼 수 있습니다.

 

 

 

이렇게 시간이 감소하면 개발 속도가 올라가게 되고 개발 생산성이 올라가게 됩니다.

이는 개발 전반에 영향을 미쳐 결국 우리가 만든 소프트웨어의 가치가 올라가게 되는 선순환 구조가 이루어집니다.

 

 

 

👀 마무리


 

프로젝트 경험을 통해 실제 테스트 코드의 중요성을 알게 되었고 

테스트가 왜 중요한지 공유하기 위해 글을 작성하였습니다.

 

앞서 이야기한 테스트 작성 순서는 중요하지 않고

테스트 코드 존재 자체에 의미가 있다고 생각합니다.

 

마지막으로 육각형 개발자 책에서 감명 깊게 읽은 구절을 소개하며

마치도록 하겠습니다.

🚀 GROW UP POINT

우리는 누구가 레거시를 만난다. 10년 전에 만들어져 지금까지 운영 중인 시스템을 만날 때도 있고, 남들은 쓰지 않은 기술을 사용한 시스템을 만날 때도 있다. 하지만 이것만이 레거시가 아니다. 불과 몇 달 전에 내가 만든 코드도 레거시가 될 수 있다.
내가 만든 코드지만 수정하기 두렵다면 그게 바로 레거시다.

레거시를 만난다면 다음처럼 생각해 보자.
개선할 거리가 있다. 해보자!

 

 

 

 

 

참고

육각형 개발자

 

육각형 개발자 - 예스24

육각형 개발자가 좋은 개발자다!스포츠계에서 각종 능력치가 고루 균등한 선수를 육각형 선수라고 부른다. 이 책의 제목이기도 한 육각형 개발자는 다양한 역량을 고루 갖춘 개발자라는 의미이

www.yes24.com

리팩터링 2판

 

리팩터링 2판 - 예스24

개발자가 선택한 프로그램 가치를 높이는 최고의 코드 관리 기술마틴 파울러의 『리팩터링』이 새롭게 돌아왔다.지난 20년간 전 세계 프로그래머에게 리팩터링의 교본이었던 『리팩토링』은,

m.yes24.com

 

반응형