🎁 모든 강의 30% + 무료 강의 선물🎁

워밍업 클럽 3기 Code 과정 Day 16 미션

미션 내용

Layered Architecture의 레이어별로

1) 어떤 특징이 있고

2) 어떻게 테스트를 하면 좋을지

자기만의 언어로 정리해보기

 

Persistence Layer

특징

  • DB와 상호작용하는 Layer

  • DB에 값을 넣고 가져오는 로직을 담당

  • 비즈니스 가공 로직이 있으면 X (역할과 책임 분리)

  • 데이터 CRUD에 집중

  • 단위 테스트 느낌

 

어떻게 테스트 하면 좋을지?

  • 사용하는 기술 (ex : jpa, querydsl, jpql)을 내가 잘 사용해서 DB와 상호 작용하는지 테스트

    • 기술을 잘못 사용하면 원하는 데이터를 받아올 수 없음

  • jpa의 경우에도 쿼리 메서드를 잘 짜주겠지만 혹시 내가 메서드명을 잘못 지었을 수도 있기에 쿼리 메서드에 대해서도 테스트

  • 주로 List 형태로 메서드의 반환 값이 많이 반환될 것이기에 hasSize, extracting, containsExactlyInAnyOrder 메서드 활용하면 좋음

  • 데이터를 직접 넣기에 데이터 만드는 메서드가 정의되어 있으면 조금 더 보기 좋음

 

Business Layer

특징

  • 비즈니스 로직이 구현된 곳

  • 도메인 객체의 로직도 존재

  • 트랜잭션 관련된 것에 주의해야 함

  • persistence layer와 상호 작용

  • persistence layer와 business layer 통합 테스트 느낌

 

어떻게 테스트 하면 좋을지?

  • 비즈니스 로직, 도메인 객체의 로직을 수행하는 메서드들에 대해 테스트 진행 (단위 테스트)

  • 각 로직들 메서드 단위로 분리를 잘하여 테스트하기 용이하게 해야 함

  • LocalDateTime과 같이 테스트하기 어려운 것들이 존재한다면 분리하고 파라미터로 받게 하여 테스트 용이하게 해야 함

  • 도메인과 관련된 validation은 이 layer에서 테스트를 진행하는 것이 더 역할과 책임이 분리된 것

  • 역시 데이터 많이 만들기에 데이터 만드는 메서드 있으면 좋음

 

Presentation Layer

특징

  • 외부와 상호작용하는 곳

  • api로 파라미터를 받거나 값을 내려주는 곳

  • 응답 처리, 예외 처리, validation이 중요한 곳

  • 하위 layer들과 분리해서 테스트하는 곳

  • 단위 테스트 느낌

 

어떻게 테스트 하면 좋을지?

  • 하위 layer들과 분리해서 테스트하는 것이 좋다.

    • 이를 위해 MockMvc 및 mock 객체 사용

    • andExpect 메서드를 잘 활용해야 함

  • 공통 응답이 잘 내려가는지 테스트 필요

  • 예외 발생 시 원하는 포맷, 메시지 등이 잘 응답되는지 테스트 필요

  • 쿼리 파라미터에 대한 validation 잘 이뤄지는지 테스트 필요

    • 여기에서의 validation은 기본적인 @NotNull, @NotBlank 같은 것을 테스트

    • business layer의 validation과 분리하는 것이 필요

댓글을 작성해보세요.


채널톡 아이콘