비즈니스 요구사항 정리
- 데이터
- 회원 ID
- 이름
- 기능
- 회원 등록, 조회
- 아직 데이터 저장소가 선정되지 않음
여기에서 MemberRepository를 Interface로 생성하는 이유는 데이터 저장소가 선정되지 않았기 때문입니다.
추후에 구체적인 기술이 선정되고 나면 바꿔 끼우는 작업을 진행하면 됩니다.
Controller : 외부 요청을 받고,
Service : 비즈니스 로직 처리
Repository : 데이터 저장
회원 Domain과 Repository 만들기
먼저 domain package를 만들어 줍니다.
그 후, domain package 내 Member라는 Class를 만들어 주는데 사용할 데이터인 ID, Name 변수를 선언해주고 Getter와 Setter를 선언해줍니다.
그 다음은 repository라는 package를 생성해주고 그 내부에 MemberRepository Interface를 생성해주겠습니다.
그 후, 구현체를 repository package에 MemoryMemberRepository Class를 만들어 줍니다.
MemoryMemberRepository Class에서 implements MemberRepository를 해주게 되는데
Implement methods 단축키는 ALT + Enter를 누르면 위와 같은 창이 나오게 되고 계속 실행을 해주면 아래 사진과 같이 생성됩니다.
그 후, 변수를 선언해줍니다.
store는 member 변수들이 저장될 변수, sequence는 member의 ID 값을 지정해주기 위해 사용합니다.
save 기능
save 함수에는 멤버를 저장할 수 있는 기능을 만들어 줍니다.
멤버마다 다른 아이디값을 지정해야 하므로 sequence++를 해줍니다.
findById 기능
null 이 반환될 가능성이 있기 때문에 Optional.ofNullable로 감싸줍니다.
findByName 기능
findAll 기능
Repository TEST Case 작성 - JUnit
이제 작성한 코드를 검증하는 시간입니다.
이때 TEST Case를 작성하여 검증을 진행하면 됩니다.
먼저 테스트를 위해 repository 패키지를 생성해주고, 클래스를 생성해줍니다.
그리고 위와 같이 환경을 구성하여 테스트를 진행할 수 있습니다.
그런데 Test 클래스 전체를 실행하면 오류가 발생합니다.
그 이유는 테스트를 진행할때 클래스 내부에 있는 각각의 테스트가 순서대로 진행되지 않고 무작위로 진행되기 때문에
이미 repository 안에 "spring1" 과 "spring2" 가 저장되어 있어서 오류가 발생한겁니다.
그래서 테스트를 진행할 때마다 repository를 초기화 시켜주어야 합니다.
먼저 MemoryMemberRepository.java 로 가서 store를 비워주는 함수를 만들어 줍니다.
그리고 MemoryMemberRepositoryTest.java에 위와 같은 @AfterEach를 추가해줍니다.
@AfterEach 는 테스트가 끝날때마다 실행되는 함수입니다.
예를 들어, save() -> afterEach() -> findByName(0 -> afterEach() -> findAll() -> afterEach() 이런 식으로 실행됩니다.
사실 자동으로 Test를 생성해주는 단축키가 있습니다.
바로 Ctrl + Shift + T 입니다.
Service 만들기
이제 기능을 구현했으니 기능이 실제로 쓰이는 service를 만들어 보겠습니다.
첫째로 service package를 생성해주고 MemberService 클래스를 생성해줍니다.
그 후, 아래와 같이 기능이 동작하도록 함수들을 생성해줍니다.
이제 Test를 해보겠습니다.
위에서 언급했던 것처럼 Ctrl + Shift + T를 눌러 Test 코드를 생성해줍니다.
Service Test Case
출처 : 인프런 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)
'Web > backend' 카테고리의 다른 글
07 - 02. 회원 관리 예제 (0) | 2022.11.03 |
---|---|
06. API - 정리 (0) | 2022.10.05 |
05. 정적 컨텐츠, MVC (0) | 2022.10.04 |
04. 빌드하고 실행하기 (0) | 2022.10.04 |
03. Welcome Page 만들기 (0) | 2022.09.30 |