비즈니스 요구사항 정리
회원 도메인과 리포지토리 만들기
회원 리포지토리 테스트 케이스 작성
회원 서비스 개발
회원 서비스 테스트
비즈니스 요구사항 정리
- 데이터: 회원ID, 이름
- 기능: 회원 등록, 조회
- 아직 데이터 저장소가 선정되지 않음(가상의 시나리오)

- 컨트롤러: 웹 MVC의 컨트롤러 역할
- 서비스: 핵심 비즈니스 로직 구현
- 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
- 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨

- 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현
- 클래스를 변경할 수 있도록 설계 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정
- 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용
회원 도메인과 리포지토리 만들기
domain package 밑에 Member class 만들기
Alt + Insert 단축기로 getter/setter 만들 수 있다.

repository package 밑에 MemberRepository 인터페이스 만들기

구현체 만들기 위해 repository package 밑에 MemoryMemberRepository 클래스 만들기
implements MemberRepository

회원 리포지토리 테스트 케이스 작성
개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드를 통해서 실행하거나, 웹 애플리케이션의 컨트롤러를 통해서 해당 기능을 실행한다. 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다. 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다.
회원 리포지토리 메모리 구현체 테스트
test - java - hello.hellospring 밑에 repository package를 만들고 MemoryMemberRepositoryTest 클래스를 만든다
테스트 하려는 MemoryMemberRepository클래스 뒤에 Test를 붙여서 이름을 작성한다.
@Test를 실행하면 org.junit.jupiter.api가 적용된다.

save()를 작성하고 실행

가져온 result가 member와 같으면 result = true로 실행된다.

Assertions.assertEquals() 사용해서 기댓값과 실제값이 같으면 실행되고, 다르면 오류가 뜬다.

assertThat().isEqualTo() 사용해서 Test

Test는 의존관계 없이(순서에 영향 받지 않게) 작동되어야 하므로 Test가 끝날 때마다 지워주는 코드를 작성한다.
- @AfterEach : 한번에 여러 테스트를 실행하면 메모리 DB에 직전 테스트의 결과가 남을 수 있다. 이렇게 되면 다음 이전 테스트 때문에 다음 테스트가 실패할 가능성이 있다. @AfterEach 를 사용하면 각 테스트가 종료될 때 마다 이 기능을 실행한다. 여기서는 메모리 DB에 저장된 데이터를 삭제한다.
- 테스트는 각각 독립적으로 실행되어야 한다. 테스트 순서에 의존관계가 있는 것은 좋은 테스트가 아니다

MemoryMemberRepository 수정

추가 Test 코드 작성 -> findByName, findAll

* TDD: Test 먼저 만들고 구현 코드 작성
회원 서비스 개발
service 패키지에는 business 처리에 관련된 코드를 작성한다.
service 패키지를 만들고 MemberService 클래스를 만든다.

회원 가입 + 중복 회원 검증

전체 회원 조회

회원 서비스 테스트
Ctrl + Shift + T 를 누르면 Test를 자동으로 만들어준다.

회원 가입 Test
given / when / then으로 나누어 Test 코드를 작성한다.

중복 회원 조회 Test

memberRepository를 clear 해주기 위해 MemoryMemberRepository에서 가져온다.

MemberService에서 memberRepository를 외부에서 넣어주도록 수정한다.

MemberServiceTest를 수정한다.

@BeforeEach : 각 테스트 실행 전에 호출된다. 테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하고, 의존관계도 새로 맺어준다.
'Spring > 스프링 입문' 카테고리의 다른 글
6. 스프링 DB 접근 기술 (0) | 2022.11.27 |
---|---|
5. 회원 관리 예제 - 웹 MVC 개발 (0) | 2022.11.27 |
4. 스프링 빈과 의존관계 (0) | 2022.11.27 |
2. 스프링 웹 개발 기초 (0) | 2022.11.25 |
1. 프로젝트 환경설정 (0) | 2022.11.25 |