개발 실무

"나는 왜 10년이나 늦게 TDD를 시작했을까?" - 현직 시니어 개발자의 후회록

당신도 TDD를 시작하고 싶었지만, 막상 시작하지 못했던 이유

2024.11.19 | 조회 896 |
0
|
데브필 DevPill의 프로필 이미지

데브필 DevPill

Top 1% 개발자로 거듭나는 성공 처방전

Introduction

지난 10년간 수많은 개발자들이 TDD(테스트 주도 개발)를 배우고 싶어 했지만, 대부분 중도에 포기했습니다. 이유는 다양합니다.

  • "너무 어려워 보여서"
  • "시간이 오래 걸릴 것 같아서"
  • "당장 납기일에 쫓기는데 언제 테스트를 먼저 짜나요?"

이 글의 저자인  Daniel Moka 역시 그랬습니다. TDD의 중요성을 알면서도 10년이나 미루다 겨우 시작했다죠. 그리고 깨달았다고 합니다. 자신이 얼마나 많은 시간과 기회를 낭비했는지를.

온라인에는 TDD 관련 정보가 넘쳐납니다. 하지만 대부분이 현실과 동떨어진 이상적인 시나리오만 다루거나, 너무 이론적이라 실제 적용하기가 어렵죠. 그래서 Daniel이 직접 나섰습니다. 10년 전의 자신처럼 TDD를 시작하고 싶지만 어디서부터 시작해야 할지 모르는 분들을 위해, 실전에서 바로 적용할 수 있는 완벽 가이드를 준비했다고 하네요. 바로 The Complete Guide to Starting TDD를 번역해 가져왔습니다.

이 글을 통해 여러분은 복잡한 이론 없이, 실제 프로젝트에서 바로 적용할 수 있는 TDD의 핵심을 배우게 될 것입니다. 더 이상 미루지 마세요. 지금이 바로 TDD를 시작할 때입니다.


TDD 시작하기 완벽 가이드

Background

많은 분들이 테스트 주도 개발(TDD)을 어떻게 시작해야 하는지 문의해 주십니다. 온라인에 정보가 넘쳐나지만, 대부분이 오해의 소지가 있어 입문자들이 학습하기 어려운 실정입니다.

그래서 제가 약 10년 전 TDD를 배우기 시작했을 때 있었으면 하고 바랐던 완벽한 가이드를 만들어보기로 했습니다.

TDD를 늘 배우고 싶었지만 어디서부터 시작해야 할지 막막하셨나요? 그렇다면 차근차근 설명해 드리겠습니다:

1. TDD 사이클 이해하기

첨부 이미지

TDD 사이클은 TDD의 근간이 되는 개념으로, 다음 세 단계로 구성됩니다:

레드(Red) - 실패하는 테스트 작성: 프로덕션 코드를 작성하기 전에 반드시 실패하는 테스트를 먼저 작성합니다. 테스트는 구현하고자 하는 기능의 동작을 정의합니다.

그린(Green) - 테스트 통과시키기: 이 단계에서는 프로덕션 코드를 작성하여 실패하는 테스트를 통과시킵니다. 테스트가 통과되면 비즈니스 요구사항이 의도한 대로 구현되었음을 확인할 수 있습니다.

리팩터(Refactor) - 설계 개선하기: 기존 기능을 손상시키지 않으면서 코드(테스트 코드 포함)를 개선합니다. 이 단계에서는 지속적인 리팩터링을 통해 설계를 발전시키며 다음과 같은 작업을 수행합니다:

  • 의미 있는 이름 부여
  • 중복 코드 제거
  • 비즈니스 로직 추상화
  • 코드 냄새(code smell) 제거
  • 디자인 패턴 적용

2. TDD의 세 가지 원칙 익히기

효과적인 TDD 실천을 위해서는 TDD 사이클을 따르는 것만으로는 부족합니다. Uncle Bob이 제시한 TDD의 세 가지 원칙을 적용하는 것이 핵심입니다. 이 원칙들은 작은 단계를 밟아가며 한 번에 하나의 변경에만 집중하도록 도와줍니다.

세 가지 원칙은 다음과 같습니다:

  • 실패하는 테스트를 먼저 작성한다
  • 테스트가 실패하면 더 이상의 테스트 작성을 멈춘다 (컴파일 오류도 실패로 간주)
  • 테스트가 통과하면 더 이상의 프로덕션 코드 작성을 멈춘다

TDD 워크플로우 

TDD 워크플로우는 TDD 사이클과 세 가지 원칙이 어우러진 작업 방식입니다. 다음은 이러한 과정이 어떻게 유기적으로 작동하는지 보여주는 단계별 도식입니다.

첨부 이미지

3. 카타(의도적 수련)로 연습하기

