본문 바로가기
📝 회고/✅ 22년 회고

[일일 회고] 22.03.07 ~ 03.09 - 웹 개발에서 TDD와 테스트 코드

by kukim 2022. 3. 9.

📚 배운 것

월요일 (03.07)

- 김영한님 스프링 코어 강의 7강 수강 (소스코드)

- 프로젝트 스프링 카페 Step1 완료, PR (소스코드 , PR)

- 호눅스의 그룹 리뷰

- 저번 주 주간회고 작성

- 자바 옵셔널 공부

 

화요일 (03.08)

- 프로젝트 스프링 카페 1단계 PR 리뷰 확인 & 적용

- 프로젝트 스프링 카페 2단계 요구사항과 설계

- 김영한님 스프링 코어 강의 8 ~ 10강 완강 (소스코드)

- 김영한님 실전 스프링 부트 & JPA 1 강의 0~1강 (소스코드)

 

수요일 (03.09)

- 프로젝트 스프링 카페 2단계 구현 (30%)

- 테스트 코드 공부 (Test Double, ATDD)

- 그룹 리뷰

- 일일 회고 작성


🤔 생각

웹 개발에서 TDD

이전 프로젝트들(사다리 게임, 로또 게임)에서 켄트 백의 TDD 방법을 적용했다. 바텀업 방식으로 아래부터 위로 테스트 코드, 기능 코드 구현과 리팩토링을 함께 진행할 수 있었다. 테스트의 목표, 행동은 보통 알고리즘이었다. 예를 들어 '만약 A라는 사다리가 주어진다면 게임 결과 B다.' 또는 '로또 번호는 6개의 중복되지 않은 1부터 45의 숫자이다' 의 행동을 검증하는 것이었다. 해당 메서드에 대한 상태 검증이 대부분이고 한 눈에 보였다.

웹개발(스프링 MVC)에도 앞에서 연습했던 TDD를 적용하려 했다. 가장 밑단의 리포지토리 -> 서비스 -> 컨트롤러 순서대로 테스트 코드를 작성하며 구현했다. 하지만 문제가 있었다. 웹 개발 테스트의 목표 행동은 컨트롤러 -> 서비스 -> 리포지토리로 탑다운 방식의 행동을 테스트해야 했다. 예를 들어 "클라이언트의 POST /user/create 요청에 따라 유저를 생성한다."를 바텀업 방식으로 TDD를 하려니 처음에 무엇을 해야 할지 감이 오지 않았다. 그래서 이걸 바텀업으로 어디서부터 해야하는거지? 

예전 책 '단위 테스트'에서 TDD의 두 학파 (시카고 스쿨 vs 런던 스쿨)를 본 기억을 가지고 검색한 결과 런던 스쿨의 탑다운 방식의 TDD 방법론을 알게 되었다. 켄트 백의 TDD는 시카고 스쿨로 inside-out, 바텀업 방식이라면 런던 스쿨의 탑다운 TDD는 outside-in으로 구현된다. 결론적으로 탑다운 방식의 ATDD 테스트 하나를 만들고 이를 통과시키기 위해 캔트 백의 TDD나 의존성 주입이 필요한 부분은 stub, mock으로 대체하고 있다. 삽질을 계속 해야겠다.

댓글