PromleeBlog
sitemap
aboutMe

posting thumbnail
TDD 개요와 Spring Boot에서의 활용 - Spring Boot로 시작하는 TDD 1편
Intro to TDD and Usage in Spring Boot - TDD with Spring Boot Part 1

📅

🚀

들어가기 전에 🔗

안녕하세요.
오늘부터 우리는
Spring Boot로 시작하는 TDD
라는 프로젝트를 시작하려고 합니다.
개발 공부를 하다 보면 TDD라는 단어를 정말 많이 듣게 됩니다.
하지만 막상 시작하려니 어렵게 느껴지거나, 바쁜 프로젝트 일정 때문에 뒤로 미루게 되는 경우가 많습니다.

이 시리즈는 마치 레고 블록을 하나씩 조립하듯, 아주 기초적인 개념부터 실무에서 사용하는 방법까지 차근차근 다룰 예정입니다.
어려운 용어는 최대한 쉽게 풀어서 설명할 테니 걱정하지 않으셔도 됩니다.
그럼, 첫 번째 시간인 오늘은 TDD가 도대체 무엇인지, 그리고 우리가 왜 이것을 배워야 하는지에 대해 알아보겠습니다.
TDD 여정의 시작
TDD 여정의 시작

🚀

TDD의 기본 개념 🔗

TDD는
Test Driven Development
의 약자로, 우리말로는
테스트 주도 개발
이라고 부릅니다.
이름 그대로 테스트가 개발을 이끌어 나가는 방식을 말합니다.

우리가 보통 코드를 작성하는 순서를 한번 떠올려볼까요?

보통은 이렇게 개발을 합니다.
하지만 TDD는 이 순서를 완전히 뒤집습니다.


쉽게 예를 들어보겠습니다.
우리가 학교에서 시험을 칠 때를 생각해보세요.
보통은 교과서 내용을 다 공부하고 나서 시험 문제를 풉니다.
그런데 만약 선생님이
시험 문제를 먼저 알려주고
공부를 하라고 한다면 어떨까요?
우리는 정답을 맞히기 위해 필요한 내용만 쏙쏙 골라서 효율적으로 공부할 수 있을 것입니다.

TDD가 바로 이것과 같습니다.
우리가 만들 기능(시험 문제)을 먼저 코드로 정의해두고, 그 기능을 통과하기 위한 실제 코드(답안)를 작성하는 것입니다.

왜 순서를 바꿀까요? 🔗

순서를 바꾸면 다음과 같은 장점이 생깁니다.

🚀

Red-Green-Refactor 흐름 🔗

TDD를 이야기할 때 절대 빠지지 않는 것이 바로
Red-Green-Refactor
사이클입니다.
이것은 신호등과 비슷해서 기억하기 쉽습니다.
이 흐름은 TDD의 핵심 엔진과도 같으니 꼭 기억해야 합니다.
Red-Green-Refactor 흐름
Red-Green-Refactor 흐름

1. Red (실패하는 테스트 작성) 🔗

가장 먼저 실패하는 테스트 코드를 작성합니다.
아직 기능을 구현하지 않았으니 당연히 테스트는 실패합니다.
이때 테스트 도구(JUnit 등)에서는 보통 빨간색 경고등을 보여줍니다.
그래서
Red
단계라고 부릅니다.

예를 들어, 덧셈 계산기를 만든다고 가정해봅시다.
우리는 아직 계산기 코드를 한 줄도 짜지 않았지만, 테스트 코드에 이렇게 적습니다.
// 테스트 코드 (가상의 코드입니다)
@Test
void 더하기_테스트() {
    Calculator calculator = new Calculator();
    int result = calculator.add(2, 3);
    
    // 결과가 5여야 한다고 주장합니다.
    assertThat(result).isEqualTo(5); 
}
이 코드를 실행하면 당연히 에러가 납니다.
Calculator 클래스도 없고, add 메서드도 없기 때문입니다.
이것이 바로 의도된 실패, Red 단계입니다.

2. Green (테스트 통과) 🔗

이제 빨간 불을 초록 불로 바꿔야 합니다.
이 단계의 목표는
어떻게든 테스트를 통과시키는 것
입니다.
코드가 예쁘지 않아도 되고, 꼼수를 써도 됩니다.
오로지 테스트를 통과하는 것에만 집중합니다.
class Calculator {
    public int add(int a, int b) {
        return 5; // 무조건 5를 반환합니다.
    }
}
조금 황당해 보일 수 있습니다.
2와 3을 더하라고 했는데 그냥 5를 리턴해버렸으니까요.
하지만 테스트 코드는 add(2, 3)의 결과가 5인지 확인하고 있으므로, 이 테스트는 통과합니다.
화면에 초록색 불이 들어옵니다.
이것이
Green
단계입니다.

여기서 알고리즘 문제 풀이와 연결해 생각해볼 수 있습니다.
우리가 어려운 알고리즘 문제를 만났을 때, 처음부터 완벽한 O(N) 해결책을 찾으려 하면 막막할 때가 많습니다.
그럴 때 일단 시간 복잡도가 높더라도(Brute Force), 정답을 맞히는 코드를 먼저 작성하죠?
TDD의 Green 단계도 이와 비슷합니다.
일단은 정답을 맞히는 최소한의 구현에 집중하는 것입니다.

3. Refactor (리팩토링) 🔗

초록 불을 봤으니 이제 안심하고 코드를 다듬을 차례입니다.
아까 작성한 return 5;는 정답이긴 하지만 좋은 코드는 아닙니다.
만약 add(3, 4)를 테스트하면 틀릴 테니까요.
이제 진짜 로직을 구현하고, 코드의 구조를 개선합니다.
class Calculator {
    public int add(int a, int b) {
        return a + b; // 진짜 덧셈 로직으로 변경
    }
}
코드를 수정한 뒤 다시 테스트를 돌려봅니다.
여전히 초록 불이라면 리팩토링은 성공입니다.
중복된 코드를 제거하거나, 변수 이름을 더 명확하게 바꾸는 작업도 이 단계에서 합니다.

🚀

개발 환경 준비에 대해 🔗

본격적인 실습에 앞서 환경 이야기를 잠깐 하겠습니다.
이 시리즈는
Mac OS
를 기준으로 설명합니다.
하지만 Windows나 Linux를 사용하셔도 전혀 문제없습니다.

Java와 IntelliJ IDEA(또는 Eclipse)만 설치되어 있다면 운영체제와 상관없이 동일하게 따라 하실 수 있습니다.
단, 단축키는 운영체제마다 조금씩 다를 수 있습니다.

예를 들어 테스트를 실행하는 단축키의 경우, Mac에서는 Ctrl + Shift + R을 많이 쓰지만 Windows에서는 Ctrl + Shift + F10을 주로 사용합니다.
이런 차이점은 나오게 되면 그때그때 짚어드리겠습니다.

🚀

결론 🔗

오늘은 TDD의 기본 개념과 Spring Boot에서 TDD가 왜 필요한지에 대해 알아보았습니다.
요약하자면 다음과 같습니다.


처음에는 테스트 코드를 먼저 짜는 것이 어색하고 시간이 더 걸리는 것처럼 느껴질 수 있습니다.
하지만 익숙해지면 보조 바퀴 없이 씽씽 달리는 자전거처럼, 개발 속도와 품질이 비약적으로 향상되는 것을 경험하게 되실 겁니다.

다음 시간에는 실제 프로젝트를 생성하고 테스트 환경을 설정해보겠습니다.
JUnit 5와 AssertJ 같은 도구들과 친해지는 시간이 될 것입니다.

읽어주셔서 감사합니다.

참고 🔗