탁월함은 연습에서 비롯됩니다. 카타(Kata)는 실제 프로젝트의 복잡성 없이 특정 기술을 연마할 수 있는 15-30분 길이의 코딩 연습입니다. 프로그래밍 언어에 구애받지 않으므로 익숙한 언어로 시작할 수 있습니다.

카타는 TDD의 기본기를 다지는 데 매우 효과적입니다. 하나를 선택해서 TDD 워크플로우를 연습해 보세요! 다음 사이트에서 다양한 카타를 찾아보실 수 있습니다:

4. 실무 프로젝트에 TDD 적용하기

카타로 충분히 연습하고 실력을 쌓았다면 이제 실무 프로젝트에 TDD를 적용할 차례입니다. 다음은 시작하기 위한 조언들입니다:

  • 요구사항 철저히 파악하기: 테스트 작성에 앞서 구현할 기능을 명확히 이해해야 합니다.
  • 작은 것부터 시작하기: 간단한 함수나 클래스의 실패하는 테스트부터 시작하세요. 처음부터 복잡한 기능에 도전하지 마세요.
  • TDD 사이클 준수하기: 테스트 작성, 통과, 리팩터링의 흐름을 꾸준히 유지하세요.
  • 세 가지 원칙 실천하기: 작은 단계를 밟아가기 위해 TDD의 세 가지 원칙을 항상 염두에 두세요.

실무 프로젝트에 TDD를 적용하는 것이 처음에는 부담스러울 수 있지만, 작은 것부터 시작하면 반드시 성공할 수 있습니다.

5. 클린 코드와 테스팅 숙달하기

TDD의 규칙을 아는 것만으로는 효과적인 실천이 어렵다는 것이 현실입니다. 진정한 숙련을 위해서는 다음과 같은 탄탄한 테스팅 실천법이 뒷받침되어야 합니다:

  • 다섯 가지 테스트 대역 활용하기: 복잡한 상호작용을 테스트하기 위해 스텁(stub), 목(mock), 페이크(fake), 스파이(spy), 더미(dummy)를 적재적소에 활용하는 방법을 익히세요.
  • 테스트 냄새 감지하기: 과도하게 복잡한 설정, 취약한 테스트, 누락된 검증과 같은 문제를 식별하고 해결하는 방법을 터득하세요.
  • 유지보수가 용이한 테스트 작성하기: 가독성이 높고, 신뢰할 수 있으며, 변경에 유연한 테스트를 작성하세요.

이러한 기술들을 갖추면 TDD가 제공하는 진정한 가치를 온전히 실현할 수 있을 것입니다.

 


👥 더 나은 데브필을 만드는 데 의견을 보태주세요

Top 1% 개발자로 거듭나기 위한 처방전, DevPill 구독자 여러분 안녕하세요 :) 

저는 여러분들이 너무 궁금합니다. 

어떤 마음으로 뉴스레터를 구독해주시는지, 

어떤 환경에서 최고의 개발자가 되기 위해 고군분투하고 계신지, 

제가 드릴 수 있는 도움은 어떤 게 있을지. 

아래 설문조사에 참여해주시면 더 나은 콘텐츠를 제작할 수 있도록 힘쓰겠습니다. 설문에 참여해주시는 분들 전원 1개월 유료 멤버십 구독권을 선물드립니다. 유료 멤버십에서는 아래와 같은 혜택이 제공됩니다.

  • DevPill과의 1:1 온라인 커피챗
  • 멤버십 전용 슬랙 채널 참여권
    • 채용 정보 공유 / 스터디 그룹 형성 / 실시간 기술 질의응답
  • 이력서/포트폴리오 템플릿

 

설문 참여하고 유료 멤버십 혜택받기 →

첨부 이미지

 

 

다가올 뉴스레터가 궁금하신가요?

지금 구독해서 새로운 레터를 받아보세요

이번 뉴스레터 어떠셨나요?

데브필 DevPill 님에게 ☕️ 커피와 ✉️ 쪽지를 보내보세요!

댓글

의견을 남겨주세요

확인
의견이 있으신가요? 제일 먼저 댓글을 달아보세요 !

다른 뉴스레터

© 2024 데브필 DevPill

Top 1% 개발자로 거듭나는 성공 처방전

뉴스레터 문의dev.redpill@gmail.com

메일리 로고

자주 묻는 질문 서비스 소개서 오류 및 기능 관련 제보

서비스 이용 문의admin@team.maily.so

메일리 사업자 정보

메일리 (대표자: 이한결) | 사업자번호: 717-47-00705 | 서울 서초구 강남대로53길 8, 8층 11-7호

이용약관 | 개인정보처리방침 | 정기결제 이용약관 | 라이선스