인프런 커뮤니티 질문&답변

Peachberry님의 프로필 이미지
Peachberry

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

Service Layer Test와 Service Layer 관련 질문입니다

작성

·

644

0

강의에 직접적인 연관이 있지는 않지만 궁금한 점이 생겨 질문드리게 되었습니다

1. Service Layer Test 관련 질문입니다

강의에서는 Service Layer를 @SpringBootTest 어노테이션을 통해서 단위 테스트 보다는 통합테스트에 가깝게 테스트가 진행되었습니다

통합테스트로 진행을 하면 DB에 직접 쿼리까지 날림으로써 확실히 이 코드가 제대로 작동한다는 것을 알 수 있습니다

하지만 단위 테스트로 진행할 경우 테스트하는 메서드 내부에서 사용된 메서드는 Mockito를 이용하여 동작을 기대값으로 설정함으로써 해당 메서드의 진짜 비즈니스 로직만의 맞고 틀림을 판별한다는 생각이 듭니다

그렇다면 Service Layer에 그렇다할 비즈니스 로직이 존재하지 않는 경우에는 통합테스트만 진행하고

비즈니스 로직이 존재한다면 단위테스트도 하고 통합테스트도 해야 하는지 궁금합니다

아니면 그렇다할 비즈니스 로직이 존재하지 않더라도 단위테스트를 작성해야 하는지 궁금합니다

2. Service Layer의 존재 유무 관련 질문입니다

만약 memberRepository 와 memberService라는 클래스가 존재하는데

memberService에서는

MemberService

public Member findById(Long id) {

       return memberRepository.findById(id);

}

이런식으로 memberRepository의 메서드를 그대로 실행만 하고 반환만 하는 상황이라면 바로 MemberRepository에 접근해서 가져와도 될것 같은데 MemberService Layer를 따로 만들어 줘야하는 지 궁금합니다

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Peachberry님

1. Service Layer Test 관련 질문입니다

먼저 단위 테스트로 각 단위기능이 잘 동작하는지 테스트 하는 목적으로 단위 테스트를 잘 작성해야 합니다. 그리고 전체적인 흐름이 잘 통합해서 잘 동작하는지 테스트 하는 것으로 통합 테스트를 하면 됩니다. 이 강의에서는 JPA의 기능 자체가 잘 동작하는지 보여주는 목적이 있어서 JPA와 DB까지 동작하는 통합 테스트를 위주로 작성했습니다.

그리고 테스트의 경우 실용적인 부분이 중요합니다. 테스트 커버리지 보다는 진짜 의미있는 테스트를 작성하는 것이 중요합니다. 저의 경우 비즈니스 의미가 있는 부분에 단위 테스트를 적용합니다.

2. Service Layer의 존재 유무 관련 질문입니다

이것은 아키텍처 스타일을 어떻게 가져가는가에 대한 부분입니다. 각각 장단점이 있습니다. 서비스 계층을 항상 거치게 하면 계층이 확실해지고, 진입점이 서비스가 되기 때문에 진입점을 관리하는 측면에서 편리합니다. 추가 기능이 필요하면 서비스만 변경하면 되겠지요. 하지만 막상 해보면, 예제로 보여주신 것 처럼 의미 없는 코드가 많이 나타납니다.

그래서 실용적인 관점에서 컨트롤러에서 리포지토리를 직접 호출하는 것도 좋은 방안입니다. 사실 더 중요한 것은 의존관계가 한 방향으로만 흐르도록 하는게 중요합니다. 예를 들어서 컨트롤러, 서비스에서 리포지토리를 호출하는 것은 괜찮지만, 리포지토리에서 서비스를 호출하는 것은 의존관계가 반대로 되기 때문에 순환 사이클이 나올 수 있습니다. 이것은 클래스 레벨 뿐만 아니라 패키지 레벨에서도 조심해야 합니다.

도움이 되셨길 바래요^^

Peachberry님의 프로필 이미지
Peachberry

작성한 질문수

질문하기