Loopers

WIL – 1주차 (TDD & 테스트 가능한 구조)

그zi운아이 2025. 7. 17. 22:25

이번 주는 TDD에 대한 부정적인 시선에서 출발했지만, 직접 겪어보면서 생각이 많이 바뀐 시간이었다. 단순히 테스트를 먼저 짠다는 개념이 아니라, 테스트가 설계를 밀어내는 도구라는 걸 처음으로 체감했다.

특히 도메인 로직을 순수하게 유지하면 테스트가 자연스럽게 따라온다는 걸 경험했고, 반대로 설계가 엉키면 테스트도 어렵다는 걸 몸으로 느꼈다. 단위 테스트만 잘 짜면 되는 줄 알았는데, 테스트 가능한 구조 자체를 만드는 게 본질이라는 걸 배웠다.


이번 주에 새로 배운 것

  • 테스트는 단순한 검증 수단이 아니라 설계를 유도하는 도구라는 사실
  • 도메인 모델을 정제하면 테스트 흐름도 깔끔해진다
  • JPA Entity와 도메인 객체를 분리하고, Validation 책임을 도메인 계층으로 옮기는 실험
  • FK 없이 연관관계를 관리하며 의도적으로 책임을 코드에 분산시키는 설계 실험
  • 패키지를 domain, application, interfaces로 나눠서 확장성과 테스트 용이성 확보
  • 도메인 중심 설계 + 유즈케이스 분리는 생각보다 단순했고, 오히려 코드 흐름이 더 깔끔해졌다

이번 주에 했던 고민들

  • 테스트를 언제 짜야 할지, 테스트 먼저 vs 구현 먼저 사이에서 계속 흔들렸다
  • Green 만들기 위해 repository나 entity까지 한 번에 작성하다보니 기능 단위 커밋이 무거워졌다
  • 처음엔 모든 클래스를 한 패키지에 몰아넣었지만, 유지보수가 너무 힘들어져서 패키지 분리 리팩토링 진행
  • 단순한 흐름이지만 Facade를 도입할지 말지 고민했고, 결국 도입함으로써 의도 분리가 더 쉬워졌다
  • Entity에 Validation을 둘지, 도메인에서 처리할지 고민하다가 도메인에 위치시키는 방향으로 정리
  • 테스트 경험 부족으로 mock, stub, fake의 구분이 애매했고, 단위 테스트 vs 유즈케이스 테스트 경계도 명확하지 않았다
  • 전체적으로 "이게 맞나?" 싶은 순간이 많았지만, 결국 기술보다는 경계와 책임의 명확함이 우선이라는 기준이 생겼다

이번 주의 설계 구조 핵심 (소위, ‘핵사고날 아키텍처’)

  • Application Service는 흐름만 제어하고, 진짜 로직은 Domain Model에 집중시켰다
  • Controller는 외부 요청만 받고, 모든 의사결정은 도메인 모델이 하도록 구성
  • 도메인은 행위 중심(charge, deduct)으로 구성했고, Value Object도 적극 활용했다
  • 모든 계층은 인터페이스 중심으로 설계했고, 기술 종속 없이 유연한 구조를 만들려고 했다
  • FK는 걸지 않고, 연관관계는 ID로 관리. Index도 없이, 오직 코드 책임으로만 연관성 유지 시도
  • 실무에서 쓰기엔 위험할 수 있지만, 실험적 사고를 훈련하기엔 의미 있는 접근이었다

다음 주에 해보고 싶은 것

  • 테스트와 구현을 병렬적으로 짜는 TDD 리듬을 훈련하고 싶다
  • 도메인 테스트부터 설계하고, 흐름을 Application, Infra로 확장하는 설계 습관 만들기
  • 테스트 커버리지를 늘리고, 실패 시나리오나 예외 케이스 테스트도 함께 고려하기
  • 실무에서 FK를 생략할 수 있는 현실적인 기준이나 리스크 대응 전략 정리해보기

😔 아쉬웠던 점 & 느낀 변화

이번 주는 구현에 너무 중점을 뒀던 한 주였다.
WIL을 쓴다고 하면서도, 사실상 블로그처럼 결과만 정리하려고 했고,
무엇을 고민했고, 어떤 흐름을 겪었는지 진짜 학습 기록은 제대로 남기지 못한 것 같다.

매일매일 시간에 쫓기듯 공부하고 구현하느라
하루 끝에 정리하거나 돌아볼 여유가 거의 없었고,
결국 1주차 WIL은 내가 생각한 만큼 잘 쓰지 못했다.

또 하나 느낀 건,
설계에 너무 시간을 쓰다 보면 정작 구현을 못하고 끝나는 상황도 생긴다는 거다.
짧더라도 빠르게 구현해보고, 리팩토링을 통해 개선해 나가는 흐름
오히려 더 실용적이고, 결과적으로 더 좋은 코드를 만들 수 있다는 걸 이번에 많이 느꼈다.

앞으로는 하루에 10분이라도 좋으니
공부한 것, 고민한 것들을 기록하고 정리하는 루틴을 만들고 싶다.
그래야 진짜 내 스택이 쌓이고, 다음 선택도 더 나아질 수 있을 것 같다.