[Spring] 회원 서비스 개발해보기

Haeun Noh·2023년 8월 15일
1

TweeksStudy:1 (Spring)

목록 보기
10/13
post-thumbnail

0815


  • Service : repository와 domain을 활용하여 실제 비즈니스 로직을 작성한다.

1. 회원 가입 만들기

  • 비즈니스 로직에서 같은 이름이 있는 중복회원은 안된다는 조건
    public Long join(Member member) {

        // 같은 이름이 있는 중복 회원x
        Optional<Member> result = memberRepository.findByName(member.getName());
        result.ifPresent(m -> {
            throw new IllegalStateException("이미 존재하는 이름입니다.");  
        });

        memberRepository.save(member);
        return member.getId();
    }
  • Optional 안에 Member 객체가 있다.
  • ifPresent : 값이 있으면

위의 코드는

    public Long join(Member member) {

        // 같은 이름이 있는 중복 회원x
        memberRepository.findByName(member.getName()).ifPresent(m -> {
            throw new IllegalStateException("이미 존재하는 이름입니다.");
        });

        memberRepository.save(member);
        return member.getId();
    }

로 간결하게 바꿀 수 있다.

이렇게는 하나의 로직이 나오는데 이럴 때는 메서드로 만들어주는 게 좋다.

    public Long join(Member member) {
        validateDuplicateMember(member);// 중복 회원 검증
        memberRepository.save(member);
        return member.getId();
    }

    private void validateDuplicateMember(Member member) {
        memberRepository.findByName(member.getName()).ifPresent(m -> {
            throw new IllegalStateException("이미 존재하는 이름입니다.");
        });
    }

쨔란~


2. 전체 회원 조회와 한 개의 회원 아이디 가져오기

    // 전체 회원 조회
    public List<Member> findMembers() {
        return memberRepository.findAll();
    }

    // 한 개의 회원 아이디 가져오기
    public Optional<Member> findOne(Long memberId) {
        return memberRepository.findById(memberId);
    }

3. 리포지토리와 서비스 클래스

  • 리포지토리는 단순히 데이터를 넣고 빼는 느낌이 강함.

  • 서비스 클래스는 비즈니스 네이밍이 강함

  • 서비스 클래스는 비즈니스에 가까운 용어를 써야 함

    • 클라이언트의 요구에 따라 해당 메서드를 볼 수 있는 매칭이 되기 때문
    • 서비스는 비즈니스 의존적
  • 리포지토리는 기계적으로 용어를 선택함

    • 단순히 데이터를 넣고 빼는 것이 리포지토리의 역할이기 때문이다.


profile
Tistory로 옮기게 되었습니다. @haeunnohh

0개의 댓글