1주차 과제는 TDD이다. 간단한 요구사항이 주어지고 TDD를 이용해 구현하는 것이다.
TDD에 대한 학습은 그 전에도 한 적이 있어 무리없이 진행할 수 있었다.
과제 진행
과제는 기능의 Todo가 적힌 Controller와 메모리 DB(HashMap)을 활용한 샘플코드가 주어져있다.
아래와 같은 방식으로 개발을 진행하였다.
1. 간단한 시나리오를 작성한다.
2. Controller 부터 개발을 시작한다. 시나리오 기반으로 Controller의 Request, Response을 정한다.
3. Controller에서 사용할 Service를 구현하며, 기능 메서드를 작성한다.
3-1. 여기서 부터 TDD 사이클을 적용한다.
3-2. 주로 성공 케이스를 생각하며 간단한 테스트가 통과하게 테스트 로직을 작성하고 그에 따라 본 기능을 적용한다.
3-3. 성공 케이스가 완성되면 실패 케이스를 생각하여 테스트 코드를 작성하고 로직에 살을 붙여나간다.
3-4. 이런 순서로 진행하면 성공 케이스가 깨지는 이슈가 발생되어 성공 로직을 다시 보강하여 작성하여 구현을 끝낸다.
4. 여기서 중요한 것이 서비스 로직 구현에서 만들어진 객체의 기능들을 바로바로 테스트를 작성해서 구현한다.
5. 그러면 최종적으로 Controller를 제외한 모든 단위 테스트가 이루어지게 된다.
개인적으로 Controller 테스트 작성을 좀 귀찮게 생각해 구현이 완료된 후 성공 케이스와 Validation 검증을 이 때 진행한다.
과제 중 이슈
사실 로직 자체는 너무 간단해 로직 구현에 대한 고민은 하지 않았다.
하지만 테스트 코드에서의 용어나 작성 순서, 이런 것들에 대한 의문과 학습이 부족한 부분이 있었던 것 같다.
가장 큰 이슈는 통합테스트이다. 통합테스트라고 하면 전체 테스트라고 생각할 수 있지만 기본적으로 한 레이어 계층을 테스트하는 단위 테스트와 달리 한 개 이상의 단위테스트를 진행하면 통합테스트라고 한다.
나는 그 전에 들었던 강의에서 Service를 통합테스트로 두고 진행하여 주로 그런 방식을 추구하였다.
@SpringBootTest 어노테이션을 활용해 DB까지 찍어 실제 데이터를 활용하는 방법이었다. 하지만 전 부트캠프 포함, 이번 항해플러스 멘토링에서 주로 도메인 부분은 단위 테스트로 작성하는 것을 더 선호하는 방식이었던 것 같다.
아무래도 객체지향적인 코드를 작성하다 보면 객체 단위(도메인 위주 개발)로 기능구현이 이루어지기 때문에 Service 단에 생각보다 비즈니스 로직이 존재하지 않는 경우가 많다. 그렇다보니 도메인 단위 테스트를 잘하면 Service를 굳이 통합테스트 개념으로 진행할 필요가 없어진다.
그럼 통합 테스트는 언제 진행?
기존의 방식대로 하면 Serviece의 모든 로직을 컨테이너를 띄우는 방식으로 작성이 된다. 그리고 DB를 직접 타기때문에 속도에 대한 이슈는 더욱 커질 수 밖에 없다.
항해플러스 멘토님들은 주로 통합테스트는 동시성 이슈나 Repository의 쿼리가 너무 복잡하여 검증이 필요할 때 주로 진행한다고 한다.
이런 방식을 활용하면 단위테스트에 더욱 집중하게 된다. 그럼 로직 자체를 구현할 때 좀 더 객체지향 적인 코드 구현에 대해 고민이 할 수 있고 리펙토링도 자연스럽게 이루어지게 된다.
Mock, Stup
아직도 두 개념이 많이 헷갈린다. 나는 주로 Mockito를 활용하여 테스트 코드를 주로 작성하는 멘토님들과 여러 블로그를 작아보니 FakeRepository 같은 것을 구현하여 로직을 많이 작성하고 권장된다고 한다.
아무래도 저런식으로 구현하면 어노테이션이나 라이브러리 의존하지 않고 개발이 가능해진다. 여태까지 주로 Mokito를 활용하여 테스트 코드를 작성해서 그런지 생각보다 구현이 쉽지는 않았다. 많은 연습이 필요할 것 같다는 생각을 하게 되었던 것 같다.
학습 키워드
#통합테스트, E2E 테스트, 단위테스트
# Mock, Stup, Fake 등 용어 및 활용
# 객체지향적인 코드
# 동시성 제어 방법
'프로젝트&부트캠프 > 향해 플러스 백엔드 4기' 카테고리의 다른 글
[항해 플러스 4기] 3주차 후기 및 학습 키워드 (0) | 2024.04.08 |
---|---|
[항해 플러스 4기] 2주차 후기 및 학습 키워드 (1) | 2024.04.02 |
[항해플러스] 1주차 시작하는 마음 (0) | 2024.03.16 |