워밍업 클럽 4기 백엔드 - 3주차 발자국
강의 내용
3주차에는 Practical Testing: 실용적인 테스트 가이드 강의의 Spring & JPA 기반 테스트 섹션을 수강했다.
Layered Architecture와 테스트
Presentation Layer - Business Layer - Presentation Layer 각 계층에 대한 테스트 방법
테스트 하기 복잡해 보이지만, 기본적으로는 단위 테스트와 비슷
테스트 하기 어려운 부분을 분리해 테스트 하고자 하는 영역에 집중하고, 명시적이며 이해하기 쉬운 테스트 코드 작성
어떤 기술을 사용하는지가 중요한 게 아니고, 어떻게 테스트할 것인지에 집중
여러 모듈, 여러 객체가 통합해서 동작하는 경우, 단위 테스트와 별개로 통합 시에 어떻게 동작하는지를 확인하기 위한 통합 테스트가 필요
Persistence Layer
영속성 계층은 Data Access 역할 수행
비즈니스 로직이 포함되어서는 안 되며, CRUD 그 자체에만 집중
Business Layer
비즈니스 로직을 담당
트랜잭션 보장의 책임을 지님
Persistence Layer와 연계하여 통합 테스트 느낌으로 테스트 작성
Presentation Layer
외부 세계의 요청을 가장 먼저 받는 계층
Presentation Layer 테스트 시 가장 집중해야 할 부분은 파라미터에 대한 검증
하위 레이어들이 정상적으로 동작할 것을 가정하고 Mocking 하여 테스트 수행
Mock MVC: 목 객체를 이용해 스프링 MVC 동작을 재현할 수 있는 테스트 프레임워크
회고
강의를 수강하며 테스트 코드를 사실상 처음 작성해본 입장에서 이번 3주차에 들은 강의는 정말 많은 도움이 된 것 같다. 3주차 강의를 들으면서는 강의를 멈춰 놓고 먼저 테스트 코드, 기능 구현을 해보고 강의를 재생해 확인하는 방식으로 공부했다. 테스트 코드를 직접 작성해보고 강의를 듣다 보니 왜 테스트 코드를 짜야 하는지 확실히 체감할 수 있었다. 코드 변경 시에도 테스트 코드를 통해 수시로 확인해볼 수 있어 한 층 편리하기도 하고, 어떤 테스트를 수행해야 할지 고민하는 과정에서 생각지 못 한 예외 케이스를 떠올릴 수 있었다. 복습하는 과정에서 작성했던 테스트 코드를 읽으면서 왜 테스트 코드도 문서라고 하셨는지도 이해했다.
테스트 코드 강의를 수강하면서 생긴 고민이 한 가지 있는데, 여건 상 실무에서 테스트 코드를 작성하기가 쉽지 않다는 점이다. 지금 재직 중인 회사에서 '테스트'라는 건 Postman으로 API 호출해서 응답이 잘 돌아오고 데이터베이스에 값이 잘 들어가는지 확인하는 것, 브라우저로 개발한 페이지에 접속해서 기능 사용해 보는 과정을 의미한다. 물론 필요하지만, 뭐 하나 고칠 때마다 똑같은 걸 계속 하려다 보니 피로감이 컸다. 저번주 금요일에 들었던 테스트 강의 초반부에 정확히 동일한 내용이 나와서 이번주 강의 내용을 정말 기대했는데, 기대한 것 이상의 가치가 있는 내용이었다고 생각한다. 단순히 반복되는 수동 테스트의 피로도를 낮추는 것을 넘어서 코드 품질을 높일 수 있는 정말 좋은 방법 중 하나인 것 같다. 테스트 코드 도입은 어려울 것 같지만, 그렇더라도 의식적으로 테스트 용이성을 신경쓰면서 테스터블한 스타일로 개발하려는 노력 정도는 얼마든 해볼 수 있을 것 같다.
미션
Day 11
Day 11 미션은 Readable Code 강의에서 작성한 소스의 단위 테스트를 작성하는 것이었다. 미션 수행에 있어 '테스트가 필요하다고 판단하는 과정부터 테스트의 시작'이라는 조언을 주셨는데, 미션을 시작하려던 순간에 정말 공감되는 조언이었다. 테스트 코드 작성이 익숙하지 않았지만, 나름대로 중요한 비즈니스 로직이나 추후에 변경될 가능성이 있는 부분을 찾아 테스트 코드를 작성해보려고 노력했다. 가장 어려웠던 작업 중 하나는 @DisplayName을 작성하는 것이었다. 도메인 용어를 사용한 추상화 된 내용을 작성해야 하며, 도메인 정책의 관점으로 설명을 작성해야 한다고 했지만, 미션에서 작성한 단위 테스트는 워낙 간단한 내용들이라 처음에는 갈피를 잡지 못 했다. 얼마나 자세히 써야 할지, 자세히 쓴다고 썼지만 너무 구현 측면의 세부사항에 의존한 설명은 아닌지 계속 고민이 되었다. 많은 연습과 고민이 필요할 것 같다는 생각이 들었다.
댓글을 작성해보세요.