Skip to content

Commit

Permalink
2024-12-01_TDD
Browse files Browse the repository at this point in the history
  • Loading branch information
devnine-codes committed Dec 1, 2024
1 parent 56c5ef8 commit db67740
Showing 1 changed file with 70 additions and 0 deletions.
70 changes: 70 additions & 0 deletions 2024/12/2024-12-01_TDD/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# TDD

오늘은 **테스트 주도 개발(Test-Driven Development, TDD)** 에 대해 이야기해보려고 한다.
TDD는 테스트를 먼저 작성한 후 코드를 개발하는 방식으로, 처음에는 다소 낯설고 번거롭게 느껴질 수 있지만, 익숙해진다면 소프트웨어 개발에 큰 변화를 가져다줄 수 있다.

---

## TDD란 무엇인가?

TDD는 간단히 말해 **테스트를 먼저 작성하고, 테스트를 통과시키는 코드를 작성한 후, 코드를 리팩토링**하는 과정이다.
이 방식은 세 가지 주요 단계를 반복하며 진행된다:

1. **Red**: 실패하는 테스트를 작성한다. (테스트는 반드시 실패해야 한다.)
2. **Green**: 테스트를 통과하는 최소한의 코드를 작성한다.
3. **Refactor**: 중복 제거 및 구조 개선을 통해 코드를 리팩토링한다.

---

## TDD를 적용하며

TDD를 적용하면서 아래와 같은 경험을 할 수 있었다:

### **1) 요구사항의 명확화**
테스트를 먼저 작성하기 때문에, 무엇을 구현해야 하는지를 먼저 명확히 정의할 수 있다.
애매한 요구사항을 코드로 바로 구현하는 대신, 테스트를 통해 기능의 기대 결과를 분명히 할 수 있다.

### **2) 원활한 코드 변경**
테스트가 이미 작성되어 있기 때문에, 코드를 변경하거나 리팩토링하더라도 이전 기능이 정상적으로 동작하는지를 쉽게 확인할 수 있다.

### **3) 더 좋은 설계**
TDD는 자연스럽게 **의존성을 줄이고 모듈화된 설계**를 만들도록 유도했다.
테스트 가능한 코드를 작성하려면, 클래스와 메서드가 명확한 책임을 가져야 한다.

---

## TDD의 어려움

TDD를 처음 적용했을 때 몇 가지 어려움도 있었다:

### **1) 처음부터 모든 것을 TDD로 하기 어렵다**
모든 기능을 처음부터 TDD로 개발하는 것은 생각보다 쉽지 않았다. 특히, 기존 코드베이스에 TDD를 도입하려고 하면 어디서부터 시작해야 할지 막막한 경우가 많았다.

### **2) 테스트 작성 시간이 추가된다**
테스트를 먼저 작성하는 과정에서 개발 시간이 더 걸리는 것처럼 느껴졌다. 하지만 장기적으로는 디버깅 시간과 유지보수 비용을 줄여준다는 점에서 충분히 투자할 가치가 있다.

---

## TDD를 효과적으로 적용하는 방법

TDD를 효과적으로 활용하기 위해 아래와 같은 팁을 기억해두면 좋다:

### **1) 작은 단위부터 시작하라**
처음에는 간단한 유틸리티 함수나 서비스 계층 등 테스트가 용이한 부분부터 TDD를 적용해보자.
성공 경험을 쌓으며 TDD에 익숙해질 수 있다.

### **2) Mocking 도구를 활용하라**
Mockito와 같은 Mocking 도구를 사용하면 외부 의존성을 최소화하고, 독립적인 테스트를 작성할 수 있다.

### **3) 지속적인 연습**
TDD는 습관화가 중요하다. 테스트를 작성하고, 이를 통과시키는 과정을 반복하며 자연스럽게 몸에 익히자.

### **4) 테스트 커버리지를 무조건적으로 따르지 말라**
테스트 커버리지를 높이기 위해 불필요한 테스트를 작성하기보다는, 핵심 로직과 중요한 경로에 초점을 맞추는 것이 더 중요하다.

---

## 결론

TDD는 단순히 테스트를 작성하는 것을 넘어, **코드의 품질과 설계의 개선**을 목표로 한다.
비록 초기에는 익숙하지 않고 어려움을 겪을 수 있지만, 지속적으로 연습하고 적용하면 소프트웨어 개발의 효율성을 크게 높일 수 있을 것 같다.

0 comments on commit db67740

Please sign in to comment.