본문 바로가기

주간회고

4월 4주차 주간회고

이번 주에는 거의 5일간 기업 과제테스트에 몰입했다. Nest.js를 이용하는게 조건이었는데, 한번도 써보지 않은 프레임워크라 조금은 어려움이 있었지만 나름 재미있었고 코드를 작성하면서 어떤 부분에 집중해서 테스트를 하면 좋은지 배울 수 있었다.

우선순위 정하기

nestJS로 웹을 만들기 위한 최소한의 지식을 익히고나니 제출기한이 4일밖에 남지 않았다.
주어진 시간 안에 최우선으로 구현할 기능과 테스트해야할 부분이 무엇일지 고민해보았다.

기능

과제 내용이 유출되면 안되어서 자세하게 적지는 못하지만, 포트폴리오에서 진행했던 것처럼 내일 당장 제출해야 한다면 어떤 기능을 먼저 만들어야 할 것인지 고민해보았고, 자연스레 인증인가는 후순위로 미루게 되었다. 가장 필요한 기능을 먼저 구현하고 나중에 추가된 기능을 리팩토링하면서 통합하기로 결정했다.

테스트

먼저 요구사항을 충족하는지 확인하기 위해 E2E테스트를 작성하기로 했고, 도메인 객체의 비즈니스로직이 제대로 동작하는지 검증하기 위해 도메인 레이어에서의 단위테스트를 꼼꼼히 작성하기로 결정했다.

 

물론 UI레이어와 Application 레이어도 테스트를 하면 좋겠지만, 비즈니스 로직 검증보다는 중요도가 낮다는 생각을 했고, 외부 인터페이스에 의존하는 부분을 모킹해줘야 하다 보니 E2E테스트로 어느정도 대체가 될 것 같다는 생각이 들었다.

 

테스트

e2e테스트

nestCLI를 이용해서 nestJS 프로젝트를 세팅하면 감사하게도 jest와 클라이언트 요청을 생성할 수 있는 supertest라는 라이브러리가 존재한다. playwright을 이용한 frontend E2E테스트밖에 사용해본 적이 없어서 조금 낮설었지만, 사용해보니 되게 편했다. 필요한 기능들의 도메인 제약사항들을 파악하고 이를 전부 유저스토리 형태의 명세로 작성해 e2e테스트를 하니 빠르게 피드백을 받으면서 과제를 구현해 나갈 수 있었다.

 

비즈니스 로직 테스트

단위 테스트에서 겪은 어려움

jest를 이용한 단위테스트는 React로 프론트엔드 테스트를 짜보면서 많이 경험해보았기 때문에 자신이 있었다.

다만 한가지 어려움을 겪었는데, TypeORM은 초기화 하는 과정에서 Entity의 생성자인자로 전달해준 매개변수 없이 생성자를 호출하는데, 만약 생성자 안에 예외처리 로직을 넣으면 이러한 이유 때문에 에러가 난다.

TypeORM 공식 리포지토리. 534번 줄을 확인하면 우리가 전달해준 매개변수를 확인할 수 없다.

그래서 Entity를 영속성 모델을 나타내기 위한 클래스로 사용하고, Entity의 필드를 매핑하여 도메인 모델을 생성해 비즈니스 로직을 처리했다.

 

도메인 레이어 테스트의 장점

다행히 과제에서 요구한 기능을 모두 작성해서 성공적으로 제출할 수 있었다.

도메인 레이어에서 단위테스트는 총 74개 가량 작성했고, 도메인 레이어의 단위테스트를 집중했을때 몇 가지 장점을 느꼈다.

 

- 모킹이 필요없다.

어플리케이션 레이어에서 필요한 객체들을 찾아서 도메인 레이어에게 전달해주므로, 사실상 도메인 레이어에서는 외부 API에 의존하지 않는다. 모킹이 필요없으니 테스트를 빠르게 작성할 수 있었다.

 

- 관심사의 분리

도메인 레이어에서 비즈니스 제약사항을 검증하려고 노력을 하니 자연스레 비즈니스 로직은 도메인 레이어에 몰리게 되고, 애플리케이션 레이어에서는 도메인 객체의 메서드만 사용해서 필요한 결과를 얻을 수 있었다. 레이어에 맞는 관심사가 자연스럽게 분리가 되었다.

 

좋았던점

시간에 쫒기는 상황에서 작업을 하다보니 테스트의 중요도를 고민해보고 꼭 필요하다고 생각하는 테스트인 e2e와 도메인 레이어의 단위테스트를 작성하게 되었는데, 덕분에 도메인 레이어와 e2e테스트의 장점을 직접 경험해볼 수 있었다.

앞으로도 그때그때 처한 상황에 맞는 판단을 내릴 수 있도록 고민해보자. 

 

다음주 계획

포트폴리오에서 동적쿼리를 이용하기 위해 JPA Specification을 이용했다. 하지만 이부분들을 QueryDSL을 이용해서 직접 쿼리를 짜보는게 더 직관적일 것 같다는 생각이 들어 이 부분들을 QueryDSL로 리팩토링 해보려고 한다. 다음주도 화이팅이다!

 

'주간회고' 카테고리의 다른 글

4월 3주차 주간회고  (0) 2023.04.16
4월 2주차 주간회고  (0) 2023.04.09
4월 1주차 주간회고  (0) 2023.04.02
3월 4주차 주간회고  (0) 2023.03.26
3월 3주차 주간회고  (0) 2023.03.19