- 비즈니스 요구사항 정리
- 회원 도메인과 리포지토리 만들기
- 회원 리포지토리 테스트 케이스 작성
- 회원 서비스 개발
6f9bd5ef4fb7d5625e42850fbedcaeb603e3e925
<스프링 입문 강의 – 9강 비즈니스 요구사항 정리>
l 비즈니스 요구사항
- 데이터 : 회원 ID, 이름
- 기능 : 회원 등록, 조회
- 가상 시나리오 : 아직 데이터 저장소가 선정되지 않음
l 일반적인 웹 어플리케이션 계층 구조
- 컨트롤러 : MVC의 컨트롤러 역할
- 서비스 : 회원 중복 가입 불가 등 도메인 객체로 핵심 비즈니스 로직
- 도메인 : 회원, 주문, 쿠폰 등 DB에 저장되고 관리되는 비즈니스 도메인 객체
- 리포지토리 : 도메인 객체를 DB에 저장하고 관리
<스프링 입문 강의 – 10강 회원 도메인과 리포지토리 만들기>
l Optional 객체 사용 이유
- 복잡한 조건문 없이 null로 인해 발생하는 예외를 처리
- of()를 통해 생성된 Optional 객체에 null이 들어갈 경우 NullPointerException 발생
- ofNullable()은 null이 될 가능성이 있을 때 사용
<스프링 입문 강의 – 11강 회원 리포지토리 테스트 케이스 작성>
l 테스트 케이스를 작성하는 이유
- 기존 테스트 방법 : main 메서드에서 실행 / Controller를 통해 실행
- 그러나 시간이 오래걸림 / 반복 실행이 어려움 / 여러 테스트를 한 번에 실행하기 어려움
l 테스트 케이스 작성
- Naming Convention : 테스트할 class 이름 + Test
- @Test : 테스트 메서드를 따로 실행해볼 수 있음
- 테스트 순서는 보장되지 않음 (이를 고려하여 설계해야함)
l Assertions
- Junit Assertions > Assertions.assertEquals($EXPECTED, $RESULT);
- assertj Assertions > Assertions.assertThat($EXPECTED).isEqualTo($RESULT);
- assertj는 static으로 assertThat부터 시작 가능 (Alt+Enter)
l @AfterEach
- 각 테스트가 끝날 때마다 실행시킬 메서드
l TDD (테스트 주도 개발)
- 테스트로 틀을 먼저 만들고 개발하는 방식
<스프링 입문 강의 – 12강 회원 서비스 개발>
l Optional에 값이 있을 때 exception
- ifPresent($FUNCTION) : 값이 있으면 함수 동작
- throw new IllegalStateException($MESSAGE);
l 네이밍 컨벤션 (리포지토리 vs 서비스)
- 리포지토리 : save / find 등 무언가 개발자스럽게 그냥 저장하고 찾는 느낌?
- 서비스 : join / findMembers 등 더 비즈니스스러운 이름
- role에 맞도록 네이밍
'프레임워크 > Spring' 카테고리의 다른 글
[인프런][스프링 입문] 17~20 강 (0) | 2022.03.05 |
---|---|
[인프런][스프링 입문] 13~16 강 (0) | 2022.03.04 |
[인프런][스프링 입문] 5~8 강 (0) | 2022.02.06 |
[인프런][스프링 입문] 1~4 강 (0) | 2022.02.04 |
[Spring] 문서의 요소 콘텐츠에서 부적합한 XML 문자 (0) | 2022.01.28 |