[책] 자바와 JUnit을 활용한 실용주의 단위 테스트를 읽고
부끄럽지만 지금껏 나는 테스트 코드와 정말 안 친한 사람이었다.. 그리고 포스트맨과 친한.. 항상 마음 한 켠엔 테스트 코드를 잘 사용하고 싶단 욕심은 있었지만 그러기엔 포스트맨이 너무 편했다.. 아마 지금까지 해온 프로젝트들이 매번 단발성의 기능 쳐내기식 토이 프로젝트들이었어서 더 테스트 코드의 중요성을 간과해왔던 거 같다. 또 순수 자바로 코딩을 해본 적은 이번이 사실상 처음이었는데 이제는 포스트맨이 없기에 더이상 물러설 곳이 없다. 실무에 가서도 포스트맨을 돌리고 있을 순 없기에 이번 프리코스 4주의 폐관 수련 기간을 틈타 테스트 코드를 제대로 공부해보기로 했다.
요즘 개발 서적 읽는 재미에 빠져서, 테스트 코드도 책을 구매해 학습했다. 정확하겐 학습보단, 읽고 그동안을 돌아보며 생각을 확장시켰다. “자바와 JUnit을 활용한 실용주의 단위 테스트”. 책 이름부터 이번 프리코스 미션에 딱 걸맞는 책이다. 졸프 수업이 끝나고 돌아오는 길에 잡담 겸 친구한테 내가 물었던 부끄러운 질문이 있다. “단위 테스트가 함수마다 짜는 거야? 나 테스트 하나도 몰라”. 동료의 답은 “어.. 설명하기 어려운 데 함수마다 짜는 건 아니야..”라고 답했고 단위 테스트가 무엇인지에 대한 궁금증이 더 커졌었다. 그리고 그 궁금증에 기반해 집에 돌아오자마자 감기 기운을 무시한채 이 책을 폭풍처럼 읽어나갔다. 이렇게 몰입해 빠르게 책을 읽은 것도 정말 오랜만인 거 같다. 거의 초등학생 때 재밌는 소설책을 만나 새벽까지 읽다 부모님한테 혼났던 때처럼 이 책에 빠져들었었다.
책에선 단위 테스트의 중요성을 계속해서 강조했다. 그리고 내가 느낀 단위 테스트의 말도 안되는 장점은 “각각의 테스트들이 독립적”이란 점이었다. 그동안 무지성으로 개발해올 때 매번 클래스들끼리 분명 의존성이 생기고 그 의존성으로 인해 어느 부분이 문제인지 트래킹해간 적이 많았었다. 예를 들면 어떤 api를 개발했는데 원하는 결과가 나오지 않아 컨트롤러부터 서비스, 레포지토리까지 타고 타며 들어가는 것이다. 이게 얼마나 비효율적인 방식이었는지 이 책을 보고 깨달을 수 있었다. 코드끼리 의존성을 없애는 건 사실상 불가능한데 단위 테스트는 이를 가능하게 하기에 말도 안되는 효율성이라 표현하고 싶다.
이 책을 읽고서 프리코스 2주차 구현을 시작하였는데 1주차와 확연히 달라진 내 태도를 느낄 수 있었다. 1주차엔 테스트코드의 필요성을 일말의 피조차 느끼지 못했었는데, 이번엔 미션 공지와 상관 없이 스스로 테스트 코드의 필요성을 느낄 수 있었고 나의 사고가 한 차례 더 확장됐음을 느꼈다. 특히 이번 미션은 기능 별로 커밋하라는 요구 사항이 추가되어 이를 지키기 위해선 꼭 기능 별로 구현을 차례차례 해나가야 했는데 기능을 구현하고서 테스트 코드 없이 다음 기능을 구현하려니 불안한, 처음 느껴보는 사고를 경험했다.
커밋컨벤션 재정리
과거 정했던 커밋컨벤션
- feat : 기능과 관련된 것(기능에 변화를 줌).
- 새로운 기능 추가.
- 요구사항 변경으로 기존 기능을 추가, 수정, 삭제
- fix : 코드 상 에러, 버그 픽스
- docs : 문서 추가/수정. 주석 추가/수정
- style : 개행, 들여쓰기, 공백 등
- refactor : 기능과 관련되지 않은 것(기능에 변화 주지 않음).
- 기능 변화 아닌 코드 리팩토링
- 파일 추가/이동/이름 변경/삭제
- test : 테스트 코드 추가/변경
- chore : 배포, 빌드 작업
우테코 가이드에 나오는 커밋컨벤션 그대로 사용하기로 함
- feat (feature)
- fix (bug fix)
- docs (documentation)
- style (formatting, missing semi colons, …)
- refactor
- test (when adding missing tests)
- chore (maintain)
Today in 프리코스
TIL 작성하기
몰입
실용주의 단위 테스트 책 읽기
구현하기
1일차_둘러보기, 환경설정하기
Oct 19, 2023
DIARY_DEVELOP
2일차_컨벤션 정리하기
Oct 20, 2023
DIARY_DEVELOP
3일차_설계에 대해 고민하기
Oct 21, 2023
DIARY_DEVELOP
4,5일차_MVC 온전히 이해하기
Oct 22, 2023
DIARY_DEVELOP
6일차_설계를 코드로 구현하기
Oct 24, 2023
DIARY_DEVELOP
7일차_리팩토링과 마무리하기
Oct 25, 2023
DIARY_DEVELOP
8,9일차_코드 리뷰 통해 객체지향에 다가가기
Oct 27, 2023
DIARY_DEVELOP
10일차_지난 과제 돌아보며 객체지향 이해하기, 의존성과 설계의 관계 맛보기
Oct 28, 2023
DIARY_DEVELOP
11일차_객체지향을 미션 설계에 적용하기(with [책] 객체 지향의 사실과 오해)
Oct 29, 2023
DIARY_DEVELOP
12일차_기능 별로 구현하며 단위 테스트의 필요성 느끼기 (with [책]
자바와 JUnit을 활용한 실용주의 단위 테스트)Oct 30, 2023
DIARY_DEVELOP
13,14일차_일급 컬렉션과 레코드 적용해 리팩토링하기
Oct 31, 2023
DIARY_DEVELOP
15, 16일차_코드 리뷰를 통해 성장하기(1)_다른 사람의 코드 읽으면 배운 것 정리
Nov 2, 2023
DIARY_DEVELOP
17일차_코드 리뷰를 통해 성장하기(2)_내 코드 개선하며 배운 것 정리
Nov 4, 2023
DIARY_DEVELOP
18일차_내가 찾은 설계 방법 공유하기, 공유에 대해 고민하기
Nov 5, 2023
DIARY_DEVELOP
19일차_지난 과제 피드백 고려해 설계하기
Nov 6, 2023
DIARY_DEVELOP
20, 21일차_일단 돌아가는 코드를 만들기
Nov 7, 2023
DIARY_DEVELOP
22일차_현재 도움이 될 것 생각하기 (디자인패턴과 mvc2 과감히 패스)
Nov 9, 2023
DIARY_DEVELOP
23일차_코드리뷰하기 (feat. converter 파고들기)
Nov 10, 2023
DIARY_DEVELOP
24일차_기획을 문서화하기
Nov 11, 2023
DIARY_DEVELOP
25일차_설계하며 고민하기
Nov 12, 2023
DIARY_DEVELOP
26, 27일차_구현하며 고민하기
Nov 13, 2023
DIARY_DEVELOP
