블로그

박준형

[워밍업 클럽 4기 백엔드] Day 16 미션

📌 Persistence Layer✅특징Data Access의 역할비즈니스 가공 로직이 포함되어서는 안 된다.Data에 대한 CRUD에만 집중한 레이어이기 때문 작성한 쿼리가 우리의 의도대로 동작하는지 확인하는 단위 테스트의 성격을 가진다. 해당 쿼리가 미래에 어떠한 구현체로 변형될지 모르기 때문에 테스트 코드로 보장해주어야 한다.💡 테스트 방법실제 데이터베이스와 연동하여 작성한 쿼리가 의도대로 동작(저장, 조회, 수정, 삭제 등)하는지 테스트한다.@ActiveProfiles 를 사용하여 실제 애플리케이션 환경과 테스트 환경을 분리하는 것이 좋다.@DataJpaTest 를 사용할 경우 내부에 @Transactional 이 포함되어 있어 테스트 종료 후 롤백된다.@SpringBootTest 를 사용할 경우 @Transactional 을 선언하거나, 클랜징 작업(deleteAllInBatch)을 수행해주어야 한다.📌Business Layer✅특징비즈니스 로직을 구현하는 역할Persistence Layer와의 상호작용(Data를 읽고 쓰는 행위)을 통해 비즈니스 로직을 전개시킨다.트랜잭션을 보장해야 한다.트랜잭션 : "쪼갤 수 없는 업무 처리의 최소 단위"로 원자성, 일관성, 격리성, 지속성 일명 ACID를 보장해야함 작성한 비즈니스 로직이 의도대로 동작하는지 확인하는 통합 테스트의 성격을 가진다.  💡테스트 방법Business Layer는 Persistence Layer를 의존하므로 이 둘을 통합적으로 테스트한다. Persistence Layer의 테스트를 수행했다면, Persistence Layer는 Mocking하여 비즈니스 로직만 테스트하는 것도 좋다고 생각한다.경계값이 주어져도 기능이 정상적으로 동작하는지 테스트해야 한다. 해피케이스(예상한 반환값)와 예외케이스(예상한 예외 종류)에 관해서도 해당 계층에서 테스트해야 한다.@SpringBootTest 와 @Transactional 을 사용한다면 서비스 클래스에 @Transactional 이 빠지지 않았는지 유의해야한다.📌Presentation Layer✅ 특징외부 세계의 요청을 가장 먼저 받는 계층으로파라미터에 대한 최소한의 검증을 수행넘어온 값들의 검증(validation)이 중요하고, 비즈니스 로직은 필요없음Business Layer에서 비즈니스 로직을 전개하기 전에 값들이 유효한지 검증 💡 테스트 방법Business Layer와 Persistence Layer는 Mocking을 사용하여 정상 동작을 하는 것으로 간주하고 테스트한다.@MockitoBean 을 사용하여 서비스 클래스를 Mocking요청 파라미터에 대한 유효성 검증(필수값, 값의 형식 등) Validation이 정상적으로 작동하는지 테스트한다.@WebMvcTest 을 사용하여 Controller, Filter, Interceptor 와 같은 웹 계층과 관련된 빈만 로드하여 빠르게 테스트할 수 있다.MockMvc를 사용하여 서버를 실행하지 않고 요청을 보내고 응답값을 테스트할 수 있다.MockMvc : Mock(가짜) 객체를 사용해 스프링 MVC 동작을 재현할 수 있는 테스트 프레임워크로 애플리케이션을 띄우지 않고도 HTTP 요청/응답 흐름을 테스트할 수 있다. 출처 : Practical Testing: 실용적인 테스트 가이드

백엔드워밍업클럽4기맥엔드Day16미션

채널톡 아이콘