🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

[워밍업 클럽 4기 BE] 4주차 발자국

[워밍업 클럽 4기 BE] 4주차 발자국

강의

강의명: [Practical Testing: 실용적인 테스트 가이드]

학습 내용: 섹션7. ~ 마무리

이번 주는 남은 강의를 마무리하고 워밍업 클럽의 학습 일정에 마침표를 찍는 날이다. Mock 객체와 앞으로 테스트를 작성하는 데 있어서 가져 가면 좋을 마인드 셋을 배울 수 있었다.

 

Mock을 마주하는 자세

가장 기본적인 Mock의 사용법부터 왜 사용하는지, 그리고 Mock을 어디까지 다룰 것인지에 관한 전반적인 부분을 얘기한다.

외부 서비스의 API를 이용하거나 메일 전송과 같은 외부 네트워크를 타는 일련의 일들은 우리가 개발하는 과정 동안 계속 서비스를 붙여서 테스트하는 것도 비용이 발생하고, 외부 서비스에서 문제가 발생하는 것까지 우리가 제어할 수 없는 부분이다. 잘 작동할 거라는 믿음과 기대를 바탕으로 제어할 수 없는 부분 등을 Mock으로 대체하여 최대한 우리가 제어할 수 있는 부분에서 최선을 다하는 것이 옳다고 생각한다.

 

더 나은 테스트를 작성하기 위한 구체적인 조언

테스트 간 독립성을 보장하자

테스트는 별도의 실행 순서가 정해져 있지 않다. 그러므로 테스트 사이에는 순서가 무관하게 성공해야 하고 각각 독립적으로 실행되어야 한다.

공유 변수를 통해서 상태를 변경하고 순서가 정해져 있어야 하며, 만약 중간에 테스트가 수정이 발생하면 나머지 모든 테스트에 수정이 발생하게 된다.

Q. private 메서드의 테스트는?

client 입장에서 공개 API만 알면 된다. 내부 기능까지 알 필요가 없다. 굳이 하지 않아도 공개 API 검증하면서 자연스럽게 검증될 것이기 때문에 할 필요도 없는 것이다.

그렇다고 하더라도 테스트에 관한 생각이 자꾸 떠오른다면 이 메서드가 별도의 책임을 갖는 객체로써 분리해야 하는 것인가를 고민해 보자.

Appendix

학습 테스트

잘 모르는 기능, 라이브러리, 프레임워크를 학습하기 위해 작성하는 테스트로 여러 테스트 케이스를 스스로 정의하고 검증하는 과정을 통해 구체적인 동작과 가능함을 학습이 가능하여 관련 문서만 읽는 것보다 재밌게 학습할 수 있다.

Spring REST Docs

테스트 코트를 통한 API 문서 자동화 도구로 API 명세를 문서로 만들고 외부에 제공함으로써 협업을 원활하게 한다.

테스트를 통과해야 문서가 만들어지므로 신뢰도가 높고 프로덕션 코드에 비침투적이라는 장점이 존재하지만, 코드양이 많고, 초기 설정이 어렵다.

vs. Swagger

적용이 쉽고 문서에서 바로 API 호출을 수행해 볼 수 있다.

하지만 프로덕션 코드에 침투적이며 테스트와 무관하므로 신뢰도가 떨어진다.

미션

마지막 미션은 총 두 개였다.

Layered Architecture 구조 레이어별로 어떤 특징이 있고, 어떻게 테스트하면 좋을지 정리하는 미션과 테스트를 작성할 때 Mock에서 자주 사용하는 어노테이션의 차이를 한번 정리하고 테스트 내용을 살펴보고, 각 항목을 어떻게 배치할지 생각해 보는 미션이었다.

이번 미션은 전부 '자신의 언어로 다시 한번 표현할 수 있는가?'가 핵심이라고 생각한다. 무언가를 단순히 배우는 것에서 그치는 것이 아닌 스스로 한 번 더 생각해 보면서 학습의 일련의 과정에서 내가 놓친 부분과 부족한 부분을 스스로 다시 돌아보고 채워나가는 과정을 통해 나를 더 단단하게 만들어 나가는 시간이었다.

 

회고

총 4주에 걸쳐 클린 코드를 지칭하는 수많은 원칙과 조언과 테스트에 대한 많은 내용들을 배웠다.

그중에서도 가장 기억 남는 두 가지는 아무래도 '왜 지켜야 하는가?'와 '은탄환이 아닌 도구에 불과하다'라는 것이다. 이 모든 것은 적재적소에 알맞게 사용하는 것이 중요하고, 우리는 이런 것들을 지키면서 일을 하는 개발자로 주어진 기한 내에 요구사항을 모두 만족하는 프로덕트를 개발하는 것이 가장 중요한 사항이다. 도구에 매몰되어 우리의 본분을 잊지 말자.

그리고 가장 만족도가 높았던 시간은 코드 리뷰 시간이다.

선배 개발자에게 직접 모르는 것을 물어보고 나의 코드를 리뷰 받는 기회가 흔치 않고, 다른 사람들의 코드도 보면서 여러 시야를 확인할 수 있었고 많은 것을 배울 수 있을 거로 생각했지만 생각한 것 이상으로 많은 것을 얻어갈 수 있어서 너무 만족했던 시간이다.

마지막에는 하나의 프로젝트를 만들어가면서 실제 서비스와 비슷한 구조에서 테스트가 어떤 의미를 가지는지 배울 수 있었다.

4주라는 기간 동안 혼자 학습하는 것이 아닌 다른 사람들과 함께 공통의 목표를 향해 달려가면서 중간중간 포기하고 싶어지는 순간에도 열심히 노력하는 주변을 보면서 다시 한번 마음을 다잡을 수 있었고 끝까지 안주할 수 있었다.

댓글을 작성해보세요.

채널톡 아이콘