본 내용은 <개발 생산성 향상을 위한 체크리스트 12가지>의 저자인 박재호 님의 유튜브 채널, <채널 박재호>에 게시한 콘텐츠의 스크립트를 발췌 및 편집하였습니다.
안녕하십니까 채널 박재호를 운영하고 있는 박재호입니다.
저번에 <개발 생산성 향상을 위한 체크리스트 12가지> 트레일러를 올려 드렸는데요, 이걸 꼭 들어보고 싶어하시는 분들이 많으신 것 같아서 제가 오늘은 ‘기술과 환경의 변화’라는 주제로 이 콘텐츠의 주안점을 어디에 맞췄는지 설명 드리려고 합니다.
*그리고 10월 말까지 사용할 수 있는 해당 콘텐츠 쿠폰 선물을 준비했습니다. 유튜브 더보기 란에 안내 내용을 작성해 놓았으니, 읽고 참여하시면 당첨률이 높을 겁니다. (아래의 이미지를 클릭하면 해당 콘텐츠를 시청하실 수 있습니다⬇️)
각 본문 콘텐츠 항목⬇️에서는 개별 단위로 ‘아 이런 변화가 있구나’하고 알 수 있는데요. 조금 더 거시적으로 바라볼 필요도 있습니다.
(⬆️클릭하여 이미지 확대)
제가 콘텐츠 제작을 마치고 나서, 오늘 설명드린 내용을 인트로에 추가했으면 더 좋지 않았을까 라는 생각이 들었습니다.
뭐 항상 그렇지만 촬영을 다 마친 뒤에 미처 생각 못했던 아이디어가 나오곤 합니다🤣
❇️과거와 비교한 기술 부문의 변화 상황 – 컴포넌트 방식의 프로그래밍과 단위 테스트의 부상
이제 본격적으로 제가 어떤 점에 주안점을 뒀는지 설명 드리겠습니다.
기술의 변화 중 어떤 점이 저는 가장 크게 느껴지냐면요.
✨생산성을 높이기 위해서 처음부터 모든 것을 만드는 대신 컴포넌트 방식으로 프로그램을 개발한다.
과거에는 빌드를 할 때 로컬에 모든 의존성 라이브러리 등이 환경으로 설치돼 있어야 했습니다. 라이브러리 설치가 안 되어 있으면 소스 코드를 가져와서 직접 컴파일하는 방식이 전부였습니다. 하지만 이제 컴포넌트화 되고 OS 청원 시스템 라이브러리가 아닌 나만의 라이브러리로만 작업하기가 굉장히 까다롭다는 이야기입니다.
조엘 온 소프트웨어 문항 중에 ‘한 단계로 빌드할 수 있습니까?’, ‘일일 빌드를 진행하고 있습니까?’ 여기에 어떤 의미가 숨어 있냐면요. 바로 ‘소스 코드를 컴파일해서 뭘 하겠다’라는 암묵적인 가정이 숨어있는 겁니다. 그런데 요즘 Node.js라거나 파이썬으로 애플리케이션을 작성한다고 생각하면, 위의 문항처럼 단순히 잘 되지 않거든요.
그래서 ‘빌드라는 게 뭘 의미하는지’ 근본적으로 생각할 필요가 있습니다.
요즘의 빌드는 의존성 자체의 버저닝(versioning)이라든지 호환성을 관리하는 데 시간을 많이 소비합니다. 물론 이런 상황에서도 형상 관리 시스템의 중요도는 떨어지지 않습니다. 즉, 과거에는 두 가지가 한 축으로 동시에 움직였다면 지금은 이 두 가지 축으로 각각 움직이고 있다는 의미입니다. 이제 현대 환경에서는 ‘이 두 가지를 어떻게 효율적으로 관리하느냐’가 중요한 사안입니다.
✨그 다음 테스트입니다.
CI/CD 파이프라인을 만들어서 적용할 때도 ‘의존성을 어떤 식으로 잘 해결해주느냐’가 관건인데요. 우리가 컨테이너 환경을 말할 때 암묵적인 가정이 있습니다. 흔히 ‘도커로 만다’라는 표현을 쓰는데요. 의존성, 그리고 유틸리티와 같은 프로그램 패키지 단위 자체를 크게 잡을 수 있다는 겁니다. 이 부분이 과거에 비해서 현대 여러분이 직면하는 가장 큰 변화가 아닐까 싶습니다.
물론 옛날 방식으로 프로그램 짜는 분들도 아직 계시고, 어쩔 수 없이 아직 C언어를 사용하거나 아니면 외부 애플리케이션이나 라이브러리, 프레임워크를 최소로 사용하면서 작업을 해야 하는 그런 레거시 상황도 있다는 것도 제가 잘 알고 있습니다. 하지만 점점 더 이 부분이 현대적인 방식으로 바뀐다는 것에는 변함의 여지가 말씀을 드립니다.
이제 제가 단위테스트를 강조하고 있는 이유를 말씀 드릴게요.
단위(Unit) 테스트가 End to End(E2E) 테스트보다 점점 더 중요해지기 시작했습니다.
위의 그림은 어떤 회사의 내용을 말하는 걸까요?
바로 마이크로소프트입니다. 2015년도에는 단위 테스트보다는 E2E 테스트 비율이 훨씬 높았습니다. 그런데 2017년도가 되면 단위 테스트의 횟수가 더 높고, E2E 테스트 횟수가 줄어드는 걸 확인할 수 있습니다.
이렇게 된 이유를 고민할 필요가 있는데요. 과거에 비해 컴포넌트 단위로 소프트웨어를 만들고, 개발자가 사전에 한 번 스크리닝하고 좀 더 애자일하게 개발하는 관례가 굳어져서 E2E 테스트의 비율이 줄어든 게 아닌가 라는 생각을 개인적으로 하고 있습니다. (그럼에도 E2E 테스트는 반드시 필요하며, 중요합니다.)
흔히 ‘단위 테스트를 누가 만들어. 그냥 형식적인 것 아니야?’라고 생각할 수도 있습니다만, 전 세계에서 테스팅 조직이 제일 강한 회사 중에 하나인 마이크로소프트가 기존 E2E 테스트 방식에서 단위 테스트 쪽으로 급격하게 무게 중심을 옮기고 있다는 사실은 시사하는 바가 큽니다. 그만큼 단위 개별 컴포넌트에 책임을 맡은 사람들이, 즉 프로그래머가 직접 소프트웨어의 품질을 보증하는 일련의 움직임이 지속적으로 강화되고 있다는 것을 반증하고 있고요. 그렇기 때문에 여러분도 단위 테스트 쪽에 각별히 신경을 많이 쓰셔야 됩니다.
또한 자바, c++와 같은 강타입 언어보다는 자바스크립트, 파이썬 같은 약타입 언어들은 단위 테스트로 방어하지 않으면 런타임 중에 오류가 나는 경우가 있습니다. 하지만 자바나 c++ 같은 경우에는 컴파일 시점에서 대처할 수 있는 부분이 많아요. (물론 이 대처들이 완벽하지는 않습니다.) 상대적으로 자바스크립트나 파이썬을 사용해서 약간 느슨하게 코드를 짠 상태로 런타임 중에 문제가 발생하면 솔직히 대응할 방법이 별로 없습니다. 이런 문제가 있기 때문에 단위 테스트를 좀 더 강화하는 쪽으로 가는게 아닌가라는 생각도 합니다. 어쨌든 단위 테스트 자체가 매우 중요해지고 있다는 것은 사실인 것 같습니다.
본 내용은 다음 편에 계속 이어집니다. (➡ 클릭)