워밍업 클럽 4기 BE 클린코드&테스트 3주 차 발자국

금주에는 레이어드 아키텍처를 배우고 각 레이어 별로 테스트를 진행했습니다.

 

Persistence Layer 는 Data Access의 역할을 맡아 CRUD가 실행되는 레이어입니다.

Persistence Layer의 테스트를 위해 Spring Data JPA 를 구현한 Repository 및 서비스를 사용했고

기본 엔티티를 설계 및 개발하며 ProductRepositoryTest 를 진행했습니다.

Business Layer 는 비즈니스 로직을 담당하는 레이어로

OrderServiceTest를 통해 Product를 저장하고 orderService를 통해 OrderDto인 OrderResponse를 만들며

.extracting(), .containsExactlyInAnyOrder() 등 메서드를 사용해 검증을 진행했습니다.

Presentation Layer는 외부 세계의 요청을 가장 먼저 받는 계층으로

파라미터에 대한 최소한의 검증을 수행합니다.

동시성 이슈가 발생할 수 있는 부분과 그에 대한 해결 방안을 간략하게 알아보았고

성능 최적화와 조회용 메서드와 CUD 메서드를 분리하기 위해

클래스 상단에 @Transactional(readOnly = true) 를 위치하고

CUD 가 필요한 메서드 마다 @Transactional 애노테이션을 오버라이딩 시켜주었습니다.

 

레이어드 아키텍쳐 이외에 테스트를 위한 공통 설정에 대해서도 배웠습니다.

 

application.yml 파일을 이용해 프로파일별(local, test)로 설정을 분리하는 방법을 배웠습니다.

Test에 사용되는 애노테이션에는

@SpringBootTest @DataJpaTest가 있습니다.

@DataJpaTest는 리포지토리와 JPA의 설정을 가지고 CRUD 테스트를,

@SpringBootTest는 서비스를 포함한 전체 테스트 진행 시 사용합니다.

테스트 클래스에서 사용되는 @Transactional 자동 롤백 기능과 부작용에 대해서 공부하고

@AfterEach 로 테스트 후 각 리포지토리를 롤백해주었습니다.

 

금주의 미션은 given, when, then 패턴, BDD 스타일을 이용하여

테스트 시나리오를 작성하고, 레드/그린/리팩토링 순서로 테스트를 진행 및 구현하는 미션이였습니다.

작성했던 메서드를 기반으로 테스트를 작성했기에 레드 그린 순서로 진행하지는 못 했지만

어떤 시나리오를 작성하면 좋을지 생각해보고 작성에도 도움을 주었다고 생각합니다.

다만 아쉬운 점은 미션을 수행하는 것에만 치중하여 스스로 테스트 리팩토링을 소홀하게 진행한 것이 아쉬웠습니다.

 

일과 학습을 병행하니 이 정도면 충분하지 않나 생각으로 보내 아쉬움이 많이 남는 한 주였던 것 같습니다.

물론 많은 도움이 되는 강의와 미션이지만 스스로 더 많은 경험치를 쌓기 위해

매일 진행하는 학습 이후 반드시 배운 내용을 정리하며 마무리하는 연습을 하려고 합니다.

 

 

 

 

 

댓글을 작성해보세요.

채널톡 아이콘