도메인 : 객체를 담고 있는 패키지
서비스 : 전체적인 웹 서비스의 로직을 구축하는 패키지
repository interface : db와 repository를 연결하는 점? 정도.. 선언?
repository : 객체 관리, 조회, 수정 등등을 구현!?
repository는 실질적으로 data 저장 공간과 연결되어 data를 주고 받는 기능을 '구현'해 놓은 곳. data를 저장해 놓는 곳이 바뀔 수 있기 때문에(강의에서는 어떤 저장공간을 활용할지 정해지지 않은 상태), '기능' 자체는 repository interface에 명시를 해 놓고, service와 연결되어 적절히 수행되다가, data 저장 공간에 따라서 구현부인 repository만 code를 변경시켜 주면 된다.
코드가 길어지거나 여러명이서 함께 참여하는 개발의 경우에는, test가 반드시 필요하다고 한다..!(한번도 안해봄)
@Test
public void save(){
Member member = new Member();
member.setName("spring1");
repo.save(member);
Member result = repo.findById(member.getId()).get();
assertThat(member).isEqualTo(result);
}
src->test-> java 로 들어가서, test하고자 하는 package와 동일한 이름으로 package를 만든 다음, {test하고자 하는 class명 + Test}를 보통 파일 명으로 사용하여 만든다.
@Test : test용 annotation을 적는다.
함수의 이름은 아무렇게나 지어도 된다. 심지어는 한글로도 가능.
test의 로직은 매번 달라지겠지만, 이번 강의에서는 만들고자 하는 객체와 service로직을 통해 만들어진 객체를 동일한가 비교를 통해 했다.
중요!! assertThat(A).isEqualTo(B)
A와 B가 같은가? 라고 물음. test 함수를 run했을 때, A와 B가 완전 동일하다면, 아무것도 출력하지 않고 초록색 체크표를 띄운다. 그렇지 않으면 다른 표시를 띄운다.
test를 할 때에는 test의 대상이 되는 함수들끼리 서로 독립적이어야 하고, 서로 영향을 받아서는 안된다. 따라서 하나의 같은 객체를 서로 다른 함수들이 이용해야 한다면, 매번 그 객체의 data를 지워주어야 한다.
@AfterEach
public void repoClear(){
repo.clearAll();
}
@AfterEach : 매 함수가 끝날 때 마다 실행시키는 어노테이션
test 파일을 어렵게 만들지 않고 빠르게 하기! crtr + shift + t 를
test하고자 하는 class 내부에서 실행시키면 알아서 만들어 준다~