inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

제미니의 개발실무 - 커머스 백엔드 기본편

리뷰 - 코드 느끼기

서비스의 테스트에 관하여...

해결된 질문

181

고지훈

작성한 질문수 2

2

안녕하세요!

리뷰 쪽 강의를 듣다가 궁금한 점이 있어 질문드립니다.

강의에서는 findReviews를 제외하고 나머지 기능은 Implement Layer를 통해 각각 값을 전달하는 구조로 되어 있는 것 같습니다.

저도 코드 응집도를 높이기 위해 비슷한 구조를 사용 할때가 있는데 실제로는 ReviewService가 여러 작은 서비스에 위임하는 퍼사드 역할을 하게 되는 경우가 있습니다.

이런 퍼사드 서비스는 테스트를 어떻게 하는 것이 좋을지 고민입니다.

제가 생각하기에는,

1. 통합 테스트를 통해 전체 흐름을 검증하거나

2. 각 작은 서비스들을 목(Mock) 혹은 페이크로 대체하여 호출만 검증

하는 방법이 가능할 것 같은데 어느 방법이 더 적합한지 확신이 없어 질문드립니다.

kotlin spring-boot 도메인 dbms/rdbms backend 테스트

답변 1

2

제미니

안녕하세요 지훈님 질문 감사드립니다!
강의에 테스트 관련한 부분이 쫙 빠져있는데 테스트를 고민하신다니 아주 멋지시네요

저는 이 문제는 둘다 필요하다 가 정답이라고 생각합니다 🙂

다만, 그 전에 어떻게 테스트를 할 것인가 보다 먼저 테스트를 통해 뭘 검증하고 싶은가? 가 정의가 되어야한다고 봅니다

  • 만약 각 하위 도구들이 이미 통합 테스트가 탄탄히 되어있는 상태라서, 흐름을 검증하고 싶다면

    • 하위 도구들을 테스트 더블로 정의하고 ReviewService 는 흐름만 검증해도 된다고 봅니다

       

  • 그런데 각각 도구는 잘 동작할 것 같은데, ReviewService 가 위임할때 실제 데이터를 전달하고 전달하는 과정에 대해서 처리가 잘 되는지 상황이 불안해서 검증이 필요하다 느낄 수 있겠죠!

    • 이런 필요성이 느껴진다면 자연스럽게 ReviewService 의 통합테스트가 생성 될 것 같습니다

    • 이 과정에서 테스트 더블로만 동작하는 부분에서 누락되는 버그를 잡을 수도 있겠죠!

      • ex) 런타임 쿼리 실행 에러 라던가, 타입 캐스팅 버그라던가, 매핑 버그라던가 등등..

    • 또 도구별로 통합 테스트는 완벽했는데, 도구끼리 연결하니 버그가 난다던가요!

위의 관점으로 결국 검증해야하는 것을 먼저 정의하고 그에 따른 테스트를 꼼꼼히 만들어가는게 좋다고 생각합니다 🙂

(결국 하위 도구들 테스트가 정말 탄탄하고 촘촘하고 어떤 데이터를 input 받아도 버그가 없을 자신있다면 상위는 테스트 더블로 호출만 체크 할 수 있을것 같습니다)

또 기능별로 테스트의 규모가 차등 될 수도 있을 것 같습니다, 기능적으로 중요도가 덜 해서 검증이 덜해도 덜 불안한 기능들도 있을테니까요 (너무 바쁘다면... 다만 요즘은 AI가 있으니..!)


사실 저는 제가 배포 버튼을 누를때 불안하지 않은 수준을 유지하는게 굉장히 중요해서
그래서 가급적 두 종류 테스트 모두 만드는 편입니다 🤭

모쪼록 도움이 되셨길 바라며, 추가 질문이 있으시면 편히 주세요!
완강까지 힘내주시고 완강 후 수강평도 기대하겠습니다!

0

고지훈

빠른 답변 감사합니다!

제가 어느 하나를 선택해야하는 이분법적 생각에 조금 몰려 있었던것 같네요 너무감사합니다 ㅎㅎ 현재로써는 추가적인 질문은 없습니다 해당 답변으로 인해 조금더 궁금하던 부분들도 어느정도 채워진 것 같습니다. 감사합니다~!

궁금한점이 여러개 생겼습니다.

1

34

1

다양한 관점의 코드 경험을 위해 개선하지 않은 코드

1

53

1

histories() 응답에 PointHistory.id를 포함한 이유가 궁금합니다/

1

44

2

SettlementTargetRepository Jquery 질문

1

48

2

부가 기능을 이벤트 핸들러로 분리하는 기준이 있을까요?

1

60

2

엔티티의 pk 를 0으로 초기화하시는 이유가 있을까요??

1

67

2

제미니님 안녕하세요!

1

75

2

개념 간 격벽 분리와 목록 조회 시 발생하는 참조 구조

1

84

2

프로덕트와 프로덕트카테고리 사이의 삭제 정책

1

76

2

새로 개발한다면 구현 순서

1

135

1

의존 방향에 대한 고민

1

125

2

어드민(Back-office)에서 예약 변경 시, '할인 조건 재검증(쿠폰 회수)' vs '기존 혜택 유지' 중 어떤 정책이 일반적인가요?

1

97

2

OrderKeyGenerator 인스턴스화 generate() 질문

1

84

1

외부 API 통합 시 데이터 제어 범위 설계 질문

1

97

1

PG 결제 승인 로직

1

130

2

QnA에서 Join 필드 표현법

1

90

1

결제서비스 콜백 동시성문제 가능성

1

109

2

굿

1

109

1

도메인/엔티티 분리 상황에서 쓰기 작업 하는 방법

1

135

2

도메인 객체와 엔티티 객체 사용

1

139

2

CouponService 의존성 의문

1

98

2

상품 목록 조회 고도화 질문

1

112

2

표현 계층에서의 접근 지점이 다양해지는것과 이를 해결하기 위한 파사드의 도입에 대해 제미니님의 생각이 궁금합니다.

1

123

2

제품상세 코드 느끼기

1

144

2