Spring

[Spring]#04 Spring을 이용한 백엔드 개발 실습

Noooodle 2024. 1. 15. 00:22

처음으로 이것저것 만들어볼거에요

졸리다 힘들다 내일 또 알바간다.. 아무튼 해봅시다.

 

<요구사항>

데이터: 회원 ID, 이름

기능: 회원 등록, 조회

저장소: 있다고 가정

출처: 김영한님 Spring 강의

 

1. 도메인과 리포지토리 만들기

회원 객체

회원은 id와 이름으로 구성된다. 그리고 외부에서 접근 가능한 메소드 여러개 만들었다. 

회원 리포지토리 인터페이스
회원 리포지토리 메모리 구현체

 

2. 테스트

1에서 만든 findById, findAll, findByName을 테스트 해볼 것이다. 실무에서는 테스트 주도 개발이 더 많이 쓰인다고 한다. 테스트를 먼저 만들고, 구현한 다음 테스트를 해보는 것이다. 우리는 배우는 과정이라서 그렇게 하지 않았다.

테스트 한 과정이 끝났을때 저장소와 공용데이터의 삭제가 필요하다. 이게 없으면 이전에 사용한 값이 남아서 테스트가 제대로 되지 않을 수 있다. 그리고 회원이 제대로 저장되었는지 확인하는 테스트 코드를 작성했다. 원래는 assertions.assertThat ... 이런식으로 작성해야되는데 static이라서 위에 자동으로 생긴다나 머라나.. 이해는 안되지만 그런게 있구나 했다. 아무튼 우리는 편리하게 asserThat만 사용해도 된다.

findByName() 테스트
findAll() 테스트
테스트 결과. 잘 작동한다!

 

3. 회원 서비스 클래스

회원 리포지토리는 Main 리포지토리에 비해 좀 더 비즈니스적인(?) 용어를 사용한다. 

회원가입, 이름 중복 불가능 기능 추가
전체 회원 조회 & 한 회원 조회

 

4. 회원 서비스 테스트

 

ctrl + shift + T 로 test자동 생성
메소드 어떤 것 만들지 자동으로 만드는 옵션 전부 다 체크

그러면 자동으로 만들어진다. 캡쳐를 안 해서 이미지가 없음.. 어쨌든 회원 서비스 테스트를 해보자

회원 서비스를 테스트할때는 MemberService와 MemoryMemberRepository 둘 다 이용한다. 그러나 각각 객체를 만들면(주석처리한 부분) 다른 메모리를 사용해서 테스트가 제대로 이뤄지지 않는다.(물론 우리는 static을 사용해서 문제없긴 함..) 그래서 아래에 BeforeEach를 추가 했다. 테스트를 하기 전에 인스턴스를 초기화하고, 그 인스턴스를 이용해 또 인스턴스를 초기화한다. memberService에 이를 위한 코드를 추가해주었다.

AfterEach는 이전 테스트에서 만든것을 복사해왔다.

추가된 생성자(?라고 부르는거 맞나.. 기억안나), 단축키 쓰면 편함
회원가입

테스트는 한글을 써도 전혀 문제가 없다고 한다. 더 편하다고..

예외처리, 테스트에서는 맞는 작동보다 예외처리를 잘 하는것이 중요하다.
회원 서비스 테스트 결과