소프트웨어 설계는 어디서 시작하느냐에 따라 모습이 달라진다. DB부터 설계하면 안정적이지만 유연성이 떨어지고, 인터페이스부터 잡으면 클라이언트 가치와 비즈니스 로직을 더 풍부하게 담을 수 있다. TDD는 여기에 테스트 시나리오를 더해 요구사항 충족에 집중한다. 코드가 먼저 나오고 DB가 뒤따르더라도 자연스러운 흐름이니, 중요한 건 어떤 방식을 쓰든 요구사항을 제대로 풀어내는 것이다.
일반적인 애플리케이션의 구조를 살펴보자.
이 상태에서 요구사항이 주어졌다면 아래와 같은 흐름으로 작업이 진행된다.
위 설계의 특징을 정리하면 아래와 같다.
이번에는 인터페이스에서부터 시작하는 설계의 흐름을 알아보자. 똑같은 애플리케이션 구조이다. 이번에도 마찬가지로 요구사항이 주어진다.
만약 DB 설계 변경 없이도 기능을 구현할 수 있다면 3단계는 진행하지 않아도 좋다!
인터페이스에서 시작하는 설계의 특징을 정리하면 아래와 같다.
마지막으로 TDD 설계 과정 흐름을 알아보자. 마찬가지로 요구사항이 주어진다.
(mermaid의 한계상 구조가 다르게 보이겠지만) 인터페이스에서 시작하는 설계 흐름과 유사한 부분이 많다. 이런 흐름에서 DB는 테스트 시나리오 구현을 위해 사용되는 도구이다. 그렇기 때문에 테스트 시나리오를 구현하는 과정에서 데이터베이스 설계가 필요하지 않다면 고려하지 않는다.
이런 이유로 DB에서 시작하는 설계를 주로 경험했다면 코드가 작성되고 있는데 테이블이 설계되지 않은 상황이 어색할 수 있다. 하지만 걱정할 필요 없다. 뭐라도 불안한 감정이 생긴다면 테스트 시나리오에 빠진 경우가 있나 검토만 하면 된다.
TDD의 목적은 요구사항의 충족이다. 테스트 시나리오를 충분히 준비했다면 자연스럽게 목적을 달성할 수 있다. 만약 요구사항을 충족시키는데 DB가 전혀 필요하지 않다면 굳이 사용할 필요 없다.