서비스는 실제 비즈니스 로직을 작성하는 부분으로 작성할 서비스는 회원 등록 시 중복된 회원의 등록을 방지하는 부분과 회원 조회 부분이다.
우선 새로운 패키지와 클래스를 생성하고 사용할 변수를 설정해 준다.
회원가입
그림과 같이 중복된 이름이 있는지 findByName을 통해 확인하고 없다면 save를 통해 등록, 회원 id를 반환해 준다.
(join 메서드 안에서 조건문 수행해도 됨. extract method를 통해 함수화 할 수 있음)
만약 중복 회원이 있으면 에러 메세지를 출력해 준다.
회원 조회
전체 회원을 조회하기 위해서는 findAll을, id에 해당하는 회원을 조회하기 위해서는 findById를 사용하여 회원을 조회할 수 있도록 한다.
기존에는 회원 서비스가 메모리 회원 리포지토리를 직접 생성하게 했다.(MemberService class)
테스트코드에서는 서비스 변수와 리포지토리 변수를 사용할 예정인데, 기존의 방법으로는 서비스 변수 내부의 리포지토리와 사용할 리포지토리 변수가 서로 다르게 될 경우 문제가 될 수 있다. 따라서 같은 인스턴스를 사용하도록 다음과 같이 수정해 줘야 한다.
위의 과정을 통해 DI가 가능하도록 해 주었다.(DI는 의존관계를 외부에서 넣어주는 것을 의미하는데 다음 강의에서 배울 예정이다. 간단히는 앞서 말한 문제점을 해결해 주는 것이다.)
서비스 테스트
우선 그림과 같이 패키지 및 클래스를 생성해 주고, 사용할 변수들을 setting 해 준다. @BeforeEach는 각 테스트 실행 전에 호출되도록 해 주는 어노테이션으로 테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하고, 의존 관계도 새로 맺어준다.
join
회원가입에 대한 테스트 코드이다. 테스트 코드의 메서드들은 가독성을 좋게 하기 위해 한글로 메서드의 이름을 설정하기도 한다.
member 변수의 name을 set 해주고 join을 해 준 후 생성된 id에 해당하는 member와 새로 가입한 member의 name을 비교하는 코드이다.
validateDuplicateMember
회원 가입 시 중복된 회원이 있는지 검사하는 메서드에 대한 테스트 코드이다. 동일한 name의 member 변수 두개를 설정한 후 먼저 한 member를 join한다. 그 후 두번째 member가 join했을 때 나온 결과와 에러 메세지를 비교하는 코드이다.
마찬가지로 @AfterEach를 통해 메모리 데이터 베이스에 저장된 데이터들을 지워준다.
다음과 같이 잘 동작하는 것을 확인할 수 있다.
출처 : 인프런 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/lecture/49584?tab=curriculum&speed=1.25