오래된 기술
어느 회사나 오래된 기술로 만들어진 시스템을 가지고 있을 것이다. 이것과 관련해서 흔히들 “잘 작동하면 만지지 마세요.”라고 얘기한다. 변경 사항이 없을 경우에는 맞는 말이다. 잘 동작되고 있는데 굳이 변경할 필요는 없기 때문이다. 하지만, 문제가 발생하거나 변경을 해야 할 경우에는 어떻게 해야 할까? 오래된 기술을 알고 있는 사람을 고용하기는 매우 어려울 것이다. 10~20년전에 이 코드를 작성한 사람들은 아마 은퇴를 했을 것이고, 젊은 개발자들은 이 기술을 배우고 싶어하지 않을 것이다. 억지로 하라고 하면 이탈로 이어질 것이고, 좋은 개발자는 그 조직에 있지 않게 될 것이다.
새로운 기술 채택 및 비즈니스 상황 대응
새로운 기술과 패턴들은 놀라운 속도로 등장하고 있다. 과거에 존재했던 것들보다 현대에는 관련 기술이 풍부하고 더 최적화되어 있는 것들이 많다. 이런 기술들을 적용하는 것은 디지털 세계에서 생존하는데 매우 중요하지만, 레거시 시스템으로 운용하는 기업은 경쟁의 속도를 따라 갈 수 없다. 비즈니스를 지원하는데 많은 비용과 시간이 소요되기에 필요 시점에 고객이 원하는 기능을 제공할 수 없기 때문이다.
애플리케이션은 언제 구식이 되는가?
빌게이츠는 “성공한 기업은 다른 기업보다 먼저 자신의 제품을 구식으로 만든 기업이다.”라는 말을 했다. 이 분야에서 일하면서 매년 새롭게 기술이 탄생하는 것을 지켜보게된다. 하지만, 새로운 기술이 나왔다고 바로 적용하진 않는다. 일반적으로 10-15년 정도가 애플리케이션의 수명이라고 생각한다. 시스템을 “구식”이라고 정의할 수 있는 기준은 무엇일까?
- 도입한 솔루션이 있을 경우, 벤더사의 지원을 더이상 받을 수 없을때에 해당된다.
- 새로운 비즈니스 요구사항을 반영하기 어려운 상황이 발생한 경우에 해당된다. (억지로 반영하다가는 부채만 쌓이게 된다.)
- 현재는 사용되지 않는 하드웨어 혹은 특정 상황에서만 작동되는 경우에 해당된다.
어떻게 현대화를 해야 할까?
애플리케이션을 현대화하기 위해서는 다음 사항이 고려되야 한다.
- 현대화를 해서 어떤 결과를 얻고자 하는가?
- 어떤 자원을 가지고 있는가?
- 직접 코드를 수정하거나 제어할 수 있는가?
- 변경되거나 새롭게 만들어야 하는 항목에 대해 위험 평가를 수행해야 한다.
현대화에 대한 비용 옵션은 어떤 것들이 있을까?
- 다음 세대로 미루고 아무것도 하지 않음
- 가장 쉬운 방법이다. 현대화를 통해 비즈니스 가치를 찾지 못한다면 올바른 선택이 될 수 있다.
- 어떤 시스템을 현대화하려고 하는데, 연관된 시스템들이 많아서 전부 건들 수 없는 경우에도 해당된다. 모두 완료되어야 현대화가 되기 때문에 불가한 상황이라고 판단
- 재호스팅 또는 리프트 앤 시프트
- 클라우드로 아무 수정없이 옮기는 방법이다.
- 재구축
- 재호스팅을 하면서 코드를 약간 변경하는 방식이다. 예를 들어서 데이터베이스, 검색 기능등은 클라우드 리소스를 활용한다.
- 애플리케이션 프론트엔드 현대화
- 백엔드에서 제공하는 API를 이용해 프론트엔드만 현대화하는 방식이다.
- UX는 시대에 따라 자주 변하기에 레거시 애플리케이션의 일반적인 문제 중 하나를 제거할 수 있다.
- 단, API가 잘 만들어져 있어야 한다.
- 리팩토링
- 간혹 애플리케이션이 현재 상황에 맞게 구축되지 않았거나 진화가 안되었을 경우에 해당된다.
- 비즈니스 로직은 변화하지 않으며, 코드가 새롭게 작성되는 방식이다.
- 완전 재구축
- 이 경우, 레거시 시스템을 완전 새로운 애플리케이션으로 대체한다.
- “빅뱅”으로 재구축하기에 철저한 분석, 설계, 테스트 및 데이터 마이그레이션 전략이 필요하다.
- 또한, 이전 애플리케이션으로 롤백하는 전략이 필요하다.
끝으로
현대화를 하기 위해서는 위험도, 예산, 시간, 리소스, 애플리케이션 종속성과 같은 제약 조건을 고려해야 한다. 가장 좋은 방법은 기존 애플리케이션을 분석하고 평가하여 TO-BE 방향성을 식별하는 것이다. 각 옵션에 대해 비용 및 위험 대비 효과와 같은 ROI를 추정해야 한다. 백데이터가 있어야 현대화 진행에 대한 의사결정을 할 수 있을 것이다.