Day 16 Mission [Layered Architecture 에 대하여 정리]
1. 레이어 별로 어떤 특징이 있는가?
보통 3계층 혹은 4계층으로 구조를 분리하는데 강의에서는 3계층으로 표현하고 있다.
프레젠테이션 계층 (Presentation Layer)
사용자와 직접 상호작용하는 부분이다. (외부 세계의 요청을 가장 먼저 받는 계층이다.)
파라미터에 대한 최소한의 검증을 진행한다.
비즈니스 로직 계층 (Business Logic Layer)
애플리케이션의 핵심 기능과 규칙을 처리합니다.
사용자 요청에 따라 데이터 처리, 검증, 트랜잭션 관리 등을 수행한다.
영속성 계층 (Persistence Layer)
데이터베이스나 외부 저장소와의 통신을 담당합니다.
가공 로직이 포함되어서는 안된다.
SQL 쿼리 실행, ORM 매핑 등이 이 계층에서 이뤄집니다.
2. 어떻게 테스트 하면 좋을까?
각 계층이 다른 계층에 침투하지 않도록 해야한다. 또한 각 레이어의 목표에 맞게 진행해야한다.
프레젠테이션 계층 (Presentation Layer)
사실 테스트하기 가장 난감하다. 단순 restfull api 서버라면 가능하지만 화면을 제공한다면 테스트가 복잡해진다.
화면의 구조나 UI/UX 측인 부분도 검증이 필요하다.
restfull 서버라는 가정하에는 MockMvc와 @MockBean을 사용하여 Mocking 처리가 가능하다.
비즈니스 로직 계층 (Business Logic Layer)
사실상 중간단계의 통합테스트가 많다.
@MockBean을 사용하여 Repository를 Mocking하고 비즈니스 로직 검증이 가능하지만 fake객체를 만들어 단독으로 검증할 수 있도록 하는것이 더 좋다.(속도가 월등하다)
데이터 접근 계층 (Data Access Layer)
@Transactional를 이용한 CRUD 테스트가 가능하다.
인메모리 디비를 사용해 테스트가 가능하지만 역시다 fake객체를 이용하여 빠른 속도로 검증이 가능하다.
영속성 객체의 속성을 잘못 인지하면 테스트는 통과하지만 실제로는 오류가 발생한다거나 부하테스트 등을 정상적으로 처리다 안되고 영속성 1차 캐시에서만 처리되 무의미한 테스트가 발생할수 있으니 주의가 필요하다.
댓글을 작성해보세요.