단위테스트 꼭 해야 해요?
채워Dream. 이미 동작하는 함수가 있는데?
DevOps 하는데 단위 테스트 꼭 해야 해요?
DevOps 적용 및 개선 미션을 받고, 활동 방향을 세우던 중 어르신(이해관계자) 중 한 분께 받은 질문이었다.
그래 DevOps 전환한다고 하면 의례 나오는 질문이리라. DevOps의 핵심을 설명하고, 왜 CI/CD를 자동화해서 고객들에게 민첩하게 비즈니스를 전달해야 하는지에 대해서 설명드리는 전략으로 풀어내보자라는 다짐을 하며 미팅룸으로 발걸음을 옮겼다.
이미 동작하는 함수가 있는데 함수를 또 만들어요?
미팅룸에 오는 동안 생각한 전략들, 아니 그 이전에 내가 가진 DevOps의 개념들과 IT적인 지식들이 한방에 날아가고 잠시 말문이 막혔다. 망치로 한 대 맞는다는 것이 이런 느낌일까 싶었다.
수년간 학원에서 학생들을 교육하며 빅데이터 강의에 비구니께서 수강하러 오셨을 때에도 IT 강의를 듣는 학생이 부팅 버튼을 못 찾아서 물어봤을 때에도 말문이 막히지 않은 나였다.
우선 감사하다. 나의 말문이 막히는 상황을 만들어주셔서 나는 아직 성장할 수 있구나라고 다짐했고, 이 벽을 넘을 수 있다면 전사 DevOps 전환의 어떠한 벽도 넘을 수 있겠다는 목표를 세웠다.
개발 혼자 하세요?
테스트 코드를 작성해야 하는 이유는 명확하다. 개발 혼자 안 하니까.
우리는 다들 개발자인데 동작 안 하는 코드를 운영 환경에 배포하는 일은 실수가 아니면 발생할 수 없다.
(본인이 작성하는 코드를 동작도 안 하는데 구현했다고 적용할 개발자가 어디 있는가? 다만 우리는 실수를 자주 할 뿐이지...)
실수를 줄이고, 코드가 잘 작동한다는 신뢰성을 확보하고, 다른 개발자가 작성한 코드를 내가 수정하거나 참조하여 사용할 때 이상 없이 잘 작동함을 보증할 수 있어서 요즘 IT회사에서는 테스트 코드를 작성한다는 설명에 다시 나온 질문은 다음과 같았다.
DevOps랑 무슨 상관이 있어요?
맞다. 없다. 없다고 하고 그만해야 할까? IT회사에서 이야기하고 있는 게 맞긴 하는 걸까?라는 의문이 생겼지만 그럴 수 있다. 다시 한번 힘을 내보자.
DevOps는 테스트 코드/테스트 케이스를 작성해 두면 빌드/배포 시에 자동으로 수행하도록 만들 수 있습니다. 이런 자동화를 통해 지속적인 관리로 장애를 예방하고, 품질을 높이기 위한 활동이 DevOps 입니다. 즉, 지속적인 관리를 통하여 소프트웨어 개발 및 배포 프로세스를 개선하는 활동도 DevOps의 활동 중 하나입니다.
그럼 기존보다 작업 시간이 더 많이 필요하겠네요?
물리적인 시간은 테스트 코드를 작성해야 하는 시간만큼 더 필요한 게 맞다. 하지만 소프트웨어 개발이란 개발과 운영을 말하는데 개발은 6개월 - 1년쯤 한다. 운영은? 10년, 20년 하는 곳도 많다.
개발하는 6개월의 기간 동안 테스트 코드 작성하는 시간만큼 시간이 늘어나지만 운영하는 10년 동안 도움을 받을 수 있고, 소프트웨어의 품질은 테스트 코드로 인하여 좋은 품질을 가지고 있을 테니 오류도 더 적을 것이라 운영할 때까지 생각하면 테스트 코드는 반드시 작성해야 하는 것이 맞다고 설명드리고 미팅을 종료할 수 있었다.
이렇게 장점이 많은데 왜 사용 안 하는 곳도 있는 걸까?
당연히 시간이 더 투자되기 때문이다. 프로젝트에 돈을 내는 곳이나 관리하는 사람의 입장에서는 이 프로젝트가 언제 오픈하는지가 가장 중요한 사항이다. 그런데 시간이 더 투자된다고? 그럼 하지말하야 하는 이유도 당연히 수백 가지도 만들 수 있다.
이 글을 보시는 본인이 올림픽(프로젝트)을 1월 1일에 개최해야 하는데 품질을 높이는 작업(테스트)을 하면 더 좋을 것인데 개최일을 1월 7일로 미뤄야 한다는 보고를 받으면 뭐라고 하시겠는가?
이것처럼 상황에 따라서 품질보다 일정이 더 중요하게 작용하는 경우도 많고, 일반적인 프로젝트에서는 일정은 무엇보다도 중요하다.
그럼에도 난 테스트 코드를 작성해야 한다는데 한 표를 주고 싶다.
돌다리도 두들겨 보고 건너라
우리는 올림픽과 같은 물리적인 행사를 하는 것이 아닌 소프트웨어를 개발하는 사람들이므로 일정을 지키면서 품질을 높이는 노력을 기울인다면 분명 더 좋은 결과가 있을 것이라 생각하지만 시간상의 이유로 품질을 높이는 활동을 안 하는 경우가 많다.
하지만 테스트 없이 작성된 코드로 인하여 장애가 발생한다면 오히려 총 비용이 증가할 수 있다는 것을 유의해야한다.
돌다리도 두들겨보고 건너라고 한다. 돌다리 튼튼하고 무너질 위험이 없어보인다.
그렇지만 돌다리를 그냥 건너다가 빠지면 옷도 말려야 하고, 신발도 말려야 하고, 기분도 환기시켜줘야 하고, 신경 쓸 일이 많을 것이다. 건너기 전에 두들겨 보면 시간도 절약할 수 있을 것이다.