웹 애플리케이션 계층 구조
- 컨트롤러: 웹 MVC의 컨트롤러 역할
- 서비스: 핵심 비즈니스 로직 구현
- 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
- 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨
클래스 의존관계
- MemberService → Member의 서비스 → 멤버 관련 비즈니스 로직 구현
- MemberRepository → interface로 설계 → 나중에 변경될 수 있기 때문
- MemoryMemberRepository → MemberRepository의 구현체
- 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용
테스트 작성
- 테스트 코드 작성 이유
- 준비하고 실행하는데 오래 걸린다
- 반복 실행하기 어렵다
- 여러 테스트를 한번에 실행하기 어렵다
- 따라서 test폴더에 main과 동일한 폴더구조를 만들어 test 코드를 만들어 사용한다.
- 테스트 작성 요령
- given, when, then으로 나누어 작성
- 모든 테스트는 메소드 실행 순서에 관계없어야 한다
- 실무에서는 테스트 시 비교연산자를 통해 실제로 값을 비교하지 않음
- Asserstions(assertj)를 사용해 같은지 확인
- 단축키 commend + shift + T로 해당 클래스 테스트 코드 작성 가능
- 테스트를 먼저 작성하고 개발하는 것 → 테스트 주도 개발(TDD)
회원 서비스 개발
- 서비스 : MemberRepository를 사용하여 비즈니스 로직을 구현
- 회원가입, 회원 중복 확인, 회원 검색 등 회원 관련 기능을 구현
Java
- Optional<>
- null이 올 수 있는 값을 감싸는 Wrapper 클래스
- null을 참조하더라도 NPE가 발생하지 않도록 한다.
- java 8 이후 버전에서 사용가능
- 메소드 반환값이 Optional이면 return Optional.ofNullable();
어노테이션
- @AfterEach → 어떤 메소드가 끝나면 실행시킬 함수를 지정하는 것 → 여기서는 저장소 초기화