필자는 지난주에 스크럼이 민첩하지도 않고 비효율적인 방법이라는 짧은 글을 작성했다. 그러다 문득 진정한 애자일을 가로막는 장애물 중 하나가 소프트웨어 기술의 한계라는 생각이 들었다 .당시 소프트웨어 개발 및 제공 방식은 고정적이고 변화에 민첩하게 대응할 수 없었다. 하지만 이제 우리는 점차 더 유연하고 민첩하게 대응할 수 있는 개발 방식으로 전환하고 있다.
모두가 애자일을 원하는 이유 중 하나는 워터폴 방식에 대한 반발이 컸고, 지금도 그렇기 때문이다. 워터폴 방식은 기본적으로 다음과 같이 진행되었다:
요구 사항을 정의하기 위해 미리 많은 작업을 수행한다.
소프트웨어를 구축한다.
고객에게 소프트웨어를 제공한다.
워터폴 방식은 처음에는 고객의 요구를 정확히 반영하는 합리적인 방식처럼 보였으나, 긴 개발 시간 동안 상황이 변화하면서 최종 제품이 초기 요구 사항과 일치하지 않는 경우가 많았다. 초기 요구 사항과 소프트웨어 제공 시점의 요구 사항이 달라지는 경우에도 이를 수용할 수 있는 메커니즘이 없었다.
어려웠던 변화
애자일 방법론의 핵심 아이디어는 이러한 문제를 완화하고 유연성과 변화하는 요구 사항을 수용하는 데 있다. 소프트웨어 개발 프로세스는 기능 개발과 요구 사항 변화에 따라 유연하게 변해야 한다. 소프트웨어는 이러한 변화에 빠르게 적응해야 하며, 이것이 애자일 선언문의 핵심 정신이다.
하지만 애자일 선언이 구상될 당시에는 소프트웨어 개발 및 소프트웨어 제공 기술의 상태가 선언이 추구하는 바를 충족할 만큼 유연하지 않았다. 하지만 SaaS 모델 등장으로 상황이 바뀌었다.
유연성을 극대화하는 것은 좋은 일이지만, 오랜 세월 동안 소프트웨어는 한꺼번에 제공되어야 했다. 단일 릴리스 날짜에 맞춰 여러 기능을 조율하고, 버그 수정을 위해 별도의 시간을 할당해야 했다. 기술의 한계로 인해 소프트웨어 개발 팀은 규율과 경직성, 융통성이 부족할 수밖에 없었다. 납기일을 맞추는 것이 최우선 과제였다.
일단 소프트웨어가 납품된 후에는 소프트웨어를 변경하려면 처음부터 다시 납품해야 했다. 업데이트는 종종 번거롭고 힘든 과정이었다. 복잡한 윈도우 프로그램의 경우 설치와 구성이 까다롭기도 했다. 예를 들어 윈도우를 실행하는 200대의 컴퓨터가 있는 환경에서 소프트웨어를 제공하거나 업그레이드하는 일은 큰 도전이었다. 따라서 소프트웨어 업데이트가 자주 이루어지지 않았으며, 설령 업데이트가 이루어진다고 해도 충분히 빠르고 빈번하게 제공되지 않았다. 고객은 하나의 버그 수정을 위해 공식 릴리스가 나올 때까지 기다려야 하는 경우가 많았다.
하지만 지금은 소프트웨어를 제공하는 방식이 달라졌다.SaaS와 지속적 통합/지속적 배포(CI/CD)의 등장으로 소프트웨어는 실행 중에도 완전히 제어할 수 있게 되었다. 브라우저에서 실행되는 클라이언트 앱도 서버에 있으며 요청이 있을 때마다 클라이언트로 전송된다. 소프트웨어를 한 지점에서 제어할 수 있다는 것은 새로운 기능과 버그 수정이 모든 사용자에게 즉시 제공된다는 것을 의미한다. 이제 기능을 모두 모아 특정 날짜에 한꺼번에 배포하던 방식에서 벗어나, 필요할 때마다 개별적으로 업데이트할 수 있게 되었다.
최고의 기능
‘배포는 최고의 기능’이라는 말이 있다. 오늘날에는 SaaS 애플리케이션을 몇 분 안에 고객에게 제공할 수 있다. 신규 고객은 최소한의 설정만으로 전체 애플리케이션을 즉시 사용할 수 있다. 브라우저를 통해 애플리케이션을 제공함으로써 개발자는 ‘빨리 자주 출시’할 수 있다. 기능 플래그(Feature Flag, 소프트웨어 개발에서 특정 기능을 필요에 따라 켜거나 끌 수 있게 해주는 설정)를 통해 기능을 즉각적이고 점진적으로 추가하고 모든 사용자가 즉시 사용할 수 있는 버그 수정을 배포할 수 있다.
SaaS 애플리케이션이 이렇게 쉽고 자주 제공될 수 있는 주된 이유는 테스트가 매우 쉽기 때문이다. SaaS 백엔드의 입력과 출력은 쉽게 정의할 수 있어 자동화된 테스트 구축이 간단하며, 강력한 테스트 모음을 몇 분 안에 실행할 수 있다. 과거 데스크톱 애플리케이션의 새 버전은 충분히 테스트하려면 며칠 또는 몇 주가 걸렸지만, 이제는 자동화된 테스트 도구로 강력한 테스트를 몇 분 만에 완료할 수 있다.
또한 배포에 문제가 있는 것으로 확인되면 몇 초 만에 정상 상태로 복구할 수 있다. 새로운 기능은 기능 플래그로 배포할 수 있으며, 문제가 발생하면 클릭 한 번으로 기능을 제거할 수 있다.
이 새로운 모델에는 몇 가지 매우 강력한 이점이 있다. 기능을 점진적으로 개발 및 배포할 수 있다. 새로운 기능을 병렬로 구축하여 일부 고객에게 배포할 수 있다. 팀은 더 많은 기능을 더 빨리, 더 높은 품질로 제공할 수 있으며, 개발자는 문제에 빠르고 유연하게 대응할 수 있다. 더 이상 모든 기능과 버그 수정을 특정 날짜에 한꺼번에 제공할 필요가 없다. 각각의 소프트웨어 기능이나 버그 수정을 준비가 완료되는 대로 개별 배포할 수 있기 때문이다.
즉, 우리는 이제 진정한 의미의 애자일 방식으로 소프트웨어를 구축할 수 있는 환경을 갖추게 되었다.
dl-ciokorea@foundryco.com