발자국 4주 차

발자국 4주 차

본 내용은 인프런 워밍업 클럽 스터디를 진행하면서 작성한 회고 글 입니다.

학습 정리

Presentation Layer Test

  • Presentation Layer는 외부 세계의 요청을 가장 먼저 받아서 파라미터에 대한 최소한의 검증을 수행하는 계층이다.

  • 레이어가 얇고 하는 일이 간단하기 때문에, 하위 레이어(business, persistence)는 mocking을 한다.

  • MockMvc, WebMvcTest를 활용하여 테스트를 작성하자.

  • 검증은 그 값이 마땅히 가져야 하는 속성에 대해서만 진행하고, 도메인 성격에 맞는 특수한 형태의 검증은 하위 레이어에서 진행한다.

  • Request 받은 DTO를 서비스로 그대로 넘기면 두 레이어간 의존성이 생긴다. 서비스용 DTO를 따로 만들어서 사용하자.

Mock

  • Classicist 관점에서 Mocking을 하는 시점은 다음과 같다.

    • 우리가 개발하지 않은 외부 시스템

    • 외부 시스템을 Mocking하고, 외부 시스템이 정상이거나 비정상 동작했을 때 테스트를 작성하자.

  • 그 외에는 실제 프로덕션 코드에서 런타임 시점에 일어날 일을 정확하게 Stubbing 했다고 단언하기 힘들기 때문에 비용이 더 들더라도 실제 구현체를 불러와서 테스트하자.

  • 메일전송 같은 긴 네트워크를 타는 로직에는 transaction을 붙이지 않는 게 좋다.

    • DB 커넥션을 계속 점유하기 때문

    • 만약 메일 전송 이후에 해야하는 작업이 여러개이고, 트랜잭션이 적용되어야 한다면 별도의 서비스로 추출해서 트랜잭션을 적용하자.

     

학습 회고

Presentation에서 검증의 책임을 어느정도까지 가져야 하는지, Mock을 어떤 시점에 적용해야 하는지 명확하게 알게 되어서 좋았다. 그리고 섹션 8에서는 더 나은 테스트를 작성하기 위한 구체적인 조언을 해주셨는데, 여기서 환경을 통합해야 한다는 내용이 공감이 많이 갔다. 기존에 했던 팀 프로젝트에서 테스트가 많아지면서 실행 시간이 계속 늘어났는데 환경을 통합해서 시간을 줄이는 것을 적용해야겠다.

 

미션

Day 15: Layered Architecture 구조의 레이어는 어떤 특징이 있고 어떻게 테스트하면 좋을지

Day 18: @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이

 

미션 회고

미션을 풀면서 각 레이어가 어떤 특징을 가지고 있는지 그리고 어떻게 테스트할지 다시 한 번 정리할 수 있었다. 헷갈리는 Mock관련 Annotation 들을 정리하면서 단위 테스트에는 어떤 것들을 사용하고 통합 테스트에는 어떤 걸 사용해야하는 지 명확하게 알게되어서 좋았다.

댓글을 작성해보세요.

채널톡 아이콘