들어가기에 앞서
실제 프로젝트 진행했던 코드 내용은 업로드하지 않았습니다
7. Business Logic 구현
(1) Service Layer 제작
@Service
- 비즈니스 로직을 담당하는 컴포넌트
- 도메인 모델(데이터)와 컨트롤 사이에 위치
- 구현 방식
- 인터페이스 + 클래스 : 정석
- 인터페이스를 요구사항에 따른 기능 문서로 작성
- 같은 기능을 하는 다양한 구현체를 작성할 니즈가 예상될 때 적합
- 클래스
- 실무에서 즐겨 사용됨
- 인터페이스를 추가로 작성하는 수고를 덜게 됨
- 컨트롤러 레이어와 결합도가 좀 더 증가하게 됨
- service package 생성 후 EventService 생성 (클래스 방식으로 구현)
- EventRepository 로 데이터 처리를 Service에서 분리시키기
- repository package 및 EventRepository interface 생성
- config package, RepositoryConfig class 생성 (EventRespoistory 인터페이스를 bean으로 만들기 위해)
- EventRepository interface 구성
- EventServiceTest
(2) Validation
- implementation 으로
validation
직접 의존성 추가해야 함
Validation
관련 애노테이션
@Validated
+ 메소드 파라미터 검증
메소드 파라미터에 validation annotation
직접 사용하여 검증
- 클래스에
@Validated
필요
- 발생 예외 :
ConstraintViolationException
, 직접 처리해줘야 하는 예외
ConfigurationProperties
클래스에도 적용 가능
@Valid
+ Data Object
검증하려는 데이터 오브젝트에만 검증 로직, @Validated
필요 없음
- 발생 예외 :
MethodArgumentNotValidException
ResponseEntityExceptionHandler
지원 받을 수 있음
Validation
예제
(3) 오류 처리
parameterized test
@ParameterizedTest
> @MethodSource
@ParameterizedTest(name = "{}")
으로 subname 변경 가능
- 예외 처리 입출력 테스트