Layerd Architecture (관심사의 분리)
Presentation Layer
- 외부 세계의 요청을 가장 먼저 받는 계층
- 파라미터에 대한 최소한의 검증을 수행한다.
- 넘겨온 데이터들에대한 Validation이 중요하다.
Business Layer
- 비지니스 로직을 구현하는 역할
- Persistence Layer와의 상호작용(Data를 읽고 쓰는 행위)을 통해 비지니스 로직을 전개
- 트랜잭션을 보장해야한다.
Persistence Layer
- Data Access의 역할
- 비지니스 가공 로직이 포함되어서는 안된다.
- DATA CRUD에 대한 CRUD에만 집중한 레이어
@DataJpaTest //@SpringBootTest 보다 가벼움. JPA에 필요한 bean만 띄워줌
- 하위 계층은 상위 계층에대한 Data가 없어야 한다.
- 컨트롤러는 서비스의 클래스를 사용하기에 data가 존재하지만 service는 컨트롤러의 클래스를 의존하지 않아야한다.
- 주로 dto가 여러 계층에서 사용되기에 dto를 계층별로 만들어주는것이 번거롭지만 좋다.
- 의존성문제나 책임 분리 측면에서 아주 좋은 방법이된다
통합 테스트 (Integration Test)
- 여러 모듈이 협력하는 기능을 통합적으로 검증하는 테스트
- 일반적으로 작은 범위의 단위 테스트 만으로는 기능전체의 신뢰성을 보장할 수 없다.
- 풍부한 단위 테스트 & 큰 기능 단위를 검증하는 통합 테스트