반응형
✔ 회원 서비스 개발
- hello.hellospring > service > MemberService
- 회원가입기능
package hello.hellospring.service;
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) {
// 회원가입 시, 같은 이름이 있는 중복 회원은 안 된다.
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
memberRepository.save(member);
return member.getId();
}
}
회원가입은 save로 해줄 수 있지만, 그 전에 생각해야 할 것이 중복된 이름이 있을 때는 회원가입이 되면 안 되는 것이다.
그래서 memberRepository에서 회원가입을 시도하려는 이름을 찾은 뒤, 같은 이름이 있으면 IllegalStateException에 "이미 존재하는 회원입니다." 를 넣는다.
근데! 이런 경우에는 메서드를 따로 뽑는 게 좋다.
Ctrl + Alt + m 을 누르면 (맥은 command + option + m)
이렇게 따로 떨어져 나온다. 이름은 extracted 에서 validateDuplicateMember 로 바꾼다.
- 회원 조회 기능
// 전체 회원을 조회하는 기능
public List<Member> findMembers() {
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId) {
return memberRepository.findById(memberId);
}
✔ 회원 서비스 테스트
테스트를 하려는 클래스에서 (여기선 MemberService) Ctrl + shift + t 를 누르면 (맥은 Command + shift + t) 바로 테스트를 생성할 수 있다.
모두 체크하고 확인버튼을 누르면 된다. 그럼 테스트의 뼈대가 자동으로 작성된다.
@Test
void 회원가입() {
// given : 테스트하는 것에 익숙하지 않으면 이 방법을 권장한다.
Member member = new Member();
member.setName("hello");
// when
Long saveId = memberService.join(member);
// then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
join 테스트다. 테스트는 그냥 한국어 적어도 된다. 그래서 회원가입으로 적어줬다.
회원가입에서는 save되는 것도 중요하지만 중복된 이름이 있는 지 확인하는 것도 중요하다.
@Test
public void 중복_회원_예외() {
// given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring"); // member1 과 이름이 같음
// when
memberService.join(member1);
try {
memberService.join(member2);
fail(); // 위 줄에서 그 다음줄로 실행되면 실패 (중복이니까)
} catch (IllegalStateException e) {
// 여기로 오면 예외가 터진 거기 때문에 정상적으로 성공한 거임
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
// then
}
중복 회원 테스트도 만들어준다. 저렇게 하면
성공한다. 근데 저 메세지를
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.123123");
이렇게 바꿔버리면
이런 에러가 떠 버린다.
private void validateDuplicateMember (Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
MemberService 의 이 부분과 같지 않아서 그렇다. 아마도
아 솔직히 진짜 뭔말인지 알 수 없다 다음에 다시 듣겠다
반응형
'Back > Spring' 카테고리의 다른 글
[Spring/Security] 구글 로그인 준비 (6) | 2023.06.23 |
---|---|
[Spring] 스프링 AOP - 포인트컷 / 포인트컷 지시자의 종류 / execution / @target / @within (0) | 2023.05.25 |
[Spring] 예제 프로젝트 만들기 - 상품 주문 프로세스 (2) | 2023.05.22 |
[Spring] 회원 관리 (1) - repository / Test case (0) | 2023.04.28 |
[Spring] 스프링 웹 개발 기초 (0) | 2023.04.27 |