이번 주는 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분이라도 좋으니
공부한 것, 고민한 것들을 기록하고 정리하는 루틴을 만들고 싶다.
그래야 진짜 내 스택이 쌓이고, 다음 선택도 더 나아질 수 있을 것 같다.
'Loopers' 카테고리의 다른 글
동시성 제어, 도메인 분리를 삼킨 괴물 (4) | 2025.08.08 |
---|---|
설계는 정답이 없다고 했지만, 그래도 너무 어렵잖아 (3) | 2025.08.01 |
Loopers WIL – 2주차 (0) | 2025.07.24 |
Loopers요구사항 정의서 없이 만드는 개발은 결국 돌고 돌아 제자리로 돌아온다 (0) | 2025.07.24 |
TDD, 꼭 해야 해? (1) | 2025.07.17 |