스프링 예제 - 회원 도메인
인프런 스프링 핵심 원리 - 기본편 수강 중
프로젝트 설정
- 스프링 부트 스타터에서 프로젝트 생성
- Project: Gradle Project
- Spring Boot: 2.7.0
- Group: hello
- Packaging: Jar
- Java: 11
- Dependencies: 선택하지 않음
Gradle 라이브러리를 변경할 시에는 코끼리 버튼 또는 우측 Gradle 창에서 Releoad 해주어야 함
비즈니스 요구사항 설계
- 회원
- 기능: 회원 가입, 조회
- 등급: 일반, VIP
- 데이터 레포지터리는 미정
회원 도메인 설계
회원 도메인 협력 관계
- 미확정이기 때문에 회원 저장소 별도 인터페이스 구축
- 우선 임시 개발용으로 메모리 회원 저장소 구현
회원 클래스 다이어그램
회원 객체 다이어그램
- 실제 인스턴스 관계
회원 도메인 개발
회원 등급
public enum Grade {
BASIC,
VIP
}
회원 엔티티
public class Member {
private Long id;
private String name;
private Grade grade;
public Member(Long id, String name, Grade grade) {
this.id = id;
this.name = name;
this.grade = grade;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
- id, name, grade 선언
- 생성자, getter 및 setter
회원 저장소 인터페이스
public interface MemberRepository {
void save(Member member);
Member findById(Long memberId);
}
회원 서비스 구현 - 메모리 레포지터리
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long, Member> store = new HashMap<>();
@Override
public void save(Member member) {
store.put(member.getId(), member);
}
@Override
public Member findById(Long memberId) {
return store.get(memberId);
}
}
- 실무에선 동시성 이슈 때문에
HashMap
보다는ConcurrentHashMap
사용 권장
회원 서비스 인터페이스
public interface MemberService {
void join(Member member);
Member findMember(Long memberId);
}
회원 서비스 구현체
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository = new MemoryMemberRepository();
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
회원 도메인 - 회원 가입 테스트
//import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.assertj.core.api.Assertions;
public class MemberServiceTest {
MemberService memberService = new MemberServiceImpl();
@Test
void join(){
//given
Member member = new Member(1L, "memberA", Grade.VIP);
//when
memberService.join(member);
Member findMember = memberService.findMember(1L);
//then
Assertions.assertThat(member).isEqualTo(findMember);
}
}
Assertions.assertThat()
메서드 찾을 수 없으면 core를 import 해야 함- 인스턴스화 한
member
와join()
메서드로 등록된member(findMember)
가 동일한지 테스트 - 테스트 결과 Good
[참조] 인프런 스프링 핵심 원리 - 기본편 - 링크
끝!