SPRING 입문 [ 코드로 배우는 스프링 부트 ]

[스프링 입문] 섹션 3.4 회원 관리 예제 (회원 서비스 개발)

wlalsu_u 2023. 1. 10. 00:12

3.4.1  회원 서비스 클래스

 

 

회원 서비스는 repository 와 domain 을 활용하여, 
실제 비즈니스 로직을 만든다.

 

 

 

 

회원 서비스 클래스를 만들어보자.

 

 

src  >  main  >  java  에 service 패키지를 만든다.

service 패키지에 MemberService 클래스를 만든다.

 

 

 

 

0) 회원 Repository 생성

 

 

 

먼저, 회원 서비스를 만들기 위한 ' 회원 repository ' 가 필요하다.

 

 

private final MemberRepository memberRepository;

public MemberService(MemberRepository memberRepository){

    this.memberRepository = memberRepository;
    
}

 

 

 

 

1) 회원가입 ( 중복 회원 검증)

 

 

 

같은 이름이 있는 회원은, 회원 가입이 불가한 비즈니스 로직을 추가하였다. 

 

다음과 같이 validateDuplicateMember() 메소드를 사용하여 구현하였다.

 

 

 

 

private void validateDuplicateMember(Member member){

    memberRepository.findByName(member.getName())
    
                    .ifPresent(m -> {
                    
                        throw new IllegalStateException("이미 존재하는 회원입니다.");
                        
                    });
}

 

 

 

 

1) memberRepository 의 name 을 찾기 ( findByName)

 

2) ifPresent : name 의 값이 null 이 아니면 아래의 logic 이 동작함

     ( = 이미 존재하는 회원이 있는 경우)

 

: findByName 의 결과가 Optional 멤버이므로 , Optional 메소드 (ifPresent) 를 사용할 수 있다. 

 

 

3) throw new IllegalStateException : name 이 있는 경우, 이미 존재한다고 표시함

 

 

 

 

 

 

public Long join(Member member) {

    // 같은 이름의 중복 회원 X
    validateDuplicateMember(member); // 중복 회원 검증
    
    memberRepository.save(member);
    return member.getId();
    
}

 

 

 

 

1) validateDuplicateMember : 회원 이름 중복 체크

 

2) 중복된 이름이 없으면, repository 에 save

 

3) id 값 반환하기

 

 

 

 

 

2) 전체 회원 조회 기능

 

 

 

public List<Member> findMembers(){
    return memberRepository.findAll();
}

 

 

memberRepository 클래스에서 작성한 findAll() 메소드를 활용하여, 간단하게 구현 가능하다.

 

 

 

 

 


 

 

 

MemberService.java  전체 코드는 다음과 같다.

 

 

 

package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;

import java.util.List;
import java.util.Optional;

public class MemberService {

    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository){
        this.memberRepository = memberRepository;
    }

    public Long join(Member member) {
        // 같은 이름의 중복 회원 X
        validateDuplicateMember(member); // 중복 회원 검증
        memberRepository.save(member);
        return member.getId();
    }

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

    public List<Member> findMembers(){
        return memberRepository.findAll();
    }

    public Optional<Member> findOne(Long memberId) {
        return memberRepository.findById(memberId);
    }
}

 

 

 

 

 

 

김영한 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 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/dashboard