-
스프링 부트 - 회원 관리 예제 실습(회원 서비스 개발)Spring Framework 2022. 2. 13. 00:01
이전 시간에는 회원 도메인과 리포지토리를 생성했습니다.
오늘은 회원 도메인과 리포지토리를 기반으로 회원 서비스를 개발해보겠습니다.
클래스 의존관계
MemberService는 MemberRepository에 의존적이기 때문에 MemberRepository를 사용해야 합니다.
1. hello.hellospring.service 패키지 생성
2. hello.hellospring.service 패키지에 MemberService.java 파일 생성 및 코드 작성
package hello.hellospring.service; import java.util.List; import java.util.Optional; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import hello.hellospring.repository.MemoryMemberRepository; public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); public Long join(Member member) { //같은 이름이 있는 중복 회원x vaildateDuplicateMember(member); memberRepository.save(member); return member.getId(); } public List<Member> findMembers(){ return memberRepository.findAll(); } public Optional<Member> findOne(Long memberId){ return memberRepository.findById(memberId); } private void vaildateDuplicateMember(Member member) { memberRepository.findByName(member.getName()) .ifPresent(m -> { throw new IllegalStateException("이미 존재하는 회원입니다."); }); } }
회원가입을 구현하는 join 메서드에서는 단순하게 memberRepository의 save 메서드를 통해 member를 저장합니다.
하지만 여기에 추가적으로 구현해야 할 것이 있습니다.
비즈니스 로직중에서 회원의 이름은 중복으로 허용하지 않는다는 조건이 있었기 때문에 이를 구현해야 합니다.
따라서 memberRepository의 findByName 메서드를 통해 member의 이름과 비교하게 된다면 결과가 Optional <Member>로 반환되게 됩니다.
따라서 ifPresent 메서드를 통해 만약 존재한다면 에러를 던집니다.
그리고 이를 vaildateDuplicateMember() 메서드로 함수화시킵니다.
따라서 중복회원을 검증하고 통과한다면 멤버를 저장소에 저장합니다.
findMembers 메서드는 단순하게 memberRepository의 findAll 메서드를 반환합니다.
findAll 메서드의 경우 반환 타입이 List <Member>입니다.
findOne 메서드의 경우에도 단순히 memberRepository의 findById 메서드를 반환합니다.
findById 메서드의 경우 반환 타입이 Optional <Member>입니다.
이제 중복 회원 검증이 잘 되는지 또는 회원가입들이 잘 되는지 확인하기 위해서는 다시 테스트 케이스를 작성해야 합니다.
테스트 코드 카테고리에서 다시 작성해 보도록 하겠습니다.
출처
'Spring Framework' 카테고리의 다른 글
스프링 부트 - 회원 관리 예제 실습 (컴포넌트 스캔과 자동 의존관계 설정) (0) 2022.03.23 [Error] Using tabs can lead to unpredictable result (0) 2022.03.04 스프링 부트 - 회원 관리 예제 실습(회원 도메인과 리포지토리 생성) (0) 2022.01.26 Thymeleaf란? ( + Thymeleaf 사용법, 문법 맛보기) (0) 2022.01.13 ThymeLeaf vs Mustache vs Groovy vs FreeMarker (0) 2022.01.12