테스트 자동화 도입 여정기

Jimin Lee
29CM TEAM
Published in
6 min readMay 17, 2020

29CM 백엔드 셀은 Pytest를 활용하여 자동화된 테스트 환경을 운영하고 있습니다. 팀에서 유닛 테스트를 작성한지 2년이 되어가네요. ✌️😊✌️

이번 글에서는 “테스트 자동화”라는 개발 문화를 팀에 도입하면서 시도한 경험을 공유하고자 합니다.

테스트 코드 이해하기 + 환경 셋팅하기 🛠

테스트 코드를 도입할 때, 가장 먼저 필요했던 것은 “테스트 코드"의 의미와 필요성을 동료들이 이해하고 공감하는 것이었습니다.

테스트 코드를 작성하고, 유지보수한다는 것은 개발 프로세스의 변화를 의미합니다. 그리고 이는 개발자의 학습량, 업무량, 개발 패턴에 영향을 미칩니다.

변화의 예로는 새로운 기술 학습, 테스트 코드 작성 업무, 테스트 프로세스로 인한 개발 자율성 저하 등이 있습니다.

때문에 테스트 코드를 관리하는 것은 하나의 개발 문화로 볼 수 있습니다. 함께 해야하는 일이기 때문에 동료들의 동의를 얻는 과정이 필요했습니다.

그래서 “사내 발표”와 “외부 세미나 참석”을 통해 테스트 코드에 대한 이해도를 높이고, 공감대를 형성하는 과정을 가졌습니다.

1. 사내 발표 — ”29CM에 테스트 코드 적용하기"

사내 발표에서는 아래의 세가지 내용을 주제로 지식을 공유하는 시간을 가졌습니다.

  • 테스트 코드를 작성해야하는 이유
  • 29CM 애플리케이션에 로컬 테스트 환경을 구성하는 방법
  • 29CM 애플리케이션 테스트코드 샘플 살펴보기

2. 외부 세미나-The Real TDD

그리고 동료들과 OKKYCON: 2018 The Real TDD — TDD 제대로 알기라는 세미나에 참석했습니다. 이는 팀에서 테스트 코드에 대해 동일한 심상을 떠올릴 수 있어 많은 도움이 되었습니다.

이 후, 동료들의 응원에 힘입어 테스트 코드를 메인 프로젝트에 적용하기 시작했습니다. 😊

테스트 코드와 친해지기 💑

테스트 코드 환경을 메인 앱에 적용한 이후에도, 다 같이 테스트 코드를 작성하는 건 쉽지 않았습니다. 테스트 코드 작성에 익숙하지 않은 상황에서, 복잡한 비즈니스에 테스트 코드를 다는 건 어려운 일이었죠.

그래서 TDD KATA 스터디를 시작했습니다.

스터디 계획표

이 스터디의 목적은 “테스트 코드와 친해지기”였습니다. 그래서 순수 파이썬으로 된 작은 문제를 TDD 방식으로 풀어보는 연습을 했습니다.

randori 페어 프로그래밍

그리고 5분씩 돌아가면서 동일한 문제를 페어 프로그래밍 방식으로 풀어보는 방식으로 스터디를 진행했습니다. 이 방식 덕분에 즐겁게 테스트 코드를 작성해보는 경험을 가질 수 있었습니다.

TDD Kata 스터디 후기 😊

스터디는 Coding Dojo: Test Driven Development으로 인사이트를 얻었습니다.

“하지마요 🙅🏻‍♀️” 규칙 만들기

유닛테스트 도입 초기에는 “일단 시도 해보자!” 라는 관점으로 시작했습니다. 그리고 어느정도 테스트 코드에 익숙해 졌을 때, 저희만의 규칙을 만들기 시작했습니다. 그 예로 유닛테스트 스타일 가이드, 테스트 코드 깨트리지 않기 등이 있습니다.

테스트하기 편한 개발 환경 만들기 🌳 🚿

이후 4개의 Django 프로젝트에 테스트 코드를 적용했습니다. 이중 메인 프로젝트는 600여 개의 테스트 코드가 작성되어 있습니다. 이는 테스트 커버리지가 높아졌다는 청신호이지만, 관리해야 하는 코드의 양과 복잡성이 높아졌다는 의미이기도 합니다.

테스트 코드는 나무에 물을 주듯이 꾸준히 가꿔야 합니다. 자칫 방심하면 깨진 유리창이 되기 쉽죠.

실수로 테스트 코드를 깨트릴 수도 있고, 신규 입사자가 테스트 환경에 익숙해지는 데에 시간이 걸릴 수도 있습니다. 그리고 테스트 코드 양이 점점 늘어나서 관리하기 어려운 수준까지 이를 수도 있습니다.

그래서 테스트 코드가 지속적으로 운영될 수 있도록 틈틈이 개선하는 작업들이 필요합니다.

이를 위해 백엔드 셀에서 시도했던 것들은 다음과 같습니다. 🛠👷🏻‍♂️👷🏻‍♀️🛠

  • DEV Build Process에 Test Build 단계를 추가하여, 테스트에 실패한 기능은 배포될 수 없도록 강제하기
  • Gitlab / Github CI를 활용하여 Remote 환경에서 테스트 돌리기
  • 테스트 환경을 Docker로 쉽게 띄울 수 있도록 구성하기
  • 테스트 코드 리뷰하기
  • 테스트 빌드 시간 개선하기
  • 깨지는 테스트 코드 원인 찾고 해결하기

마무리

새로운 기술 문화가 자리 잡기 위해서는 꾸준한 노력과 지속적인 개선이 필요합니다. 이는 많은 에너지와 시간을 필요로 하지만, 진행 과정과 성과가 쉽게 눈에 띄지는 않는 편입니다. 그래서 단기전으로 생각한다면, 금세 지칠 수 있습니다.

29CM 백엔드 셀에서는 동료들과 업무를 분담하고, 협력했습니다. 그 결과, 테스트 코드에 대한 기술 문화가 잘 자리 잡을 수 있었습니다. 👨‍👩‍👧‍👦🤝👨‍👩‍👧‍👦

29CM은 지금도 더 나은 개발 환경을 위하여 계속 개선하고 있습니다. 앞으로는 “테스트 환경 개선하기”, “좋은 테스트 작성하기” 등의 다음 미션이 남아있습니다.

이 글이 “테스트 코드” 도입을 고려하는 다른 분들께 도움이 되었으면 좋겠네요.

함께 성장할 동료를 찾습니다

29CM (무신사) 는 3년 연속 거래액 2배의 성장을 이루었습니다.

빠르게 성장을 해나가면서도 더 큰 성장에 대비하기 위해 Modular Architecture 를 꾸준히 확장해 나가며 Tuist 를 도입하는 등 팀에 필요한 여러 기술적인 시도를 진행하고 있습니다. 함께 성장하고 유저 가치를 만들어낼 동료 개발자분들을 찾습니다.

많은 지원 부탁드립니다!

🚀 29CM 채용 페이지 : https://www.29cmcareers.co.kr/

--

--