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차 캐시에서만 처리되 무의미한 테스트가 발생할수 있으니 주의가 필요하다.

댓글을 작성해보세요.


채널톡 아이콘