API
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello " + name;
}
- ResponseBody : http의 body부분에 데이터를 직접 넣어주겠다. view사용X
- RequestParam : HttpServletRequest 객체와 같은 역할.
비즈니스 요구사항
- 컨트롤러 : 웹 MVC의 컨트롤러 역할
- 서비스 : 핵심 비즈니스 로직 구현 (비즈니스적인 용어 사용_join)
- 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 (개발적인 용어 사용_save)
- 도메인 : 비즈니스 도메인 객체
- 아직 데이터 저장소가 선정X. 인터페이스로 구현 클래스를 변경할 수 있도록 설계.
회원 도메인/리포지토리 생성
- 회원 객체(VO) 생성
- 회원 리포지토리 인터페이스 생성
- 회원 리포지토리 메모리 구현
회원 리포지토리 테스트 케이스 작성
- JUnit이라는 프레임워크로 테스트
- 동작하는지 보기위해 테스트케이스 작성
- 테스트는 서로 의존관계가 없어야한다. 순서 상관없이 테스트가 되어야한다.
TDD(테스트주도개발) : 테스트를 먼저 만들고 구현 클래스를 만들어 돌려보는 것
회원 리포지토리 메모리 구현체 테스트
@AfterEach
public void afterEach(){
repository.clearStore();
}
- @AfterEach : 여러 테스트를 한꺼번에 실행 시, 메모리 DB에 직전 테스트의 결과가 남을 수 있다. @AfterEach 를 사용하여 각 테스트가 종료될 때 마다 메모리 DB에 저장된 데이터를 삭제한다.
회원 서비스 개발
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
- 람다 표현식
- 인터페이스가 갖고 있는 메소드를 간편하게 즉흥적으로 구현해서 사용하는 것이 목적
- (매개변수목록) -> { 함수몸체 }
회원서비스테스트
void 회원가입() {
//given
Member member = new Member();
member.setName("hello");
//when
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
- 테스트코드는 한글 적어도 괜찮다.
- given : 이런 상황이 주어져서 (이 데이터를 기반) then : 결과가 이렇게 나와야해
- when : 이걸로 실행했을 때 (이걸 검증)
@BeforeEachpublic
void beforeEach() {
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
- @BeforeEach : 각 테스트 실행 전에 호출. 테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하고, 의존관계도 새로 맺어준다.
단축키(Windows)
ctrl+alt+v : 변수 선언할 때 사용
alt+enter : static import
ctrl +shift +t : 테스트코드 단축키
shift+f6 : 변수명 바꾸기
ctrl + shift + enter : 완료 후 줄바꿈
인프런 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 통해 학습 중.
'JAVA' 카테고리의 다른 글
Spring 핵심 01 : 객체 지향 설계와 스프링 (0) | 2021.05.18 |
---|---|
Spring 05 : AOP (0) | 2021.05.18 |
Spring 04 : 스프링 DB 접근 (0) | 2021.05.18 |
Spring 03 : 스프링 빈과 의존관계 (0) | 2021.05.18 |
Spring 01 : 프로젝트 환경설정 (0) | 2021.05.18 |